问题 问答题

在文件IN70.DAT中有200组数据,每组有3个数,每个数均是3位数。函数readDat()的功能是读取这200组数据并存放到结构数组aa中。请编制函数jsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和,其中满足条件的个数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对结构数组bb中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列,排序后的结果仍重新存入结构数组bb中,最后调用函数writeDat()把结果bb输出到文件OUT70.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
试题程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct

int x1,x2,x3;
Data;
Data aa[200],bb[200];
void readDat();
void writeDat();
int jsSort()


void main()

int count;
readDat();
count=jsSort();/*返回满足条件的个数*/
writeDat(count);

void readDat()

FILE * in;
int i;
in=fopen("IN70.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("OUT70.DAT","w");
system("CLS");
for(i=0;i<count;i + +)

printf("% d,% d,% d 第二个数+第三个数=% d\n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x2+bb[i].x3);
fprintf(out,"% d,% 5d,% d\n",bb[i].x1,bb[i].x2,bb[i].x3);

fclose(out);

答案

参考答案:int jsSort()
{
int i,j; /*定义循环控制变量*/
int cnt=0; /*定义计数器变量*/
Data temp; /*定义数据交换时的暂存变量,这里是一个Data类型的结构体变量*/
for(i=0;i<200;i + +)
if(aa[i].x2>aa[i].x1+aa[i].x3) /*如果第二个数大于第一个数加第三个数之和*/
{
bb[cnt]=aa[i]; /*则把该组数据存入结构数组bb中*/
cnt + +; /*同时统计满足条件的数据的个数*/
}
for(i=0;i<cnt-1;i + +) /*对结构数组bb中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列*/
for(j=i+1;j<cnt;j + +)
if(bb[i].x2+bb[i].x3<bb[j].x2+bb[j].x3
{
temp=bb[i];
bb[i]=bb[j];
bb[j]=temp;
}
teturn cnt; /*返回满足条件的数据的组数*/
}

解析: 本题考查对结构体数组中元素的各个成员的操作。
首先利用一个for循环来依次取得结构体数组中的各个元素,然后按照题目要求对当前元素的各个域进行条件判断,如果条件(第二个数大于第一个数加第三个数之和)成立,则将其存放到数组bb中。
再按照“每组数据中的第二个数加第三个数之和的大小”进行从大到小的排序。

单项选择题
单项选择题 A1型题