1、计算机三级数据库技术-96 及答案解析(总分:100.00,做题时间:90 分钟)1.已知数据文件 IN1.DAT 和 IN2.DAT 中分别存有 100 个 2 位十进制数,并且已调用读函数 readDat(),把这两个文件中的数存入数组 a 和 b 中,请考生编写函数 jsVal(),其功能是:依次将数组 a 和 b 中的数按条件重新组成一个新数,并存入数组 c 中,再对数组 c 中的数按从小到大的顺序进行排序,最后调用写函数 writeDat(),把结果 c 输出到文件 OUT.DAT 中。 组成新数的条件:如果数组 a 和 b 中相同下标位置的数,一个是偶数,另一个是奇数,则将数组 a
2、 中的数按二进制数左移八位后再加上数组 b 对应位置上的数,把这样组成的新数依次存入数组 c 中。 例如,a:12 33 24 15 21 b:32 35 17 15 18 c:6161 5394 排序后 c5394 6161 程序中已定义数组 a100、b100和 C100。请勿改动数据文件 IN1.DAT 和 IN2.DAT 中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。 试题程序 #includestdio.h #define MAX 100 unsigned int aMAX, bMAX, cMAX; int cnt=0; /存放符
3、合条件的数的个数 void writeDat(); void jsVal() void readDat() int i; FILE*fp; fp=fopen(“IN1.DAT“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%d“, fclose(fp); fp=fopen(“IN2.DAT“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%d“, fclose(fp); void main() int i; for(i=0; iMAX; i+) ci=0; readDat(); jsVal(); for(i=0; iMAX; i+)
4、 if(ci0) printf(“%dn“, ci); writeDat(); void writeDat() FILE*fp; int i; fp=fopen(“OUT.DAT“, “w“); for(i=0; iMAX; i+) if(ci0) fprintf(fp, “%dn“, ci); fclose(fp); (分数:100.00)_计算机三级数据库技术-96 答案解析(总分:100.00,做题时间:90 分钟)1.已知数据文件 IN1.DAT 和 IN2.DAT 中分别存有 100 个 2 位十进制数,并且已调用读函数 readDat(),把这两个文件中的数存入数组 a 和 b 中
5、,请考生编写函数 jsVal(),其功能是:依次将数组 a 和 b 中的数按条件重新组成一个新数,并存入数组 c 中,再对数组 c 中的数按从小到大的顺序进行排序,最后调用写函数 writeDat(),把结果 c 输出到文件 OUT.DAT 中。 组成新数的条件:如果数组 a 和 b 中相同下标位置的数,一个是偶数,另一个是奇数,则将数组 a 中的数按二进制数左移八位后再加上数组 b 对应位置上的数,把这样组成的新数依次存入数组 c 中。 例如,a:12 33 24 15 21 b:32 35 17 15 18 c:6161 5394 排序后 c5394 6161 程序中已定义数组 a100、
6、b100和 C100。请勿改动数据文件 IN1.DAT 和 IN2.DAT 中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。 试题程序 #includestdio.h #define MAX 100 unsigned int aMAX, bMAX, cMAX; int cnt=0; /存放符合条件的数的个数 void writeDat(); void jsVal() void readDat() int i; FILE*fp; fp=fopen(“IN1.DAT“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%
7、d“, fclose(fp); fp=fopen(“IN2.DAT“, “r“); for(i=0; iMAX; i+) fscanf(fp, “%d“, fclose(fp); void main() int i; for(i=0; iMAX; i+) ci=0; readDat(); jsVal(); for(i=0; iMAX; i+) if(ci0) printf(“%dn“, ci); writeDat(); void writeDat() FILE*fp; int i; fp=fopen(“OUT.DAT“, “w“); for(i=0; iMAX; i+) if(ci0) fpr
8、intf(fp, “%dn“, ci); fclose(fp); (分数:100.00)_正确答案:()解析:void jsVal() int i, j; /*定义循环变量*/ int temp; /*用于存储排序中的中间变量*/ for(i=0; i=MAX-1; i+) /*循环查找符合条件的元素*/ if (ai%2=0) /*ai按二进制左移 8 位再加上 bi*/ cnt+; /*记录 c 中个数*/ for (i=0; iMAX-1; i+) /*将 C 中的元素按从小到大顺序排列*/ for (j=0; jMAX-i-1; j+) if (cjcj+1) temp=cj; cj=
9、cj+1; cj+1=temp; 考点 本题考查对整数的筛选及数组排序。考查的知识点主要包括:C 语言循环结构,逻辑表达式等。 此题属于 2 位数的筛选题。分析题干要求,本题要求实现 jsVal()函数的功能,归纳可以得出 2 个问题:问题 1 如何根据判断条件(数组 a 和 b 中相同下标位置的数必须符合一个是偶数,另一个是奇数)筛选出满足条件的数,同时统计其个数,问题 2 如何将这些数按从小到大的书序排列。通过问题分析,得出解此题的思路为:先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。对于问题1 通过 if 条件判断语句和逻辑表达式可以实现。问题 2 排序可以通过循环嵌套的起泡法实现。