1、三级数据库技术-494 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知数据文件 in.dat 中存有 200 个四位数,并已调用读函数 readDat()把这些数存入数组 a 中,请考生编制一函数 jsVal(),其功能是:依次从数组 a 中取出一个四位数,如果该四位数小于该四位数以后的连续五个数且该数是偶数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数 cnt,并把这些四位数存入数组 b 中,而后对数组 b 进行升序排序,最后调用写函数 writeDat()把结果 cnt 以及数组 b 中符合条件的四位数输出到
2、 out.dat 文件中。 程序中已定义数组:a200,b200,已定义变量:cnt 请勿改动数据文件 in.dat 中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #define MAX 200 /定义宏变量 MAX 其值等于 200 int aMAX, bMAX, cnt=0; /其初始值为 0, 定义全局整型一维数组 aMAX, bMAX和变量 cnt void writeDat(); /writeDat()函数的说明语句 void jsVal() /*readDat()从数据文件 in.dat 中读取
3、 200 个四位数存入数组 a 中*/ void readDat() int i; FILE *fp; fp=fopen(“in.dat“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%d“, fclose(fp); void main() int i; readDat(); jsVal(); /调用 jsVal()函数, 实现题目要求的功能 printf(“满足条件的数=%dn“, cnt); for (i=0; icnt; i+) printf(“%d“, bi); printf(“n“); writeDat(); /*函数 wnteDat()把结果 cnt
4、 以及数组 b 中符合条件的四位数输出到 out.dat 文件中*/ void writeDat() FILE *fp; int i; fp=fopen(“out.dat“, “w“); fprintf(fp, “%dn“, cnt); for(i=0; icnt; i+) fprintf(fp, “%dn“, bi); fclose(fp); (分数:100.00)_三级数据库技术-494 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知数据文件 in.dat 中存有 200 个四位数,并已调用读函数 readDat()把这些数存
5、入数组 a 中,请考生编制一函数 jsVal(),其功能是:依次从数组 a 中取出一个四位数,如果该四位数小于该四位数以后的连续五个数且该数是偶数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数 cnt,并把这些四位数存入数组 b 中,而后对数组 b 进行升序排序,最后调用写函数 writeDat()把结果 cnt 以及数组 b 中符合条件的四位数输出到 out.dat 文件中。 程序中已定义数组:a200,b200,已定义变量:cnt 请勿改动数据文件 in.dat 中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#inclu
6、de stdio.h #define MAX 200 /定义宏变量 MAX 其值等于 200 int aMAX, bMAX, cnt=0; /其初始值为 0, 定义全局整型一维数组 aMAX, bMAX和变量 cnt void writeDat(); /writeDat()函数的说明语句 void jsVal() /*readDat()从数据文件 in.dat 中读取 200 个四位数存入数组 a 中*/ void readDat() int i; FILE *fp; fp=fopen(“in.dat“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%d“, fc
7、lose(fp); void main() int i; readDat(); jsVal(); /调用 jsVal()函数, 实现题目要求的功能 printf(“满足条件的数=%dn“, cnt); for (i=0; icnt; i+) printf(“%d“, bi); printf(“n“); writeDat(); /*函数 wnteDat()把结果 cnt 以及数组 b 中符合条件的四位数输出到 out.dat 文件中*/ void writeDat() FILE *fp; int i; fp=fopen(“out.dat“, “w“); fprintf(fp, “%dn“, cn
8、t); for(i=0; icnt; i+) fprintf(fp, “%dn“, bi); fclose(fp); (分数:100.00)_正确答案:()解析:int i, j, ab; for(i=0; iMAX-5; i+) if(ai%2=0) /把满足此条件的四位数 ai存入数组元素 bcnt,同时数组下标变量 cnt 加 1 /*对数组 b 进行升序排序*/ for(i=0; icnt-1; i+) for(j=i+1; jcnt; j+) if(bibj) /如果数组元素 bi大于 bj, 则两者互换 ab=bj; bj=bi; bi=ab; 解析 小于后连续 5 个数,偶数,从
9、小到大排序。 首先定义两个循环整型变量 i、j 和一个用于数据交换的整型变量 ab。 然后在 for 循环语句中,先指定循环变量 i 从 0 开始,依次递增到 MAX-5(到 MAx-5 的原因是因为从倒数第 5 个数开始,其后面的数都不满 5 个数,与题目要求不符,因此可以省略最后 5 个数),接着对每个数组元素 ai判断其是否为偶数且小于其后面连续的 5 个数,然后把满足此条件的数组元素 ai赋给数组元素 bcnt,同时数组的下标变量 cnt 加 1。 最后,用双重 for 循环语句对数组 b 中的数组元素两两比较大小,如果前一个数组元素大于后一个数组元素,则两者进行互换,实现对数组 b 进行升序或降序的排列。