1、三级网络技术机试-228 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在 IN.DAT 中存有若干个(个数200)四位数字的正整数,函数 ReadDat()读取这若干个正整数并存入数组 xx 中。请编制函数 CalValue(),其功能要求:1求出这文件中共有多少个正整数 tofNum;2 求这些正整数右移 1 位二进制位后,产生的新数是奇数的数的个数 totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值 cotPjz。最后 main()函数调用函数 WriteDat()把所求的结果输出到文件OUT.DAT 中。注意:
2、部分源程序存放在 PROG1.C 中。请勿改动数据文件 IN.DAT 中的任何数据,主函数 main()、读函数ReadDat1()和输出函数 WriteDat()的内容。试题程序#include #define MAXNUM 200int XXMAXNUM;int totNum=0;/*文件 INDAT 中共有多少个正整数*/int totCnt=0;/*符合条件的正整数的个数*/double totPjz=0.0;/*平均值*/int ReadDat(void);void WriteDat(void);void CalValue(void)void main()int i;for(i=0;
3、iMAXNUM;i+) XXi=0;if (ReadDat() printf(“数据文件 IN.DAT 不能打开!/007/n”);return;CalValue();printf(“文件 IN.DAT 中共有正整数=%d 个/n”,totNum);printf(“符合条件的正整数的个数=%d 个/n”,totCnt);printf(“平均值=%.2lf/n”,totpjz);WriteDat();int ReadDat(void)FILE *fp;int i=0;if(fp=fopen(“in.dat“,“r“)=NULL)return 1;while(!feof(fp)fscanf(fp,
4、“%d,“,fclose(fp);return 0;void WriteDat(void)FILE *fp;fp=fopen(out.dat“,“W“);fprintf(fP,“%d/n%d/n%.2lf/n“,totNum,totCnt,totPjz);fclose(fp);(分数:100.00)_三级网络技术机试-228 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在 IN.DAT 中存有若干个(个数200)四位数字的正整数,函数 ReadDat()读取这若干个正整数并存入数组 xx 中。请编制函数 CalValue(),其功能要
5、求:1求出这文件中共有多少个正整数 tofNum;2 求这些正整数右移 1 位二进制位后,产生的新数是奇数的数的个数 totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值 cotPjz。最后 main()函数调用函数 WriteDat()把所求的结果输出到文件OUT.DAT 中。注意:部分源程序存放在 PROG1.C 中。请勿改动数据文件 IN.DAT 中的任何数据,主函数 main()、读函数ReadDat1()和输出函数 WriteDat()的内容。试题程序#include #define MAXNUM 200int XXMAXNUM;int totNum=0;/*文件 IN
6、DAT 中共有多少个正整数*/int totCnt=0;/*符合条件的正整数的个数*/double totPjz=0.0;/*平均值*/int ReadDat(void);void WriteDat(void);void CalValue(void)void main()int i;for(i=0;iMAXNUM;i+) XXi=0;if (ReadDat() printf(“数据文件 IN.DAT 不能打开!/007/n”);return;CalValue();printf(“文件 IN.DAT 中共有正整数=%d 个/n”,totNum);printf(“符合条件的正整数的个数=%d 个/
7、n”,totCnt);printf(“平均值=%.2lf/n”,totpjz);WriteDat();int ReadDat(void)FILE *fp;int i=0;if(fp=fopen(“in.dat“,“r“)=NULL)return 1;while(!feof(fp)fscanf(fp,“%d,“,fclose(fp);return 0;void WriteDat(void)FILE *fp;fp=fopen(out.dat“,“W“);fprintf(fP,“%d/n%d/n%.2lf/n“,totNum,totCnt,totPjz);fclose(fp);(分数:100.00)_正确答案:(void CalValue(void)int i; /*定义变量*/for(i=0;iMAXNUM;i+) /*统计个数*/if(xxi0) totNum+;if(xxi1)%2=1) totCnt+;totpjz+=xxi;totPjz/=totCnt; /*求平均值*/)解析:解析 本题要求统计已知正整数的个数,并求按判断条件进行筛选后的平均值。依据题意,应先依次取得每个已知正整数,统计正整数的个数并根据题目中给出的判断条件(右移一位二进制位后,产生的新数是奇数,即(xxi1)%2=1)筛选后统计求和,最后根据符合条件的数的个数与总和求平均值。