📄 shannon.c
字号:
#include "stdio.h"
#include "math.h"
main()
{
int i,t;
float buff,ka,R,Hx;
float p[ ]={0,0.2,0.19,0.18,0.17,0.15,0.10,0.01}; /*符号概率*/
float ps[10]; /*累加概率*/
int k[10]; /*码字长度*/
char m[10][10]; /*码字*/
/*计算累加概率*/
for (i=1;i<=7;i++)
{
for(t=1;t<i;t++)
{
ps[i]=ps[i]+p[t];
}
}
/*计算码字长度*/
for(i=1;i<=7;i++)
{
k[i]=(int)((-log(p[i])/log(2)))+1;
}
/*求出码字*/
for(i=1;i<=7;i++)
{
buff=ps[i];
for(t=1;t<=k[i];t++)
{
buff=buff*2;
if(buff>=1)
{
m[i][t]='1';
buff=buff-1;
}
else
{
m[i][t]='0';
}
}
}
/*输出结果*/
for(i=1;i<=7;i++)
{
printf("The code word x%d is:",i);
for(t=1;t<=k[i];t++)
{
printf("%c",m[i][t]);
}
printf("\n");
ka=ka+p[i]*k[i];
Hx=Hx-p[i]*(log(p[i])/log(2));
}
R=Hx/ka;
printf("The average length is %f m/f",ka); /*m/f:码元/符号*/
printf("The rate is %f bit/m",R); /*bit/m:比特/码元*/
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -