1、计算机三级数据库技术-92 及答案解析(总分:100.00,做题时间:90 分钟)1.已知在文件 IN.DAT 中存有若干个(个数200)4 位正整数,函数 ReadDat()的功能是读取这些正整数并存入数组 xx 中。请编写函数 CalValue(),其功能是:(1)求出该文件中正整数的个数 totNum。(2)求这些数右移 1 位后,产生的新数中偶数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数 WriteDat(),把结果输出到文件 OUT.DAT 中。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat(
2、)的内容。 试题程序 #includestdio.h #includestdlib.h #define MAXNUM 200 int xxMAXNUM; int totNum=0; /文件 IN.DAT 正整数的个数*/ int totCnt=0; /符合条件的正整数的个数 double totPjz=0.0; /平均值 int ReadDat(void); void WriteDat(void); void CalValue(void) void main() int i; system(“CLS“); for(i=0; iMAXNUM; i+) xxi=0; if(ReadDat() pr
3、intf(“数据文件 IN.DAT 无法打开!007n“); return; CalValue(); printf(“文件 IN.DAT 中正整数的个数=%d 个n“, totNum); printf(“符合条件的正整数的个数=%d 个n“, totCnt); printf(“平均值=%.21fn“, 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); re
4、turn 0; void WriteDat(void) FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dn%dn%.21fn“, totNum, totCnt, totPjz); fclose(fp); (分数:100.00)_计算机三级数据库技术-92 答案解析(总分:100.00,做题时间:90 分钟)1.已知在文件 IN.DAT 中存有若干个(个数200)4 位正整数,函数 ReadDat()的功能是读取这些正整数并存入数组 xx 中。请编写函数 CalValue(),其功能是:(1)求出该文件中正整数的个数 totNum。(2)求这些
5、数右移 1 位后,产生的新数中偶数的个数 totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数 WriteDat(),把结果输出到文件 OUT.DAT 中。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序 #includestdio.h #includestdlib.h #define MAXNUM 200 int xxMAXNUM; int totNum=0; /文件 IN.DAT 正整数的个数*/ int totCnt=0; /符合条件的正整数的个数 double totPjz=0.0; /平均值
6、 int ReadDat(void); void WriteDat(void); void CalValue(void) void main() 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(“平均值=%.21fn“, totPjz);
7、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, “%dn%dn%.21fn“, totNum, totCnt, totPjz); fclose(fp); (分数:100.00)_正确答案:()解析:void CalVal
8、ue(void) int i; /*定义循环控制变量*/ int data; /*用于保存处理后产生的新数*/ for(i=0; i200; i+) /*逐个取数组 xx 中的数进行统计*/ if(xxi0) /*判断是否正整数*/ totNum+; /*统计正整数的个数*/ data=xxi1; /*将数右移一位*/ if(data%2=0) /*如果产生的新数是偶数*/ totCnt+; /*统计这些数的个数*/ totPjz+=xxi; /*并将满足条件的原数求和*/ totPjz/=totCnt; /*求满足条件的这些数(右移前的值)的算术平均值*/ 考点 本题考查对多个整数的右移、统计以及求平均值。考查的知识点主要包括:位移算法,逻辑表达式,求平均值的算法。 本题是数学类题。本题的解题思路是:首先利用一个 for 循环来依次从数组中取得各数,由于题目要求数组中正整数的个数,如果取得的数大于零,这时就给变量 totNum(正整数的个数)累加 1,然后把该正整数右移一位后的结果临时保存在变量 data 中,再判断产生的新数是否是偶数。如果是,就给变量totCnt(符合判断条件的正整数个数)累加 1,并把原数的值累加到变量 totPjz 中,当所有符合判断条件的数都被找出后,再对 totPjz 求平均值。