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