在文件in75.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDa(()是读取这200组数存放到结构数组aa中。请编制函数JsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第一个数大于第二个数加第三个数之和,其中满足条件的个数作为函数JsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数按照每组数据的第一个数加第三个数之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中。最后调用函数writ

题目

在文件in75.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDa(()是读取这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 xl,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] .x1,&aa[i] .x2,&aa[i] .x3);

fclose (in);

}

writeDat(int count)

{

FILE *out;

int i;

clrscr();

ut=fopen("out75,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);

}


相似考题
参考答案和解析
正确答案:int jsSort() { int i j count=0; Data val; for (i=0; i200;i++) if(aa[i] .xl>aa[i] .x2+aa [i] .x3) /*如果每组数据中的第一个数大于第二、 三个数之和*/ { bb [count] .xl=aa [i] .x1; /*把满足条件的数据存入结构数组bb中*/ bb[count] .x2=aa[i] .x2; bb[count] .x3=aa[i] .x3; count++; /*统计满足条件的数据的组数*/ } for (i=0; icount-1; i++ ) /*对bb中的数按照每组数据的每一个数加第三个 数之和的大小进行升序排列*/ for (j=i+l; jcount; 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; /*满足条件的数据的组数*/ }
int jsSort() { int i, j, count=0; Data val; for (i=0; i200;i++) if(aa[i] .xl>aa[i] .x2+aa [i] .x3) /*如果每组数据中的第一个数大于第二、 三个数之和*/ { bb [count] .xl=aa [i] .x1; /*把满足条件的数据存入结构数组bb中*/ bb[count] .x2=aa[i] .x2; bb[count] .x3=aa[i] .x3; count++; /*统计满足条件的数据的组数*/ } for (i=0; icount-1; i++ ) /*对bb中的数按照每组数据的每一个数加第三个 数之和的大小进行升序排列*/ for (j=i+l; jcount; 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; /*满足条件的数据的组数*/ } 解析:本题考查的知识点如下:
(1)结构体及结构数组。
(2)数据的排序。
(3)函数的返回值。
本题中,定义了结构类型和结构数组,这就要涉及到结构体和结构数组的访问。相同类型的结构体变量之间可以直接赋值,也可以依次对结构体中的每个变量进行赋值或访问。排序使用“选择排序法”。函数的值通过return语句返回,格式为:return表达式或return(表达式)或return,当函数没有返回值时用第3种格式。在本题中,要用第1种或第2种格式。
更多“在文件in75.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDa(()是读取这200组数存放到 ”相关问题
  • 第1题:

    在文件in.dat中已存有200个正整数,且每个数均在1 000至9999之间。函数readDat是读取这200个数存放到数组aa中。请编制函数jsSort,其函数的功能是:要求按每个数的后三位的大小进行降序排列,如果出现后三位相等的数值,则对这些数值按原始4位数据进行升序排列,将排序后的前10个数存入数组bb中。 最后调用函数writeDat把结果bb输出到文件out.dat中。


    正确答案:
    【审题关键句】按每个数的后三位降序排列,然后取出满足此条件的前10个数依次存入数组;如果后三位的数值相等,则按原先的数值进行升序排列。
    【解题思路】本题类似第7套试题,通过审题可以发现主要有两个不同点:①按每个数的后三位降序排列,参考答案的第5条语句,修改两数组元素的大小比较符即可;②后三位的数值相等则按原先的数值进行升序排列,参考答案的第13条语句,同样也是修改两数组元素的大小比较符即可。
    【参考答案】


  • 第2题:

    在数据文件in.dat中有200组数据,每组有3个数,每个数均是三位数。函数readDat是读取这200组数据存放到结构数组aa中。请编制函数isSort,其函数的功能是:要求在200组数据中找出第一个数大于第二个数与第三个数之和的数,其中满足条件的个数作为函数jsSort的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第一个数与第三个数之和的大小进行升序排列(第一个数与第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中,最后调用函数writeDat把结果bb输出到out.dat文件中。 注意:部分源程序存在test.c文件中。 请勿改动数据文件in.dat中的任何数据、主函数main、读函数readDat和写函数writeDat的内容。


    正确答案:
    【审题关键句】第1个数大于第2个数加第3个数,存入数组,按第l个加第3个数之和升序排序。
    【解题思路】
    本题类似第63套试题,通过审题可以发现主要有两个不同点:①筛选满足条件的记录不同,参考答案的第5行,修改 if条件语句的设置即可;②对满足条件的筛选结果进行排序的条件不同,参考答案的ll行,修改if条件语句的设置即可。
    【参考答案】

  • 第3题:

    在文件IN6.DAT中有200个正整数,且每个数均在1000至9999之间。函数readDat()的功能是读取这200个数存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的后3位的大小进行降序排列,将排序后的前10个数存入数组b中,如果数组b中出现后3位相等的数,则对这些数按原始4位数据进行升序排列。最后调用函数writeDat()把结果bb输出到文件OUT6.DAT中。

    例如:处理前 9012 5099 6012 7025 8088

    处理后 5099 8088 7025 6012 9012

    注意:部分源程序已给出。

    请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。


    #include
    #include
    #include
    int aa[200], bb[10] ;
    void readDat();
    void writeDat();
    void jsSort()
    {
    int i,j; /*定义循环控制变量*/
    int temp; /*定义数据交换时的暂存变量*/
    for(i=0;i<199;i++) /*用选择法对数组进行排序*/
    for(j=i+1;j<200;j++)
    {
    if(aa[i]%1000
    {
    temp=aa[i];
    aa[i]=aa[j];
    aa[j]=temp;
    }
    else if(aa[i]%1000==aa[j]%1000) /*如果后3位数相等*/
    if(aa[i]>aa[j]) /*则要按原4位数的值进行升序排序*/
    {
    temp=aa[i];
    aa[i]=aa[j];
    aa[j]=temp;
    }
    }
    for(i=0;i<10;i++) /*将排序后的前10个数存入数组b中*/
    bb[i]=aa[i];
    }
    void main()
    {
    readDat() ;
    jsSort() ;
    writeDat() ;
    }
    void readDat()
    {
    FILE *in ;
    int i ;
    in = fopen("IN6.DAT", "r") ;
    for(i = 0 ; i < 200 ; i++) fscanf(in, "%d,", &aa[i]);
    fclose(in) ;
    }
    void writeDat()
    {
    FILE *out ;
    int i ;
    out = fopen("OUT6.DAT", "w") ;
    system("CLS");
    for (i = 0 ; i < 10 ; i++)
    {
    printf("i=%d,%d\n", i + 1, bb[i]) ;
    fprintf(out, "%d\n", bb[i]) ;
    }
    fclose(out) ;
    }

  • 第4题:

    在数据文件in.dat中有200个正整数,且每个数都在1000至9999之间。函数readDat是读取这200个数存放到数组 aa中。请编制函数isSort,其函数的功能是:要求按每个数的后三位的大小进行升序排列,如果出现后三位相等的数值,则对这些数值按原始4位数据进行降序排列,将排序后的前10个数存入数组bb中。最后调用函数writeDat把结果bb输出到文件out.dat中。 例:处理前60125099901270258088 处理后 90126012702580885099 注意:部分源程序存在test.c文件中。 请勿改动数据文件in.dat中的任何数据、主函数main、读函数readDat和写函数writeDat的内容。


    正确答案:
    【审题关键句】按每个数的后三位升序排列,然后取出满足此条件的前10个数依次存入数组,如果后三位的数值相等,则按原先的数值进行降序排列。
    【解题思路】
    ①首先定义两个循环变量循环i、j和一个用于数据交换的整型变量m。
    ②然后通过两个for循环对数组aa[]中的两个相邻元素按照其后三位值的大小进行从小到大的排序,本题中已给出所有的整数都是四位数,因此,可以通过aa[i]%1000或aa[j]%1000计算得到当前数组元素的后三位值,然后再进行比较,如果两个数需要转换位置,可通过中间变量m进行转换。
    ③上一步骤是两个元素后三位不相同的情况,根据题意,需要再增加一个else if语句判断两个相邻元素的后三位数一样的情况,如果相同,则需要继续判断两个四位数的大小,并按从大小的顺序排序。
    ④最后,通过一个for循环依次读取aa[i]数组中前10个元素并保存到数组bb[i]中。
    【参考答案】

  • 第5题:

    已知在文件in.dat中存有200组数据,每组有3个数,每个数均是三位数。函数readDat是读取这200组数据存放到结构数组aa中。请编制函数jsSort,其函数的功能是:要求在200组数据中找出第二个数大于第一个数加第三个数之和的数,其中满足条件的个数作为函数jsSort的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列(第二个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组 bb中,最后调用函数writeDat把结果bb输出到out.dat文件中。 注意:部分源程序存在test.C文件中。 请勿改动数据文件in.dat中的任何数据、主函数main、读函数readDat和写函数writeDat的内容。


    正确答案:
    【审题关键句】第2个数大于第1个数加第3个数,存入数组,按第2个加第3个数之和降序排序。
    【解题思路】
    ①首先定义两个循环变量i、j;一个计数变量count;一个用于中间转换数据的结构体变量CC。
    ②建立一个for循环,指定第一个for循环的循环变量i从0开始,到200时结束,每循环一次,变量i的值加1。在循环体中依次判断每行数据中,如果aa[i]的第二个数大于第一个数加第三个数之和,则把aa[i]复制到bb[count]中,同时数组下标变量count加1。
    ③将所有满足条件的记录筛选保存到数组bb口后,再通过两个for循环对数组bb[]中记录进行排序。第一个for循环的循环变量i的初值为0,当等于数组计数变量count的值减1时停止循环,每循环一次,i的值加1;第二个for循环的循环变量j的初值等于i+1,当等于数组计数变量count的值时停止循环,每循环一次,j的值加1;每次进行比较时,如果第i行的第二个数加第三个之和小于其后面第i行的第二个数加第三个之和,将执行if条件语句后面花括号中的命令,花括号中3条命令的功能就是根据题目要求按每行数据中第二个数加第三个之和从大到小排序。
    ④最后将计数函数count返回。
    【参考答案】