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

字號:

填空題
    給定程序中,函數(shù)fun的功能是:計算x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),平均值通過形參返回主函數(shù),將小于平均值且最接近平均值的數(shù)作為函數(shù)值返回,在主函數(shù)中輸出。
    例如,有10個正數(shù):46 30 32 40 6 17 45 15 48 26,平均值為:
    30.500000
    主函數(shù)中輸出:m=30.0
    請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
    注意:源程序存放在考生文件夾下的BLANK1.C中。
    不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #define N 10
    double fun(double x[],double *av)
    { int i,j; double d,s;
    s=0;
    for(i=0; i
    __1__=s/N;
    d=32767;
    for(i=0; i
    if(x[i]<*av && *av - x[i]<=d){
    d=*av-x[i]; j=__2__;}
    return __3__;
    }
    main()
    { int i; double x[N],av,m;
    for(i=0; i
    m=fun(x,&av);
    printf("\nThe average is: %f\n",av);
    printf("m=%5.1f ",m);
    printf("\n");
    }
    解題思路:
    第一處:計算好的平均值通過形參av返回,所以應(yīng)填:*av。
    第二處:計算小于平均值且最接近平均值的位置j,所以應(yīng)填:i。
    第三處:返回該數(shù),所以應(yīng)填:x[j]。
    改錯題
    給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參n,計算如下公式的值。例如,若 n=10,則應(yīng)輸出: 0.617977。
    請改正程序中的語法錯誤,使它能得出正確的結(jié)果。
    注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    int fun ( int n )
    { float A=1; int i;
    for (i=2; i
    A = 1.0/(1+A);
    return A ;
    }
    main( )
    { int n ;
    printf("\nPlease enter n: ") ;
    scanf("%d", &n ) ;
    printf("A%d=%f\n", n, fun(n) ) ;
    }
    解題思路:
    第一處:函數(shù)的返回是浮點型數(shù),所以應(yīng)改為:float fun(int n)。
    第二處:for的終止條件應(yīng)是i<=n。
    編程題
    程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun,函數(shù)的功能是:使數(shù)組右上三角元素中的值乘以m 。
    例如:若m的值為2,a 數(shù)組中的值為
    | 1 9 7 | | 2 18 14|
    a = | 2 3 8 | 則返回主程序后a數(shù)組中的值應(yīng)為 | 2 6 16|
    | 4 5 6 | | 4 5 12|
    注意: 部分源程序存在文件PROG1.C文件中。
    請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入你編寫的若干語句。
    給定源程序:
    #include
    #include
    #define N 5
    int fun ( int a[][N], int m )
    {
    }  
    main ( )
    { int a[N][N], m, i, j;
    printf("***** The array *****\n");
    for ( i =0; i
    { for ( j =0; j
    { a[i][j] = rand()%20; printf( "%4d", a[i][j] ); }
    printf("\n");
    }
    do m = rand()%10 ; while ( m>=3 );
    printf("m = %4d\n",m);
    fun ( a ,m );
    printf ("THE RESULT\n");
    for ( i =0; i
    { for ( j =0; j
    printf("\n");
    }
    NONO ( );
    }
    解題思路:
    本題是利用兩重循環(huán)給二維數(shù)組右上三角元素中的值乘以m。
    參考答案:
    int fun ( int a[][N], int m )
    {
    int i, j;
    for(i = 0 ; i < N ; i++)
    for(j = i ; j < N ; j++)
    a[i][j] *= m ;
    }