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

题目

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

例如:处理前 9012 5099 6012 7025 8088

处理后 5099 8088 7025 6012 9012

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

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

试题程序:

include <stdio.h>

include <string.h>

include <conio.h>

int aa[200], bb[10];

void jsSort()

{

}

main()

{

readDat ( );

jsSort ();

writeDat();

}

readDat ( )

{

FILE *in;

int i;

in = fopen("IN3.DAT", "r");

for(i = 0; i < 200; i++) fscanf(in, "%d,", &aa[i]);

fclose(in);

}

writeDat()

{

FILE *out;

int i;

out = fopen("OUT3.DAT", "w");

clrscr();

for (i = 0; i < 10; i++)

{

printf("i=%d,%d\n", i+1, bb[i]);

fprintf(out, "%d\n", bb[i]);

}

fclose(out);

}


相似考题
更多“在文件IN3.DAT中有200个正整数,且每个数均在1000至9999之间。函数addat()的功能是读取这200个数存 ”相关问题
  • 第1题:

    在数据文件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]中。
    【参考答案】

  • 第2题:

    已知在in.dat中存有若干个(个数<200)四位数字的正整数,函数ReadDat读取这若干个正整数并存入数组XX中。请编制函数CalValue,其功能要求: 1.求出该文件中共有多少个正整数totNum; 2.求这些正整数右移1位二进制位后,产生的新数是奇数的数的个数totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值totPjz。最后main函数调用函数 WriteDat把所求的结果输出到文件out.dat中。 注意:部分源程序存放在test.c文件中。 请勿改动数据文件in.dat中的任何数据,主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取正数,统计个数,右移后为奇数的个数及平均值。
    【解题思路】
    本题类似第44套试题,通过审题可以发现仅有一个不同点,即参与平均值计算的元素是数组xx[i]右移一位之后为奇数的元素,参考答案的第9条语句。
    【参考答案】

  • 第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)四位十进制数字组成的正整数,函数ReadDat读取这若干个正整数并存入数组 xx中。请编制函数CalValue,其功能要求:1.求出该文件中共有多少个正整数totNum;2.求这些正整数右移1位二进制位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值totPjz。最后main函数调用函数WriteDat把所求的结果输出到out.dat文件中。 注意:部分源程序存放在test.c文件中。 请勿改动数据文件in.dat中的任何数据,主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取正数,统计个数,右移后为偶数的个数及平均值。
    【解题思路】
    ①定义整型变量i、j和长整型he,并把其初始值设置为0。
    ②用for循环语句对数组xx进行扫描,如果当前数组元素xx[i]非零,则全局变量totNum加1。
    ③在for循环语句中,循环变量i从0开始递增到totNum.1,对数组xX中的每个元素xx[i]右移一位,把这个值赋给整型变量j,再对j的值对2求余数,如果余数等于0,则变量totCnt加1,并把数组元素xx[i]累加到变量he。
    ④退出循环时,把变量he的数据类型转换成双精度型再除以变量totCnt的值,就得到算术平均值totPjz。
    【参考答案】

  • 第5题:

    在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数ReadDat读取这若干个正整数并存入数组XX中。请编制函数CalValue,其功能要求:1.求出该文件中共有多少个正整数totNum;2.求出这些正整数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些正整数的算术平均值totPjz。最后main函数调用函数WriteDat把所求的结果输出到0ut.dat文件中。 注意:部分源程序存放在test.c文件中。 请勿改动数据文件in.dat中的任何数据,主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取正数,统计个数,各位数字之和为偶数的数的个数及平均值。
    【解题思路】 定义整型循环变量i、j,表示各位数字之和的长整型变量he以及存储一个四位数的字符数组num[5]。
    ②循环变量i从0开始,依次递增到4,对字符数组num[5]的每个元素赋初值0。
    ③循环变量i从0开始,依次递增到MAXNUM.1,对每个数组元素xx[i]进行判断,如果xx[i]的值非零,则变量totNum加1,退出循环时,totNm的值就是文件in.dat中存有的四位正整数的个数。
    ④循环变量i从0开始,依次递增到totNum-1,对于每个数组元素xx[i]调用库函数sprintf以4个字符宽度形式输出到字符数组num中,用字符数组num中的每个元素减去0的ASCII码48,就分别得到XX[i]这个四位数每位上的数字,并把这四个数字相加赋给变量j。再对变量j对2求余数进行判断其值是否等于0,如果等于0,则说明j是偶数,变量totCnt加1,并把xx[i]的值累加到变量he。
    ⑤退出循环后,把变量he的类型转换成双精度型再除以totCnt得到符合条件的数的算术平均值totPjz。
    【参考答案】