回 帖 发 新 帖 刷新版面

主题:香农编码的代码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");
    }
    }

}    

回复列表 (共2个回复)

沙发

请问下这个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;
            }
        }
这段程序是什么意思呀..你能在每一行都加上注释吗??谢谢..

板凳

就是把十进制小数转换成二进制

我来回复

您尚未登录,请登录后再回复。点此登录或注册