返回信息流今天用vs2008变了一个程序,编译出现了一个有点问题,我弄了好久都解决不了,请大家帮忙看看。谢谢!程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#define DELTA 1e -6
int main(void)
{
int i,j,k;
int r,s;
float *p_i=NULL;
float **p_ji=NULL;
float **phi_ij=NULL;
float C,C_pre;
float *sum=NULL;
float para,p,test;
/*read the number of input symbol:r and the number of output synbol:s*/
fscanf(stdin,"%d",&r);
fscanf(stdin,"%d",&s);
/*allocation dynamic storage to p_i,p_ji,phi_ij,sum*/
p_i=(float *)calloc(r,sizeof(float));
p_ji=(float **)calloc(r,sizeof(float));
for(i=0;i<r;i++)
p_ji[i]=(float *)calloc(s,sizeof(float));
phi_ij=(float **)calloc(r,sizeof(float));
for(i=0;i<r;i++)
phi_ij[i]=(float *)calloc(s,sizeof(float));
sum=(float *)calloc(r,sizeof(float));
/*read the value of p_ji*/
for(i=0;i<r;i++)
for(j=0;j<s;j++)
p_ji[i][j]=fscanf(stdin,"%f",&p_ji[i][j]);
/*validate the data of the p_ji*/
for(i=0;i<r;i++)
{
test=0.0;
for(j=0;j<s;j++)
test=test+p_ji[i][j];
para=fabs(test-1.0);
if(para>DELTA)
{
fprintf(stdout,"invalid data \n");
return(-1);
}
}
/*initialize the p_i and C*/
for(i=0;i<r;i++)
p_i[i]=1.0/(float)r;
C=-100000;
k=0;
/*start calculate*/
do
{
k++;
for(j=0;j<s;j++)
{
p=0.0;
for(i=0;i<r;i++)
p=p+p_i[i]*p_ji[i][j];
para=fabs(p);
if(para>=DELTA)
for(i=0;i<r;i++)
phi_ij[i][j]=p_i[i]*p_ji[i][j]/p;
else
for(i=0;i<r;i++)
phi_ij[i][j]=0.0;
}
p=0.0;
for(i=0;i<r;i++)
{
sum[i]=0.0;
for(j=0;j<s;j++)
{
para=fabs(phi_ij[i][j]);
if(para>=DELTA)
sum[i]=p_ji[i][j]*log(phi_ij[i][j])/log(2.0);
else
{
fprintf(stdout,"error,\n");
return(-1);
}
}
sum[i]=exp(sum[i]);
p=p+sum[i];
}
for(i=0;i<r;i++)
p_i[i]=sum[i]/p;
C_pre=C;
C=log(p)/log(2.0);
}
para=fabs((C-C_pre)/C);
while(para>DELTA);
free(sum);
sum=NULL;
/*output the result*/
fprintf(stdout,"the capacity of the channel is %.6f bit/symbol,\n",C);
fprintf(stdout,"the best input propobility profile is \n");
for(i=0;i<r;i++)
fprintf(stdout,"%.6f",p_i[i]);
fprintf(stdout,"\n");
/*Previously allocated memory block to be freed*/
for(i=s-1;i>=0;i--)
{
free(phi_ij[i]);
phi_ij[i]=NULL;
}
free(phi_ij);
phi_ij=NULL;
for(i=s-1;i>=0;i--)
{
free(p_ji[i]);
p_ji[i]=NULL;
}
free(p_ji);
p_ji=NULL;
free(p_i);
p_i=NULL;
return(0);
}
有下划线的就是出错的行
编译的结果:
1>c:\users\sunxiaojun\documents\visual studio 2008\projects\capacity of channel\capacity of channel\capacity of channel.cpp(52) : error C2021: 应输入指数值而非“ ”
1>c:\users\sunxiaojun\documents\visual studio 2008\projects\capacity of channel\capacity of channel\capacity of channel.cpp(75) : error C2021: 应输入指数值而非“ ”
1>c:\users\sunxiaojun\documents\visual studio 2008\projects\capacity of channel\capacity of channel\capacity of channel.cpp(90) : error C2021: 应输入指数值而非“ ”
1>c:\users\sunxiaojun\documents\visual studio 2008\projects\capacity of channel\capacity of channel\capacity of channel.cpp(109) : error C2021: 应输入指数值而非“ ”
这是一条镜像帖。来源:北邮人论坛 / cpp / #38796同步于 2010/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求c语言大牛帮忙解决一下我的问题
sunxiaojun
2010/5/2镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复