#include
#include
void main()
{
int i,n, j,k;
float sum=0;
float p[100]={0};
float m;
float Pa[100]={0};
int l[100];
char c[100][100];
printf("请输入x的个数\n");
scanf("%d",&n);
printf("\n");
printf("请输入p[i]的概率分布\n");
for(i=0;i
scanf("%f",&p[i]);
for(i=0;i<=n;i++)
sum=sum+p[i];
while(sum!=1)
{printf("错误输入,请重输\n");
printf("请输入x的个数\n");
scanf("%d",&n);
printf("\n");
printf("请输入p[i]的概率分布\n");
for(i=0;i
scanf("%f",&p[i]);
for(i=0;i
sum=sum+p[i];
}
for(j=0;j
for(i=0;i
if(p[i]
{
m=p[i];p[i]=p[i+1];p[i+1]=m;
}
printf("p[i]由大到小的顺序为\n:");
for(i=0;i
printf("%5.2f",p[i]);
printf("\n");
Pa[0]=0;
for(j=1;j
{
Pa[j]=Pa[j-1]+p[j-1];
}
printf("累加和Pa为:");
for(j=0;j
printf("%5.2f",Pa[j]);
printf("\n");
printf("码长:");
for(i=0;i
{
m=log(1/p[i])/log(2);
if(m==(int)m)
l[i]=(int)m;
else
l[i]=(int)(m+1);
}
for(i=0;i
printf("%d ",l[i]);
printf("\n");
for(i=0;i
{
for(k=0;k
{m=Pa[i]*2;
if(m>=1)
{
m=m-1;
c[i][k]='1';
}
else
c[i][k]='0';
}
}
for(i=0;i
{
for(k=0;k
printf("%c",c[i][k]);
printf("\n");
}
}