全國(guó)計(jì)算機(jī)等級(jí)考試筆試:四級(jí)精練(2)

字號(hào):

題面:
    已知數(shù)據(jù)文件IN.DAT中存有200個(gè)四位數(shù), 并已調(diào)用讀函數(shù) readDat()把這些數(shù)存入數(shù)組a中,請(qǐng)考生編制一函數(shù)jsVal(),其功能是:從數(shù)組a的頭開(kāi)始,依次取每20個(gè)數(shù)中的值組成一個(gè)數(shù), 這樣可以獲得10個(gè)新數(shù)并存入數(shù)組b中,接著把數(shù)組b中的數(shù)按從小到大的順序重新存入數(shù)組b中。最后main()函數(shù)調(diào)用寫函 數(shù)writeDat()把結(jié)果b輸出到OUT.DAT文件中。
    注意: 部分源程序存在文件PROG1.C文件中。
    程序中已定義: a[200]、b[10]
    請(qǐng)勿改動(dòng)數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
    
    初始化程序:
    #include
    #define MAX 200
    int a[MAX], b[10];
    void jsVal()
    {
    }
    void readDat()
    {
    int i ;
    FILE *fp ;
    fp = fopen("in.dat", "r") ;
    for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
    fclose(fp) ;
    }
    void main()
    {
    int i ;
    readDat() ;
    jsVal() ;
    for(i = 0 ; i < 10 ; i++)
    printf("b[%d]=%d\n", i, b[i]) ;
    writeDat() ;
    }
    writeDat()
    {
    FILE *fp ;
    int i ;
    fp = fopen("out.dat", "w") ;
    for(i = 0 ; i < 10 ; i++) fprintf(fp, "%d\n", b[i]) ;
    fclose(fp) ;
    }
    參考答案:
    #include
    #define MAX 200
    int a[MAX], b[10];
    void jsVal()
    {
    int i,j,k; /* j,k,i-循環(huán)變量 */
    int iMax;
    for(i=0;i<10;i++) /* 根據(jù)取數(shù)要求循環(huán) */
    {
    iMax=0;
    for(j=i*20;j<(i+1)*20;j++) if(iMaxb[i]=iMax;
    for(j=0;j{
    if(b[j]>iMax) /* 在b中尋找dt的位置 */
    {
    for(k=i;k>j;k--) b[k]=b[k-1]; /* 順序移動(dòng) */
    b[j]=iMax;
    break;
    }
    }
    }
    }
    void readDat()
    {
    int i ;
    FILE *fp ;
    fp = fopen("in.dat", "r") ;
    for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
    fclose(fp) ;
    }
    void main()
    {
    int i ;
    readDat() ;
    jsVal() ;
    for(i = 0 ; i < 10 ; i++)
    printf("b[%d]=%d\n", i, b[i]) ;
    writeDat() ;
    }
    writeDat()
    {
    FILE *fp ;
    int i ;
    fp = fopen("out.dat", "w") ;
    for(i = 0 ; i < 10 ; i++) fprintf(fp, "%d\n", b[i]) ;
    fclose(fp) ;
    }
    本題評(píng)析:
    本題,是一道考察循環(huán)和數(shù)組排序的題目,通過(guò)20個(gè)一個(gè)平均一般可以安排兩層循環(huán),結(jié)合本題獲得10個(gè)值的要求,在外層安排0-9的循環(huán)。
    數(shù)組的排序一般可以使用冒泡和二分等算法排序,在本題目中,加入的因素是可以在獲得數(shù)據(jù)后直接在數(shù)組中尋找到合適的位置,這樣我們可以假設(shè)b已經(jīng)是有序的數(shù)組,可以簡(jiǎn)化程序。