1、计算机三级数据库技术-116 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN.DAT中存有若干个(个数200)4 位正整数,函数 ReadDat()的功能是读取这若干个正整数并存入数组 xx中。请编写函数 CalValue(),其功能是:(1)求出这个文件中共有多少个正整数totNum。(2)求这些数右移一位后,产生的新数是奇数的数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值 totPjz,最后调用函数 WriteDat(),把所有结果输出到文件 OUT.DAT中。 请勿改动主函数 main()、
2、读函数 ReadDat()和写函数 WfiteDat()的内容。 试题程序 #includestdio.h #includestdlib.h #define NAXNUN 200 int xxMAXNUM; int totNum=0; 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(“数据文件 IN.
3、DAT无法打开! 007n“); return; CalValue(); printf(“文件 IN.DAT中共有正整数=%d 个n“,totNum); printf(“符合条件的正整数的个数=%d 个 n“,totCnt); printf(“平均值=%.2lfn“,totPjz); WrteDat(); int ReadDat(void) FILE*fp; int i=0; if(fp=fopen(“IN.DAT“,“r“)=NULL) return 1; while(! feof(fp) fscanf(fp,“%(i“, fclose(fp); return 0; void WriteDa
4、t(void) FILE*fp; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,“%dn%dn%.2lfn“,tot- Num,totCnt,totPjz); fclose(fP); (分数:100.00)_计算机三级数据库技术-116 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN.DAT中存有若干个(个数200)4 位正整数,函数 ReadDat()的功能是读取这若干个正整数并存入数组 xx中。请编写函数 CalValue(),其功能是:(1)求出这个文件中共有多少个正整数totNum。(2)求
5、这些数右移一位后,产生的新数是奇数的数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值 totPjz,最后调用函数 WriteDat(),把所有结果输出到文件 OUT.DAT中。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WfiteDat()的内容。 试题程序 #includestdio.h #includestdlib.h #define NAXNUN 200 int xxMAXNUM; int totNum=0; int totCnt=0; double totPjz=0.0; int ReadDat(void); void WriteDat(
6、void); void CalValue(void) voidmain() int i; system(“CLS“); for(i=0;iMAXNUM;i+) xxi=0; if(ReadDat() printf(“数据文件 IN.DAT无法打开! 007n“); return; CalValue(); printf(“文件 IN.DAT中共有正整数=%d 个n“,totNum); printf(“符合条件的正整数的个数=%d 个 n“,totCnt); printf(“平均值=%.2lfn“,totPjz); WrteDat(); int ReadDat(void) FILE*fp; int
7、 i=0; if(fp=fopen(“IN.DAT“,“r“)=NULL) return 1; while(! feof(fp) fscanf(fp,“%(i“, fclose(fp); return 0; void WriteDat(void) FILE*fp; fp=fopen(“OUT.DAT“,“w“); fprintf(fp,“%dn%dn%.2lfn“,tot- Num,totCnt,totPjz); fclose(fP); (分数:100.00)_正确答案:()解析:void CalValue(void) int i; /*定义循环控制变量*/ int data; /*用于保存处
8、理后产生的新数*/ for(i=0;i200;i+) /*逐个取数组 xx中的数进行统计*/ if(xxi0) /*判断是否正整数*/ totNum+; /*统计正整数的个数*/ data=xxi1; /*将数右移一位*/ if(data%2=1) /*如果产生的新数是奇数*/ totCnt+; totPjz+=xxi; /*统计这些数的个数,并将满足条件的原数求和*/ totPjz/=totCnt; /*求满足条件的这些数(右移前的值)的算术平均值*/ 考点 本题考查对数的筛选。考查的知识点主要包括:if 条件判断结构,逻辑表达式,位运算,平均值计算方法。 此题属于数学类问题。分析题干,本题存在 2个关键点:关键点 1如何通过条件“将数右移一位后产生的新数是奇数“实现对数的筛选;关键点 2如何计算其平均值。 本题的解题思路为:使用一个循环控制对所有数遍历访问,统计其中正整数的个数,再通过 if判断结构和逻辑表达式实现对数的筛选判断,累加出所有满足条件的数的总和,最后根据其求出算术平均值。