1、国家三级(数据库技术)机试模拟试卷 30及答案与解析 一、程序设计题 1 在文件 IN30.DAT中有 200组数据,每组有 3个数,每个数均是 3位数。函数readDat()是读取这 200组数据存放到结构数组 aa中。请编制函数 jsSort(),其函数的功能是:要求在 200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和,其中满足条件的个数作为函数 jsSort()的返回值,同时把满足条件的数据存入结构数组 bb中,再对结构数组 bb中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列,排序 后的结果仍重新存入结构数组 bb中,最后调用函数 writeDat(
2、)把结果 bb输出到文件 OUT30.DAT中。 注意:部分源程序已给出。 请勿改动主函数 main()、读函数 readDat()和写函数 writeDat()的内容。 试题程序: #include stdio.h #include string.h #include conio.h typedef struct int x1, x2, x3; Data; Data aa200, bb200; int jsSort() main ( ) int count; readDat(); count = jsSort (); /* 返回满足条件的个数 */ writeDat(count); read
3、Dat() FILE *in; int i; in = fopen(“IN30.DAT“, “r“); for(i=0; i 200; i+) fscanf(in, “%d %d %d“, fclose(in); writeDat(int count) FILE *out; int i; out= fopen(“OUT30.DAT“, “w“); clrscr(); for(i=0; i count; i+) printf(“%d, %d, %d 第二个数 +第三个数 =%dn“, bbi.x1, bbi.x2, bbi.x3, bbi.x2+bbi, x3); fprintf(out, “%
4、d, %5d, %dn“, bbi.x1, bbi.x2, bbi.x3); fclose(out); 国家三级(数据库技术)机试模拟试卷 30答案与解析 一、程序设计题 1 【正确答案】 int jsSort() int i, cnt=0, j; Data ch; for(i=0; i 200; i+) if(aai.x2aai.x1+aai.x3) /*如果第二个数大于第一个数加第三个数之和 */ bbcnt=aai; /*则把该组数据存入结构数组 bb中 */ cnt+; /*统计满足条件的数据的组数 */ for(i=0; i cnt-1; i+) /*对结构数组 bb中的数据按照每组
5、数据的第二个数 */ for(j=i+1; j cnt; j+) /*加第三个数之和的大小进行降序排列 */ if(bbi.x2+bbi.x3 bbj.x2+bbj.x3) ch=bbi; bbi=bbj; bbj=ch; return cnt; /*返回满足条件的个数 */ 【试题解析】 本题考查对结构体数组中的元素的各个域的操作。首先利用一个for循环来依次取得结构体数组中的各个元素,之后按照题目要 求对当前的元素的各个域进行条件判断,由语句 “if(aai.x2aai.x1+aai.x3)”来实现。如果该条件成立,则把被判断元素存放到数组 bb中去,当符合条件的所有元素被找完后,按照 “每组数据中的第二个数加第三个数之和的大小 ”进行从大到小的排序。解答本题的关键是要弄清被处理对象是结构体变量中的某个域,而不是结构体变量本身。