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