南开100题第93题的疑问
来源:百度知道 编辑:UC知道 时间:2024/09/23 02:27:24
请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute(),分别计算出xx中奇数的个数odd,偶数的个数even,平均值aver以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
计算方差的公式如下:
N 2
totfc=1/N ∑ (xx[i]-aver)
i=1
答案为:
int ReadDat(void)
{
int i;
FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/***************编制函数ReadDat()*****************/
for(i=0;i<MAX;i++)
{ fscanf(fp,"%d,",&xx[i]);
疑问1:为什么对10求余啊?
if((i+1)%10==0)
fscanf(fp,"\n");
}
/*********************************************/
fclose(fp);
return 0;
}
void Compute(void)
{ int i;
for(i=0;i<MAX;i++)
{ if(xx[i]%2) odd++;
else even++;
aver+=xx[i];
计算方差的公式如下:
N 2
totfc=1/N ∑ (xx[i]-aver)
i=1
答案为:
int ReadDat(void)
{
int i;
FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/***************编制函数ReadDat()*****************/
for(i=0;i<MAX;i++)
{ fscanf(fp,"%d,",&xx[i]);
疑问1:为什么对10求余啊?
if((i+1)%10==0)
fscanf(fp,"\n");
}
/*********************************************/
fclose(fp);
return 0;
}
void Compute(void)
{ int i;
for(i=0;i<MAX;i++)
{ if(xx[i]%2) odd++;
else even++;
aver+=xx[i];
第一点是因为当i=9,19,29......时换行(/n),以免一千个数输入在一行。第二点是因为计算方差的公式如下: “N 2 totfc=1/N ∑ (xx[i]-aver) i=1 ”是错的,括号外应该有平方,“totfc+=(xx[i]-aver)*(xx[i]-aver); totfc/=MAX”才是正确的。想了半天终于搞明白了,希望对你有帮助。