文件IN.DAT中存有200组数据,每组有3个数,每个数均是三位数。函数ReadData()是读取这200组数据存放到结构数组inBuf中。请编制函数dataSort(),其功能是:要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第i个数之

admin2013-12-17  36

问题 文件IN.DAT中存有200组数据,每组有3个数,每个数均是三位数。函数ReadData()是读取这200组数据存放到结构数组inBuf中。请编制函数dataSort(),其功能是:要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第i个数之和,其中满足条件的个数作为函数dataSort()的返回值。同时把满足条件的数据存人结构数组outBuf中,再对结构数组outBuf中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列,排序后的结果仍重新存人结构数组outBuf中,函数WriteData()负责把结果outBuf输出到文件OUT.DAT中。
    注意:郎分源程序已给出。
    请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。
    试题程序:
    #include
    #include
    #include
    typedef struct
    {
    int x1,x2,x3;
    }
    Data;
    Data inBuf[200],outBuf[200];
    void ReadData();
    void WriteData(int);
    int dataSort()
    {
    }
    void main()
    {
    int count;
    ReadData();
    count=dataSort();  /*返回满足条件的个数*/
    WriteData(count);
    }
    void ReadData()
    {
    FILE*in;
    int i;
    in=fopen(“IN.DAT”,“r”);
    for(i=0;i<200;i++)
    fscanf(in,“%d,%d,%d,”,&inBuf.x1,
    &inBuf.x2,&inBuf.x3);
    fclose(in);
    }
    void WriteData(int count)
    {
    FILE*out;
    int i;
    OUt=fopen(“OUT.DAT”,“W”);
    system(“CLS”);
    for(i=0;i    printf(“x1=%d,x2=%d,x3=%d x2+x3
    =%d\n”,outBuf.x1,outBuf.x2,outBuf
    .x3,outBuf.x2+outBuf.x3);
    fprintf(out,“x1=%d,x2=%d,x3=%d x2+
    x3=%d\n”,outBuf.x1,outBuf.x2,out
    Buf.x3,outBuf.x2+outBuf.x3);
    }
    fclose(out);
}

选项

答案int dataSort() { int count=0,i,j; Data temp; for(i=0;i<200;i++) { if(inBuf[i].x2>inBuf[i].x1+inBuf[i].x3) /*如果符合条件,则将inBuf中的内容写到 outBuf中*/ { outBuf[count].x1:inBuf[i].xl; outBuf[count].x2=inBuf[~.x2; outBuf[count].x3=inBuf[i].x3; count++; } } for(i=0;i
解析 本题主要考查结构数组排序的问题。
    所谓结构数组排序就是以结构某一元素为依据对结构数组进行排序。排序时仍采用冒泡排序法。但是由于结构不像变量那样可以通过简单的赋值来交换变量(如果要赋值的话需要对结构里的所有元素进行赋位替换,比较麻烦),所以在进行两个相邻结构交换时,用到内存拷贝函数来对内存的内容整体进行操作。
    由于本题的头文件中没有包含对内存探作的头文件memory.h,故只能用赋值的方法来进行结构的交换。
转载请注明原文地址:https://kaotiyun.com/show/fAZZ777K
0

最新回复(0)