问答题 在in.dat文件中有200组数据,每组有3个数,每个数均是三位数。函数ReadDat()读取这200组数据并存放到结构数组aa中。请编写函数jsSort(),其功能是:要求在200组数据中找出条件为每组中的第一个数大于第二个数加第三个数的和,其中满足条件的组数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第一个数加第三个之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中,最后调用函数WriteDat(),把结果bb输出到out.dat文件中。 注意:部分源程序已经给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h> typedef struct { int x1,x2,x3; } data; data aa[200],bb[200]; int jsSort() { void ReadDat() { FILE *in; int i; in=fopen("in.dat","r"); for(i=0;i<200,i++) fscanf(in,"%d %d %d",&aa[i].x1,&aa[i].x2,&aa[i].x3); fclose(in); void WriteDat(int count) { FILE *out; int i; out=fopen("out.dat","w"); for(i=0;i<count;i++) { printf("%d,%d,%d第一个数+第三个数=%d/n", bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3); fprintf(out,"%d %d %d/n",bb[i].x1,bb[i].x2,bb[i].x3); } fclose(out); } void main() { int count; ReadDat(); count=jsSort(); /*返回满足条件的个数*/ WriteDat(count); }
【正确答案】int jsSort() { int i,j,count=0; data val; for (i=0;i<200;i++) /*循环以遍历数组aa的200组数*/ if (aa[i].x1>aa[i].x2+aa[i].x3) { /*若第一个数大于第二个数加第三个数之和*/ bb[count]=aa[i]; /*将这组数存入数组bb*/ count++; /*计数值count增1*/ } /*对数组bb的前count个元素进行选择排序*/ for (i=0;i<count-1;i++) for (j=i+1;j<count;j++) if (bb[i].x1+bb[i].x3>bb[j].x1+bb[j].x3) { /*以第一个数加第三个之和的大小进行升序排列*/ val=bb[i]; bb[i]=bb[j]; bb[j]=val; } return count; }
【答案解析】