1、计算机三级数据库技术-84 及答案解析(总分:100.00,做题时间:90 分钟)1.已知数据文件 IN.DAT 中存有 300 个 4 位数,并已调用函数 readDat()把这些数存入数组 a 中,请编写函数 jsValue(),其功能是:求出千位上的数加百位上的数等于十位上的数加个位上的数的个数 cnt,再求出所有满足此条件的 4 位数的平均值 pjz1,以及所有不满足此条件的 4 位数的平均值 pjz2,最后调用函数 writeDat()把结果 cnt、pjz1 和 pjz2 输出到 OUT.DAT 文件。 例如,7153,7+1=5+3,则该数满足条件,计算平均值 pjz1,且个数
2、cnt=cnt+1。 8129,8+12+9,则该数不满足条件,计算平均值 pjz2。 程序中已定义数组 a300、b300,已定义变量 cnt、pjz1 和 pjz2。请勿改动主函数 main()、读函数readDat()和写函数 writeDat()的内容。 试题程序 #includestdio.h int a300, cnt=0; double pjz1=0.0, pjz2=0.0; void readDat(); void writeDat(); void jsValue() void main() readDat(); jsValue(); writeDat(); printf(“c
3、nt=%dn 满足条件的数的平均值 pjz1 =%7.21fn 不满足条件的数的平均值 pjz2 =%7.21fn“, cnt, pjz1, pjz2); void readDat() FILE*fp; int i; fp=fopen(“IN.DAT“, “r“); for(i=0; i300; i+) fscanf(fp, “%d,“, fclose(fp); void writeDat() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dn%7.21fn%7.21fn“, cnt, pjz1, pjz2); fclose(fp); (分数
4、:100.00)_计算机三级数据库技术-84 答案解析(总分:100.00,做题时间:90 分钟)1.已知数据文件 IN.DAT 中存有 300 个 4 位数,并已调用函数 readDat()把这些数存入数组 a 中,请编写函数 jsValue(),其功能是:求出千位上的数加百位上的数等于十位上的数加个位上的数的个数 cnt,再求出所有满足此条件的 4 位数的平均值 pjz1,以及所有不满足此条件的 4 位数的平均值 pjz2,最后调用函数 writeDat()把结果 cnt、pjz1 和 pjz2 输出到 OUT.DAT 文件。 例如,7153,7+1=5+3,则该数满足条件,计算平均值 p
5、jz1,且个数 cnt=cnt+1。 8129,8+12+9,则该数不满足条件,计算平均值 pjz2。 程序中已定义数组 a300、b300,已定义变量 cnt、pjz1 和 pjz2。请勿改动主函数 main()、读函数readDat()和写函数 writeDat()的内容。 试题程序 #includestdio.h int a300, cnt=0; double pjz1=0.0, pjz2=0.0; void readDat(); void writeDat(); void jsValue() void main() readDat(); jsValue(); writeDat(); p
6、rintf(“cnt=%dn 满足条件的数的平均值 pjz1 =%7.21fn 不满足条件的数的平均值 pjz2 =%7.21fn“, cnt, pjz1, pjz2); void readDat() FILE*fp; int i; fp=fopen(“IN.DAT“, “r“); for(i=0; i300; i+) fscanf(fp, “%d,“, fclose(fp); void writeDat() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dn%7.21fn%7.21fn“, cnt, pjz1, pjz2); fclose(
7、fp); (分数:100.00)_正确答案:()解析:int i, n=0; /*定义循环变量和计数器变量*/ int a1, a2, a3, a4; /*定义变量保存 4 位数的每位数字*/ for(i=0; i300; i+) /*逐个取每一个 4 位数*/ a4=ai/1000; /*求 4 位数的千位数字*/ a3=ai%1000/100; /*求 4 位数的百位数字*/ a2=ai%100/10; /*求 4 位数的十位数字*/ a1=ai%10; /*求 4 位数的个位数字*/ if(a4+a3=a2+a1) /*如果千位数加百位数等于十位数加个位数*/ cnt+; /*统计满足条
8、件的数的个数*/ pjz1+=ai; /*将满足条件的数求和*/ else n+; /*否则统计不满足条件的数的个数*/ pjz2+=ai; /*将不满足条件的数求和*/ pjz1/=cnt; /*求满足条件的数的平均值*/ pjz2/=n; /*求不满足条件的数的平均值*/ 考点 本题考查对多个整数的筛选以及求平均值。考查的知识点主要包括:多位整数的分解算法,逻辑表达式,平均值的计算方法。 此题属于 4 位数的筛选题型,并且涉及统计及平均值问题。解题时,需主要解决 3 个问题:问题 1 如何取得 4 位数的各个数位数字;问题 2 如何通过判断条件(本题为千位数上的数加百位数上的数等于十位数上的数加个位数上的数)对目标进行筛选,再分别统计出满足和不满足条件的数的和以及数目;问题 3 分别求出两类数的平均值。 本题与上题解题思想相同,不同之处在于问题 2 的判断条件改为:千位数上的数加百位数上的数等于十位数上的数加个位数上的数(a4+a3=a2+a1)。