2013年計(jì)算機(jī)二級(jí)C語言上機(jī)題庫及答案解析(12)

字號(hào):

填空題
    給定程序中,函數(shù)fun的功能是:將自然數(shù)1~10以及它們的平方根寫到名為myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。
    請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
    注意:源程序存放在考生文件夾下的BLANK1.C中。
    不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #include
    int fun(char *fname )
    { FILE *fp; int i,n; float x;
    if((fp=fopen(fname, "w"))==NULL) return 0;
    for(i=1;i<=10;i++)
    fprintf(___1___,"%d %f\n",i,sqrt((double)i));
    printf("\nSucceed!!\n");
    ___2___;
    printf("\nThe data in file :\n");
    if((fp=fopen(___3___,"r"))==NULL)
    return 0;
    fscanf(fp,"%d%f",&n,&x);
    while(!feof(fp))
    { printf("%d %f\n",n,x); fscanf(fp,"%d%f",&n,&x); }
    fclose(fp);
    return 1;
    }
    main()
    { char fname[]="myfile3.txt";
    fun(fname);
    }
    解題思路:
    本題要求所求出的數(shù)寫入到指定的文件中保存。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容,使程序能運(yùn)行出正確的結(jié)果。
    第一處:int fprintf(FILE *stream, const char *format [,argument, …]); 因此本處只能填寫文件流的變量fp。
    第二處:由于文件打開寫操作,所以必須要關(guān)閉,因此,只能填寫關(guān)閉文件的函數(shù)fclose(fp)。
    第三處:由于本題要把剛寫入文件中的數(shù)據(jù)重新顯示出來,讀方式已經(jīng)給出,但沒有給出
    文件名,所以本處只能寫文件名變量fname或者直接給出文件名"myfile3.dat"。
    改錯(cuò)題
    給定程序MODI1.C中fun函數(shù)的功能是:將n個(gè)無序整數(shù)從小到大排序。
    請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
    注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #include
    fun ( int n, int *a )
    { int i, j, p, t;
    for ( j = 0; j
    { p = j;
    for ( i=j+1; i
    if ( a[p]>a[i] )
    t=i;
    if ( p!=j )
    { t = a[j]; a[j] = a[p]; a[p] = t; }
    }
    }
    putarr( int n, int *z )
    { int i;
    for ( i = 1; i <= n; i++, z++ )
    { printf( "%4d", *z );
    if ( !( i%10 ) ) printf( "\n" );
    } printf("\n");
    }
    main()
    { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11;
    printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa );
    fun( n, aa );
    printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa );
    }
    解題思路:
    第一處:for循環(huán)的終止值應(yīng)該
    第二處:使用臨時(shí)變量p來保存最小值位置i,所以應(yīng)改為:p=i;。
    編程題
    函數(shù)fun的功能是: 將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。 合并的方式是: 將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的個(gè)位和百位上, b數(shù)的十位 和個(gè)位數(shù)依次放在c數(shù)的十位和千位上。
    例如, 當(dāng)a=45, b=12時(shí), 調(diào)用該函數(shù)后, c=2514。
    注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
    請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
    給定源程序:
    #include
    void fun(int a, int b, long *c)
    {
    }
    main()
    { int a,b; long c;
    printf("Input a, b:");
    scanf("%d,%d", &a, &b);
    fun(a, b, &c);
    printf("The result is: %ld\n", c);
    NONO();
    }
    解題思路:
    本題是給出兩個(gè)兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個(gè)新數(shù)。
    取a十位數(shù)字的方法:a/10
    取a個(gè)位數(shù)字的方法:a%10
    參考答案:
    void fun(int a, int b, long *c)
    {
    *c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);
    }