本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第9题:
已知在文件in9.dat中存在若干个(<200)四位数字的正整数,函数readDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出这个文件中共有多少个正整数totNum;(2)求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到文件out9.dat中。
部分程序已经给出。
请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totNum=0;
int totCnt=0;
double totPjz=0.0;
int readDat(void);
void writeDat(void);
void CalValue(void)
{
}
void main()
{
int i;
clrscr();
for(i=0;iif(readDat())
{
printf("数据文件in9.dat不能打开!\007\n");
return;
}
CalValue();
printf("文件in9.dat中共有正整数=%d个
【答案】
void Compute(void)
{
int i,yy[MAX];
for(i=0;i<1000;i++)
if(xx[i]%2)
{ odd++;
ave1+=xx[i];
}
else
{
even++;
ave2+=xx[i];
yy[even-1]=xx[i];
}
ave1/=odd;
ave2/=even;
for(i=0;i<even;i++)
totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
【解析】
考点:(1)在给定的数据范围内,统计偶数和奇数的平均值;
(2)求方差。
本题的解题思路是:逐个判断数组xx中的元素的奇偶性,并分别统计出个数且累加到不同的变量中,从而求出平均值。判断奇偶性可以通过判断xx[i]%2的值来实现,若为1则是奇数,若为0则为偶数。统计个数可以通过设置一个记录变量,每当条件成立时变量值加1来实现。方差的公式已经给出只需转换相应的C语言表达式即可。
程序的流程是:首先调用ReadDat()函数将数据读入xx数据中,然后通过Compute()函数对数据进行处理后,由WriteDat()函数将数据写回文件中去,本题要求写出ReadDat()函数,考生可以不把此函数作为重点,在三级的上机考试当中,大多数的程序流程是:先从系统中读取一个文件,并存放在指定一个位置,然后要求考生编写程序处理这些数据,由于我们不知道系统中文件的内容和格式,故多数情况下不要求考生编写。对此感兴趣的考生可以分析一下ReadDat()函数,其中feof()函数的功能是判断文件指示器是否已达到了文件的结尾。
在Compute()函数中,首先进入一个for循环(i=1000结束),其内嵌if语句的功能是判断a[i]的奇偶性,如果xx数组中的元素不能够被2整除,即为奇数时,odd加1,且把xx[i]累加到avel中,如果数组中的元素能够被2整除,即为偶数时,even加1,且把xx[i]累加到ave2中,并把xx[i]顺序存入数组yy中,然后通过“/=”将得出奇数的平均值avel和偶数的平均值ave2。最后一个for循环的功能是求方差totfc,关于求方差的公式在题目中已经给出,这里只需转换成相应的C语言表达式而已,函数结束。