电影侬本痴情:急求c语言小程序(100行左右)!!哪位兄台有啊?

来源:百度文库 编辑:高校问答 时间:2024/05/10 06:31:23
100行左右的turbo c源程序,谢谢

#include <stdio.h>
#include <conio.h>
#include <math.h> //以上为将本原文件所须用的函数的头文件包含进来;
#define M 2 //宏定义确定信道转移矩阵的行;
#define N 2 //宏定义确定信道转移矩阵的列;
void load(double p[][N],double px[]) //录入信道转移矩阵以及对发符号概率分布矩阵进行初始化函数;
{
int i,j;
double t;
printf("Please input the date of the array.\n");
for(i=0;i<M;i++)
{
t=0.0;
px[i]=1.0/M;
for(j=0;j<N;j++)
{
printf("Please input the %dth element of the array.p[%d][%d]=",(i+1)*(j+1),i,j);
scanf("%lf",&p[i][j]);
}
}
}
double pip(double p[][N],double px[],int n) //计算逆转移信道矩阵的分母函数;
{
int i;
double s=0;
for(i=0;i<M;i++)
s+=px[i]*p[i][n];
return s;
}
void qixy(double p[][N],double px[],double q[][M]) //计算逆转移信道矩阵的函数;
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
q[i][j]=p[j][i]*px[j]/pip(p,px,i);
}
double epq(double p[][N],double q[][M],int n) //计算发符号概率分布矩阵分母函数;
{
int i;
double t=0;
for(i=0;i<N;i++)
t+=p[n][i]*log(q[i][n]);
return exp(t);
}
void px_i1(double px[],double p[][N],double q[][M]) //计算发符号概率分布矩阵函数;
{
int i;
for(i=0;i<M;i++)
px[i]=epq(p,q,i)/(epq(p,q,0)+epq(p,q,1));
}
double c(double px[],double p[][N],double q[][M]) //计算信道容量函数;
{
int i,j;
double t=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
t+=px[i]*p[i][j]*log(q[j][i]/px[i])/log(2.0);
return t;
}
void output(double p[][N],double q[][M],double px[],double C) //输出函数;
{
int i,j;
for(i=0;i<M;i++) //输出信道转移矩阵;
{
for(j=0;j<N;j++)
printf("p[%d][%d]=%6.5f ",i,j,p[i][j]);
putchar('\n');
}
for(i=0;i<M;i++) //输出发符号概率分布矩阵;
printf("px[%d]=%6.5f ",i,px[i]);
putchar('\n');
for(i=0;i<N;i++) //输出逆信道转移矩阵;
{
for(j=0;j<M;j++)
printf("q[%d][%d]=%6.5f ",i,j,q[i][j]);
putchar('\n');
}
printf("C=%6.5f\n",C);
putchar('\n');
}
void main() //主函数;
{
char flag='y',c3;
double p[M][N]={0},q[N][M]={0},px[M]={0},c1,c2=0; //定义相关变量;
while((flag=='y')||(flag=='Y')) //实现重复计算循环体;
{
load(p,px); //录入数据;
putchar('\n');
do //计算信道容量循环体;
{
c1=c2;
qixy(p,px,q);
px_i1(px,p,q);
c2=c(px,p,q);
}while(fabs(c2-c1)>1.0e-6); //误差控制;
output(p,q,px,c2); //输出相关信息;
while(1) //实现选择是否要连续计算循环体;
{
printf("Continue?(Y/N)\n");
getchar();
c3=getchar();
if((c3=='y')||(c3=='Y'))
{
flag=c3;
break;
}
if((c3=='n')||(c3=='N'))
{
flag=c3;
break;
}
if((c3!='n')&&(c3!='N')&&(c3!='y')&&(c3!='Y'))
printf("Error!\n");
}

}
}