or(int i=0;i<n;i++) { cout<<"X"<<i+1 <<setw(8)<<setprecision(2)<<p[i] <<setw(8)<<setprecision(2)<<pxj[i] <<setw(8)<<k[i]<<" "; mz[i]=pxj[i]; for(int j=0;j<k[i];j++) { if(2*mz[i]-1>=0) { cout<<1; mz[i]=2*mz[i]-1; } else { cout<<0; mz[i]=2*mz[i]; }} cout<<endl; } double K=0.0,H=0.0,Y; for(i=0;i<n;i++) { K+=(double)p[i]*k[i]; H+=(-1)*p[i]*(log10(p[i])/log10(2.0)); } Y=H/K; cout<<" 平均码长:"<<K<<endl; cout<<" 信源熵:"<<H<<endl; cout<<" 编码效率:"<<Y<<endl; } void main() {T t;int e; try { t.Create(); t.Coutpxj(); t.Coutk(); t.Print(); } catch(int e) {if(e==1) cout<<" 输入错误,请重新运行";} } 六. 心得体会在本次的课程设计中, 我感觉最大的难题就是对 C 语言编程的运用不够熟练, 但是通过相应的复习, 我还是收获很多, 并把握住了一些基本知识点, 最后经过不断尝试编写程序, 还是较好的完成了本模块的设计。对于香农编码而言, 主要是弄清楚各个步骤, 像求码长、累加和、概率排序, 每个模块建立一个函数, 使得程序简单易读, 自己的思路也更清晰明了。编码的原理我们都很清楚, 主要就是在一些 C和 C++ 基本知识上的巩固才能做好这次的实验。