C语言程序,从文件中读1000个数,对数据进行平均值等处理,运行没问题,结果没办法显示,高手看看

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,e... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
int xx[MAX], odd = 0, even = 0;
double ave1 = 0.0, ave2 = 0.0, totfc = 0.0;
void WriteDat(void);
int ReadDat(void)
{
FILE *fp;
int i, j;
if ((fp = fopen("IN.DAT", "r")) == NULL)//文件打开函数
return 1;
/**************************************/
for (i=0;i<100;i++)
{
for(j=0;j<10;i++)
fscanf(fp,"d,",&xx[i*10+j]);
fscanf(fp,"\n");
if(feof(fp))
break;
}
/**************************************/
fclose(fp);//文件关闭
return 0;
}
void Compute(void)
{
int i,j,sum1,sum2;
double sum3;
for(i=0;i<1000;i++)
{
if(xx[i]%2!=0)
{odd++;sum1=sum1+xx[i];}
else
{even++;sum2=sum2+xx[i];}
}
ave1=sum1/odd;
ave2=sum2/even;
for(i=0;i<1000;i++)
{
if(xx[i]%2==0)
sum3=sum3+(xx[i]-ave2)*(xx[i]-ave2);
}
totfc=sum3/even;

}
void main()
{
int i;
for (i=0; i<MAX; i++)
xx[i] = 0;
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!\007\n");
return;
}
Compute();
printf("ODD=%d\nEVEN=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",
odd, even, ave1, ave2, totfc);
WriteDat();
}
void WriteDat(void)
{
FILE *fp;
fp = fopen("OUT.DAT", "w");
fprintf(fp, "%d\n%d\n%f\n%f\n%f\n", odd, even, ave1, ave2, totfc);
fclose(fp);
}
展开
 我来答
百度网友1fc36d4
2011-11-07 · TA获得超过3131个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1840万
展开全部
ReadData()函数里面
for (i=0;i<100;i++)
{
for(j=0;j<10;i++)
fscanf(fp,"d,",&xx[i*10+j]);
fscanf(fp,"\n");
if(feof(fp))
break;
}
这里 fscanf(fp,"d,",&xx[i*10+j]); 你掉了%,应该是fscanf(fp,"%d,",&xx[i*10+j]);
而fscanf(fp,"\n");这句不要的,fscanf会自动跳过回车符往后取数。
而if(feof(fp)) break;应该也放到
for(j=0;j<10;i++)
fscanf(fp,"d,",&xx[i*10+j]);
这个循环里面去好些,每次读数都都得判断下是否文件尾了。

而Compute()函数里面,你的sum1,sum2,sum3要先初始化为0.
这里还有个问题,假设前面ReadData()函数实际读入的数据没有1000个,你会把空白数据0作为偶数统计进去还参与了作平均。这样做不对吧?除非你确保读入1000个数据。
然后ave1=sum1/odd;这样计算是整数/整数,估计会四舍五入了,最好换成ave1=sum1*1.0/odd;
或者sum1,sum2也定义成double类型的。

你没有带上测试数据,没法测试了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式