📄 xnbm.c
字号:
#include<stdio.h>
#include<math.h>
#define n 100
main()
{ float p[n],pt[n],pt1[i],k[n],t;
int i,j,k,b[n];
printf("please input N:\n",N); //输入信源消息符号个数
scanf("%d",&N);
for(i=0;i<N;i++) //输入信源消息符号概率
{ printf("please input p[xi]:\n");
scanf("p[%d]=%f",&i,&p[i]);
}
for(i=0;i<N-1;i++) //将信源消息符号按其出现的概率从大到小排序
for(j=i+1;j<N;j++)
if(p[i]<p[j])
{ t=p[i];
p[i]=p[j];
p[j]=t;
}
for(i=0;i<N;i++) //确定整数码长
for(j=0;;j++)
{if(j>=-log(p[i])/log(2)&&j<-log(p[i])+1)
k[i]=j;
}
for(i=0;i<N;i++) //计算第i个消息的累加概率
for(k=0;k<i;k++)
{pt[0]=0;
pt[i]+=p[k];
}
for(i=0;i<N;i++) //将累加概率转换成比码长多一位的二进制数的小数部分
for(k=0;k<k[i]+1;k++)
{pt1[i]=pt[i]*2;
if(pt1[i]>=1)
{b[k]=1;
pt1[i]=pt[i]-1;
}
else
b[k]=0;
}
for(i=0;i<N;i++) //输出信源消息符号所对应的二进制编码
for(k=0;k<k[i];k++)
printf("the code of sign x%d is %d:\n",i,b[k]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -