问答题
在文件in75.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDat()是读取这200组数存放到结构数组aa中。请编制函数JsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第一个数大于第二个数加第三个数之和,其中满足条件的个数作为函数JsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数按照每组数据的第一个数加第三个数之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中。最后调用函数writeDat()把结果bb输出到文件out75.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 main()
int count;
readDat();
count=jsSort();
writeDat(count);
readDat()
FILE *in;
int i;
in=fopen("in75.dat","r");
for(i=0;i<200;i++)
fscanf(in,"%d %d %d",&aa[i].xl,&aa[i].x2,&aa[i].x3);
fclose(in);
writeDat(int count)
(
FILE *out;
int i;
clrscr();
out=fopen("out75.dat","w");
for(i=0;i<count;i++)
printf("%d, %d, %d 第一个数+第三个数
=%d/n",bb[i].xl,bb[i].x2,bb[i].x3,bb[i].xl+bb[i].x3);
fprintf(out,"%d,%d,%d/n",bb[i].xl,bb[i].x2,bb[i].x3);
fclose(out);
【正确答案】int jsSort()
{
int i,j,count=0;
Data val;
for(i=0;i<200;i++)
if(aa[i].x1>aa[i].x2+aa[i].x3) /*如果每组数据中的第一个数大于第二、三个数之和*/
{
bb[count].x1=aa[i].x1; /*把满足条件的数据存入结构数组bb中*/
bb[count].X2=aa[i].X2;
bb[count].X3=aa[i].X3;
count++; /*统计满足条件的数据的组数*/
}
for(i=0;i<count-1;i++) /*对bb中的数按照每组数据的第一个数加第三个数之和的大小进行升序排列*/
for(j=i+1;j<count;j++)
if(bb[i].x1+bb[i].x3>bb[j].x1+bb[i].x3)
{
val=bb[i];
bb[i]=bb[j];
bb[j]=val;
}
return count; /*满足条件的数据的组数*/
}
【答案解析】[解析] 本题考查的知识点如下:
(1)结构体及结构数组。
(2)数据的排序。
(3)函数的返回值。
本题中,定义了结构类型和结构数组,这就要涉及到结构体和结构数组的访问。相同类型的结构体变量之间可以直接赋值,也可以依次对结构体中的每个变量进行赋值或访问。排序使用“选择排序法”。函数的值通过return语句返回,格式为; return表达式或return(表达式)或return,当函数没有返回值时用第3种格式。在本题中,要用第1种或第2种格式。