主题:香农编码的代码2
#define NUM 100
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
void bubblesort(float a[],int n)
{
int i,j,flag=1;
float temp;
for(i=1;i<n&&flag==1;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(a[j]<a[j+1])
{
flag=1;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void main()
{
float p[NUM],P[NUM],e[NUM],c=(float)log(2);
int i,j,l[NUM],k[NUM][10],num;
while(1)
{
printf("输入信息个数:\n");
scanf("%d",&num);
printf("输入信息:\n");
for(i=0;i<num;i++)
scanf("%f",&p[i]);
bubblesort(p,num);
for(i=0;i<num;i++)
{
e[i]=-(float)log(p[i])/c;
l[i]=(int)(e[i]+1);
}
P[0]=0;
for(i=0;i<num-1;i++)
P[i+1]=P[i]+p[i];
for(i=0;i<num;i++)
{
printf("%3.2f%10.3f%10.2f%5d ",p[i],P[i],e[i],l[i]);
for(j=0;j<l[i];j++)
{
if(P[i]*2>1)
{
P[i]=P[i]*2-1;
k[i][j]=1;
}
else
{
k[i][j]=0;
P[i]=P[i]*2;
}
}
for(j=0;j<l[i];j++)
printf("%d",k[i][j]);
printf("\n");
}
}
}
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
void bubblesort(float a[],int n)
{
int i,j,flag=1;
float temp;
for(i=1;i<n&&flag==1;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(a[j]<a[j+1])
{
flag=1;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void main()
{
float p[NUM],P[NUM],e[NUM],c=(float)log(2);
int i,j,l[NUM],k[NUM][10],num;
while(1)
{
printf("输入信息个数:\n");
scanf("%d",&num);
printf("输入信息:\n");
for(i=0;i<num;i++)
scanf("%f",&p[i]);
bubblesort(p,num);
for(i=0;i<num;i++)
{
e[i]=-(float)log(p[i])/c;
l[i]=(int)(e[i]+1);
}
P[0]=0;
for(i=0;i<num-1;i++)
P[i+1]=P[i]+p[i];
for(i=0;i<num;i++)
{
printf("%3.2f%10.3f%10.2f%5d ",p[i],P[i],e[i],l[i]);
for(j=0;j<l[i];j++)
{
if(P[i]*2>1)
{
P[i]=P[i]*2-1;
k[i][j]=1;
}
else
{
k[i][j]=0;
P[i]=P[i]*2;
}
}
for(j=0;j<l[i];j++)
printf("%d",k[i][j]);
printf("\n");
}
}
}