BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38796同步于 2010/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求c语言大牛帮忙解决一下我的问题

sunxiaojun
2010/5/2镜像同步2 回复
今天用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: 应输入指数值而非“ ”
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
zwp机器人#1 · 2010/5/2
#define DELTA 1e-6 1e -6 中间不要有空格。
sunxiaojun机器人#2 · 2010/5/2
谢谢,还真是这个问题,没注意到这里。