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

字號:

為大家收集整理了《2013年計算機(jī)二級C語言上機(jī)題庫及答案解析(18)》供大家參考,希望對大家有所幫助?。。?BR>    填空題
    函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[1]、a[2]、……中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7,刪除偶數(shù)后a 所指數(shù)組中的數(shù)據(jù)為:9、1、3、5、7,返回值為5。
    請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
    注意:源程序存放在考生文件夾下的BLANK1.C中。
    不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #define N 9
    int fun(int a[], int n)
    { int i,j;
    j = 0;
    for (i=0; i if (a[i]%2==___1___)
    {
    a[j] = a[i]; ___2___;
    }
    return ___3___;
    }
    main()
    { int b[N]={9,1,4,2,3,6,5,8,7}, i, n;
    printf("\nThe original data :\n");
    for (i=0; i  n = fun(b, N);
    printf("\nThe number of odd : %d \n", n);
    printf("\nThe odd number :\n");
    for (i=0; i  }
    解題思路:
    第一處:判斷a[i]是否是奇數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:1。
    第二處:數(shù)組a中的元素位置由j來控制,每增加一個元素,則j加1,所以應(yīng)填:j++。
    第三處:返回刪除偶數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。
    改錯題
    給定程序MODI1.C中函數(shù)fun的功能是:求出兩個非零正整數(shù)的公約數(shù),并作為函數(shù)值返回。
    例如,若給num1和num2分別輸入49和21,則輸出的公約數(shù)為7;若給num1
    和num2分別輸入27和81,則輸出的公約數(shù)為27。
    請改正程序中的錯誤,使它能得出正確結(jié)果。
    注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
    給定源程序:
    #include
    int fun(int a,int b)
    { int r,t;
    if(a  t=a; b=a; a=t;
    }
    r=a%b;
    while(r!=0)
    { a=b; b=r; r=a%b; }
    return(a);
    }
    main()
    { int num1, num2,a;
    printf("Input num1 num2: "); scanf("%d%d",&num1,&num2);
    printf("num1= %d num2= %d\n\n",num1,num2);
    a=fun(num1,num2);
    printf("The maximun common divisor is %d\n\n",a);
    }
    解題思路:
    第一處:交換值的次序有問題,所以應(yīng)改為:t=a;a=b;b=t;。
    第二處:返回值錯誤,應(yīng)改為:return(b);。
    編程題
    假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:刪除字符串中所有的*號。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
    例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG。
    注意: 部分源程序在文件PROG1.C中。
    請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
    你編寫的若干語句。
    給定源程序:
    #include
    void fun( char *a )
    {
    }
    main()
    { char s[81];
    printf("Enter a string:\n");gets(s);
    fun( s );
    printf("The string after deleted:\n");puts(s);
    NONO();
    }
    解題思路:
    本題是考察字符串的操作。
    1. 利用循環(huán)掃描字符串中所有的字符是否是'*',如果不是'*',則把這些字符存放字符串a(chǎn)首地址開始的位置上。
    2. 最后給字符串a(chǎn)加上結(jié)束符。
    參考答案:
    void fun( char *a )
    {
    int j =0 ;
    char *p=a;
    while(*p) {
    if(*p != '*') a[j++]=*p ;
    p++ ;
    }
    a[j]=0;
    }