1、三级信息管理技术机试-188 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN11.DAT中存有若干个(个数200)4 位数字的正整数,函数 ReadDat()的功能是读取这若干个正整数并存人数组 xx中。请编制函数 CalValue(),其功能要求:(1)求出该文件中共有多少个正整数totNum;(2)求这些数右移 1位后,产生的新数是偶数的数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值 totPjz,最后调用函数 WriteDat()把所求的结果输出到文件 OUTII.DAT中。注意:部分源程序
2、已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WfiteDat()的内容。试题程序#includestdio.h#includestdlib.h#define MAXNUM 200int xxMAXNUM;int totNum=0;/*文件 IN11.DAT中共有多少个正整数*/int totCnt=0;/*符合条件的正整数的个数*/double totPjz=0.0;/*平均值*/int ReadDat(void);void WriteDat(void);void CalValue(void)voidmain()int i;system(“CLS“);for(i=
3、0;iMAXNUM;i+)xxi=0;if(ReadDat()printf(“数据文件 IN11.DAT不能打开!/007/n“);return;CalValue();printf(“文件 IN11.DAT中共有正整数=%d 个/n“,totNum);printf(“符合条件的正整数的个数=%d 个/n“,totCnt);printf(“平均值=% .21f/n“,totpjz);WriteDat();int ReadDat(void)FILE*fp;int i=0;if(fp=fopen(“IN11.DAT“,“r“)=NULL)return 1;while(! feof(fp)fscanf
4、(fp,“% d,“,fclose(fp);return 0;void WriteDat(void)FILE*fp:fp=fopen(“OUT11.DAT“,“w“);fprintf(fP,“% d/n% d/n% .21f/n“,totNum,totCnt,totPjz);fclose(fP);(分数:100.00)_三级信息管理技术机试-188 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN11.DAT中存有若干个(个数200)4 位数字的正整数,函数 ReadDat()的功能是读取这若干个正整数并存人数组 xx中。请编
5、制函数 CalValue(),其功能要求:(1)求出该文件中共有多少个正整数totNum;(2)求这些数右移 1位后,产生的新数是偶数的数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值 totPjz,最后调用函数 WriteDat()把所求的结果输出到文件 OUTII.DAT中。注意:部分源程序已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WfiteDat()的内容。试题程序#includestdio.h#includestdlib.h#define MAXNUM 200int xxMAXNUM;int totNum=0;/*文件 IN11.
6、DAT中共有多少个正整数*/int totCnt=0;/*符合条件的正整数的个数*/double totPjz=0.0;/*平均值*/int ReadDat(void);void WriteDat(void);void CalValue(void)voidmain()int i;system(“CLS“);for(i=0;iMAXNUM;i+)xxi=0;if(ReadDat()printf(“数据文件 IN11.DAT不能打开!/007/n“);return;CalValue();printf(“文件 IN11.DAT中共有正整数=%d 个/n“,totNum);printf(“符合条件的正
7、整数的个数=%d 个/n“,totCnt);printf(“平均值=% .21f/n“,totpjz);WriteDat();int ReadDat(void)FILE*fp;int i=0;if(fp=fopen(“IN11.DAT“,“r“)=NULL)return 1;while(! feof(fp)fscanf(fp,“% d,“,fclose(fp);return 0;void WriteDat(void)FILE*fp:fp=fopen(“OUT11.DAT“,“w“);fprintf(fP,“% d/n% d/n% .21f/n“,totNum,totCnt,totPjz);fc
8、lose(fP);(分数:100.00)_正确答案:(void CalValue(void)inti; /*定义循环控制变量*/int data; /*用于保存处理后产生的新数*/for(i=0;i200;i+) /*逐个取数组 xx中的数进行统计*/if(xxio) /*判断是否为正整数*/totNum+; /*统计正整数的个数*/data=xxi1; /*将数右移一位*/if(data%2=0) /*如果产生的新数是偶数*/totcnt+; /*统计这些数的个数*/totPjz+=xxi; /*并将满足条件的原数求和*/totPjz/=totCnt; /*求满足条件的这些数(右移前的值)的算术平均值*/)解析:解析 本题的解题思路是:首先利用一个 for循环来依次从数组中取得各数,由于题目要求数组中正整数的个数,大于零的整数便是正整数,这时就给变量 totNum(正整数的个数)累加 1,然后把该正整数右移一位后的结果临时保存在变量 data中,再判断产生的新数是否为偶数。如果是,就给变量totCnt(符合判断条件的正整数个数)累加 1,并把原数的值累加到变量 totPjz中,当所有符合判断条件的数都被找出后,再对 totPjz求平均值。