1、三级数据库技术-513 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知在文件 in.dat中存有 200组数据,每组有 3个数,每个数均是三位数。函数 readDat()是读取这200组数据存放到结构数组 aa中。请编制函数 jsSort(),其函数的功能是:要求在 200组数据中找出第二个数大于第一个数加第三个数之和的数,其中满足条件的个数作为函数 jsSort()的返回值,同时把满足条件的数据存入结构数组 bb中,再对 bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列(第二个数加第三个数的和均不相等),排序后
2、的结果仍重新存入结构数组 bb中,最后调用函数writeDat()把结果 bb输出到 out.dat文件中。 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #include string.h typedef struct int x1, x2, x3; Data; /定义结构体类型 Data Data aa200 , bb200; /定义结构体 Data型一维数组 aa200, bb200 void readDat(); void writeDat(int count); in
3、t 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“, fclose (in); /*把结果 bb输出到 out.dat文件中* / void writeDat (int count) FILE *out; int i; out=fopen(“o
4、ut.dat“, “w“); for(i=0; icount; i+) printf (“%d, %d, %d第二个数+第三个数=%dn“, bbi.x1, bbi.x2, bbi.x3, bbi .x2+bbi .x3); fprintf(out, “%d,%d,%dn“, bbi.x1, bbi .x2, bbi .x3); fclose(out); (分数:100.00)_三级数据库技术-513 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知在文件 in.dat中存有 200组数据,每组有 3个数,每个数均是三位数。函数 r
5、eadDat()是读取这200组数据存放到结构数组 aa中。请编制函数 jsSort(),其函数的功能是:要求在 200组数据中找出第二个数大于第一个数加第三个数之和的数,其中满足条件的个数作为函数 jsSort()的返回值,同时把满足条件的数据存入结构数组 bb中,再对 bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列(第二个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组 bb中,最后调用函数writeDat()把结果 bb输出到 out.dat文件中。 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writ
6、eDat()的内容。#include stdio.h #include string.h typedef struct int x1, x2, x3; Data; /定义结构体类型 Data Data aa200 , bb200; /定义结构体 Data型一维数组 aa200, bb200 void readDat(); void writeDat(int count); int jsSort() void main() int count; readDat (); count=jsSort(); writeDat (count); /*读取这 200组数据存放到结构数组 aa中*/ void
7、 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 (“%d, %d, %d第二个数+第三个数=%dn“, bbi.x1, bbi.x2, bbi.x3, bbi .x2+bbi .x3
8、); fprintf(out, “%d,%d,%dn“, bbi.x1, bbi .x2, bbi .x3); fclose(out); (分数:100.00)_正确答案:()解析:int i,j, count=0; Data cc; /*在 200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和的数据,满足条件的数据的个数为变量 count的值,同时把满足条件的数据存入结构数组 bb中*/ for(i=0; i200; i+) /*如果 aai的第二个数大于第一个数加第三个数之和,则把 aai复制到 bbcount中,同时数组下标变量 count加 1*/ if(aai.x2
9、(acti.x1+acti.x3) memcpy(Data*) /*对 bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列*/ for(i=0;i(count-1);i+) for(j=i+1; jcounL; j+) /*如果 bbi的第二个数与第三个数之和小于 bbj的第二个数与第三个数之和,则 bbi与 bbj互换*/ if(bbi.x2+bbi.x3)(bbj.x2+bbj.x3) memcpy(Data*) memcpy(Data*) memcpy(Data*) return Count; /返回满足条件的数据的个数 解析 第 2个数大于第 1个数加第 3个数,存入数组
10、,按第 2个加第 3个数之和降序排序。 首先定义两个循环变量 i、j;一个计数变量 count;一个用于中间转换数据的结构体变量 cc。 建立一个 for循环,指定第一个 for循环的循环变量 i从 0开始,到 200时结束,每循环一次,变量 i的值加 1。在循环体中依次判断每行数据中,如果 aai的第二个数大于第一个数加第三个数之和,则把aai复制到 bbcount中,同时数组下标变量 count加 1。 将所有满足条件的记录筛选保存到数组 bb后,再通过两个 for循环对数组 bb中记录进行排序。第一个 for循环的循环变量 i的初值为 0,当等于数组计数变量 count的值减 1时停止循环,每循环一次,i的值加 1;第二个 for循环的循环变量 i的初值等于 i+1,当等于数组计数变量 count的值时停止循环,每循环一次,j 的值加 1;每次进行比较时,如果第 i行的第二个数加第三个之和小于其后面第 j行的第二个数加第三个之和,将执行 if条件语句后面花括号中的命令,花括号中 3条命令的功能就是根据题目要求按每行数据中第二个数加第三个之和从大到小排序。 最后将计数函数 count返回。