C语言程序:#includestdio.h#includemath.h#includestdlib.hintmain(){intr,s,i,j,k=0;doublep[20];%存放输入信源概率矩阵doublez[20];doubleq[20][20];%存放信道转移概率矩阵doubleF[20][20];%存放(|)iipxy的概率分布矩阵的转置doublex,y,a;doubleepsilon=1e-5;%门限doubleC=-1000.0;%取初始迭代时的信道容量为一个较大的负数printf(\n请输入信源符号个数:);scanf(%d,&r);printf(\n请输入信宿符号个数:);scanf(%d,&s);printf(\n请输入信道转移概率矩阵:\n\n);for(i=0;ir;i++){for(j=0;js;j++)scanf(%lf,&q[i][j]);printf(\n);}for(i=0;ir;i++)p[i]=(double)(1.0/(double)r);%设初始信源分布为等概分布do{k++;a=C;for(j=0;js;j++){x=0.0;for(i=0;ir;i++)x=x+(p[i])*(q[i][j]);%x为(|)iipxy的分母部分if(x0)for(i=0;ir;i++)F[i][j]=(p[i])*(q[i][j])/x;%F为(|)iipxy的概率分布矩阵的转置elsefor(i=0;ir;i++)F[i][j]=0.0;%(|)iipxy的分母部分为0时,令F=0}y=0.0;for(i=0;ir;i++){z[i]=0.0;for(j=0;js;j++){if(F[i][j]0)z[i]=z[i]+(q[i][j]*(log(F[i][j])/log(2.0)));%z[i]为ip的分子部分}z[i]=(pow(2.0,z[i]));y=y+z[i];%z[i]为ip的分母部分}for(i=0;ir;i++){p[i]=z[i]/y;%更新输入信源概率矩阵}C=(log(y)/log(2.0));%求信道容量单位为“bit”}while(fabs((C-a)/C)epsilon);printf(\n迭代次数为;k=%d\n,k);%输出迭代次数printf(\n最佳信源分布为:\n\n);for(i=0;ir;i++){printf(%.3lf,p[i]);%输出信源的最佳分布,保留3位小数}printf(\n);printf(\n信道容量为:C=%.3lfbit\n\n,C);%输出信道容量,保留3位小数}问题1的执行结果:问题2的执行结果: