1、三级数据库技术-514 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.在数据文件 in.dat中有 200组数据,每组有 3个数,每个数均是三位数。函数 readDat()是读取这 200组数据存放到结构数组 aa中。请编制函数 isSort(),其函数的功能是:要求在 200组数据中找出第一个数大于第二个数与第三个数之和的数,其中满足条件的个数作为函数 jsSort()的返回值,同时把满足条件的数据存入结构数组 bb中,再对 bb中的数据按照每组数据的第一个数与第三个数之和的大小进行升序排列(第一个数与第三个数的和均不相等),排序
2、后的结果仍重新存入结构数组 bb中,最后调用函数writeDat()把结果 bb输出到 out.dat文件中。 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #include string.h void readDat(); void writeDat(int count); typedef struct int x1, x2, x3; Data; Data aa200, bb200; int jsSort () void main() int count; readDat (
3、); count=jsSort(); writeDat (count); / *读取这 200组数据存放到结构数组 aa中“/ void readDat() FILE *in; int i; in=fopen(“in.dat“, “r“); for(i=0; i200; i+) fscanf(in, “%d,%d,%d“, fclose (in); /*把结果 bb输出到 out.dat文件中*/ void writeDat(int count) FILE *out; int i; out=fopen(“out.dat“, “w“); for(i=0; icount; i+) printf(“
4、%d,%d,%d第一个数+第三个数=%dn“, bbi.x1, bbi.x2, bbi.x3, bbi.x1+bbi.x3); fprintf(out, “%d,%d,%dn“, bbi.x1, bbi .x2, bbi.x3); fclose(out); (分数:100.00)_三级数据库技术-514 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.在数据文件 in.dat中有 200组数据,每组有 3个数,每个数均是三位数。函数 readDat()是读取这 200组数据存放到结构数组 aa中。请编制函数 isSort(),其函数的功
5、能是:要求在 200组数据中找出第一个数大于第二个数与第三个数之和的数,其中满足条件的个数作为函数 jsSort()的返回值,同时把满足条件的数据存入结构数组 bb中,再对 bb中的数据按照每组数据的第一个数与第三个数之和的大小进行升序排列(第一个数与第三个数的和均不相等),排序后的结果仍重新存入结构数组 bb中,最后调用函数writeDat()把结果 bb输出到 out.dat文件中。 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #include string.h void
6、 readDat(); void writeDat(int count); typedef struct int x1, x2, x3; Data; Data aa200, bb200; int jsSort () void main() int count; readDat (); count=jsSort(); writeDat (count); / *读取这 200组数据存放到结构数组 aa中“/ void readDat() FILE *in; int i; in=fopen(“in.dat“, “r“); for(i=0; i200; i+) fscanf(in, “%d,%d,%d
7、“, fclose (in); /*把结果 bb输出到 out.dat文件中*/ void writeDat(int count) FILE *out; int i; out=fopen(“out.dat“, “w“); for(i=0; icount; i+) printf(“%d,%d,%d第一个数+第三个数=%dn“, bbi.x1, bbi.x2, bbi.x3, bbi.x1+bbi.x3); fprintf(out, “%d,%d,%dn“, bbi.x1, bbi .x2, bbi.x3); fclose(out); (分数:100.00)_正确答案:()解析:int i,j,c
8、ount=0; Data cc; for(i=0; i200; i+) /*如果 aai的第一个数大于第二个数加第三个数之和,则把 aai复制到 bbcount中,同时数组下标变量 count;加 1*/ if(aai.x1 (aai.x2+aai.x3) memcpy(Data*) /*对 bb中的数据按照每组数据的第一个数与第三个数之和的大小进行升序排列*/ for(i=0; i(count-1); i+) for(j=2+1; jcount;j+) /*如果 bbi的第一个数与第三个数之和大于 bbj的第一个数与第三个数之和,则 bbi与 bbj互换*/ if(bbi.x1+bbi.x3)(bbj.x1+bbj.x3) memcpy(Data*) memcpy(Data*) memcpy(Data*) return count; /返回满足条件的数据的个数 解析 第 1个数大于第 2个数加第 3个数,存入数组,按第 1个加第 3个数之和升序排序。 通过审题可以发现主要有两个不同点:筛选满足条件的记录不同,参考答案的第 5行,修改 if条件语句的设置即可;对满足条件的筛选结果进行排序的条件不同,参考答案的 11行,修改 if条件语句的设置即可。