1、三级网络技术机试-239 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制函数 ReadDat()实现从文件 IN.DAT 中读取 1000 个十进制整数到数组 XX 中;请编制函数Compute(),分别计算出 XX 中奇数的个数 odd,偶数的个数 even,平均值 aver 以及方差 totfc 的值,最后调用函数 WriteDat()把结果输出到 OUT.DAT 文件中。计算方差的公式如下:* 原始数据文件存放的格式是:每行存放 10 个数,并用逗号隔开(每个数均大于 0 且小于等于 2000)。注意:部分源程序已给出如下。请
2、勿改动主函数 main()和输出数据函数 WriteDat()的内容。试题程序:#includestdio.h#includestdlib.h#includestring.h#define MAX 1000int xxMAX,odd=0,even=0;double aver=0.0,totfc=0.0;void WriteDat(void);int ReadDat(void)int i;FILE*fp;if(fp=fopen(“IN.DAT“,“r“)=NULL)return 1;/*编制函数ReadDat()*/*/fclose(fp);return 0;void Compute(void)
3、int i;for(i=0;iMAX;i+)if(xxi%2)测试结点 i 是否是奇数odd+;累加变量 odd 记录奇数数的个数else如果结点 i 不是奇数even+;累加变量 even 记录偶数数的个数aver+=xxi;将 xxi累加存入 aver 中aver/=MAX;计算平均数for(i=0;iMAX;i+)totfc 十=(xxi=aver)*(xxi=aver);totfc/=MAX;void main()int i;for(i=0;iMAX;i+)xxi=0;if(ReadDat()printf(“数据文件 IN.DAT 不能打开!/007/n“);return;Comput
4、e();printf(“ODD=%d/nOVEN=%d/nAVER=%f/nTOTFC=%f/n“,odd,even,aver,totfc);WriteDat();void WriteDat(void)FILE*fp;fp=fopen(“OUT.DAT“,“w“);fprintf(fp,“%d/n%d/n%f/n%f/n“,odd,even,aver,totfc);fclose(fp);(分数:100.00)_三级网络技术机试-239 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制函数 ReadDat()实现从文件 IN.DAT 中读
5、取 1000 个十进制整数到数组 XX 中;请编制函数Compute(),分别计算出 XX 中奇数的个数 odd,偶数的个数 even,平均值 aver 以及方差 totfc 的值,最后调用函数 WriteDat()把结果输出到 OUT.DAT 文件中。计算方差的公式如下:* 原始数据文件存放的格式是:每行存放 10 个数,并用逗号隔开(每个数均大于 0 且小于等于 2000)。注意:部分源程序已给出如下。请勿改动主函数 main()和输出数据函数 WriteDat()的内容。试题程序:#includestdio.h#includestdlib.h#includestring.h#define
6、 MAX 1000int xxMAX,odd=0,even=0;double aver=0.0,totfc=0.0;void WriteDat(void);int ReadDat(void)int i;FILE*fp;if(fp=fopen(“IN.DAT“,“r“)=NULL)return 1;/*编制函数ReadDat()*/*/fclose(fp);return 0;void Compute(void)int i;for(i=0;iMAX;i+)if(xxi%2)测试结点 i 是否是奇数odd+;累加变量 odd 记录奇数数的个数else如果结点 i 不是奇数even+;累加变量 eve
7、n 记录偶数数的个数aver+=xxi;将 xxi累加存入 aver 中aver/=MAX;计算平均数for(i=0;iMAX;i+)totfc 十=(xxi=aver)*(xxi=aver);totfc/=MAX;void main()int i;for(i=0;iMAX;i+)xxi=0;if(ReadDat()printf(“数据文件 IN.DAT 不能打开!/007/n“);return;Compute();printf(“ODD=%d/nOVEN=%d/nAVER=%f/nTOTFC=%f/n“,odd,even,aver,totfc);WriteDat();void WriteDa
8、t(void)FILE*fp;fp=fopen(“OUT.DAT“,“w“);fprintf(fp,“%d/n%d/n%f/n%f/n“,odd,even,aver,totfc);fclose(fp);(分数:100.00)_正确答案:(int i;for(i=0;iMAX;i+)if(xxi%2)测试结点 i 是否是奇数odd+;累加变量 odd 记录奇数数的个数else如果结点 i 不是奇数even+;累加变量 even 记录偶数数的个数aver+=xxi;将 xxi累加存入 aver 中aver/=MAX;计算平均数for(i=0;iMAX;i+)totfc+=(xxi=aver)*(x
9、xi-aver);totfc/=MAX;)解析:本题考查文件的操作、奇偶判断和数学公式的计算。函数 ReadDat 的作用是将从文件中读取的数据存入数组 XX 中,因为数据存放入文件的格式是每个数据被逗号隔开,所以 fscanf(fp,“%d,“,xxi)语句中字符串“%d,“中要加入逗号。函数 Compute 的作用是计算方差,思路是首先顺序读取数组 XX 中的结点,若是奇数(xxi%2,xxi为奇数余数为 1 条件表达式为真)累加存入 avel,个数存入 odd,若不是奇数(即为偶数)累加结果存入 ave2,个数存入 even。然后计算奇数和偶数的平均数,利用循环结构依次读取数组 XX,计算方差 totfc。