1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            全國計算機二級C題庫第61--70套

             

            本題目如果下載后發現有錯誤的地方,請聯系網站管理員:QQ121431055

            考試時,上機題目有三套,基本操作題、簡單應用題、綜合應用題

             

            61套:

            函數fun的功能是進行字母轉換。若形參ch中是小寫英文字母,則轉換成對應

            的大寫英文字母;若ch中是大寫英文字母,則轉換成對應的小寫英文字母;若是

            其它字符則保持不變;并將轉換后的結果作為函數值返回。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

             

             

             

             

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            char fun(char ch)

            {

            /**********found**********/

            if ((ch>='a')___1___(ch<='z'))

            return ch -'a' + 'A';

            if ( isupper(ch) )

            /**********found**********/

            return ch +'a'-___2___ ;

            /**********found**********/

            return ___3___;

            }

            main()

            { char c1, c2;

            printf("\nThe result :\n");

            c1='w'; c2 = fun(c1);

            printf("c1=%c c2=%c\n", c1, c2);

            c1='W'; c2 = fun(c1);

            printf("c1=%c c2=%c\n", c1, c2);

            c1='8'; c2 = fun(c1);

            printf("c1=%c c2=%c\n", c1, c2);

            }

            解題思路:

            第一處:判斷形參ch是否是小寫字母,所以應填:&&。

            第二處:小寫字母與大寫字母的ASCII值相差為32,所以應填:'A'65。

            第三處:返回處理后的形參ch,所以應填:ch。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是: 給一維數組a輸入任意4個整數, 并按

            下例的規律輸出。例如輸入1、2、3、4, 程序運行后將輸出以下方陣。

            4 1 2 3

            3 4 1 2

            2 3 4 1

            1 2 3 4

            請改正函數fun中指定部位的錯誤, 使它能得出正確的結果。

            注意: 不要改動main函數, 不得增行或刪行, 也不得更改程序的結構!

            給定源程序:

            #include

            #define M 4

            /**************found**************/

            void fun(int a)

            { int i,j,k,m;

            printf("Enter 4 number : ");

            for(i=0; i

             

             

             

             

            printf("\n\nThe result :\n\n");

            for(i=M;i>0;i--)

            { k=a[M-1];

            for(j=M-1;j>0;j--)

            /**************found**************/

            aa[j]=a[j-1];

            a[0]=k;

            for(m=0; mprintf("\n");

            }

            }

            main()

            { int a[M];

            fun(a); printf("\n\n");

            }

            解題思路:

            第一處:在函數fun體中,a是一個整型數組,所以形參a應定義為指針型整數變量。

            第二處:變量書寫錯誤,aa應為a。

            ***************************************************

            請編寫一個函數fun, 它的功能是: 計算并輸出給定整數n的所有因子(不包括

            1n自身)之和。規定n的值不大于1000。

            例如,在主函數中從鍵盤給n輸入的值為856, 則輸出為:sum=763。

            注意:部分源程序在文件PROG1.C中。

            請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            int fun(int n)

            {

            }

            main()

            { int n,sum;

            printf("Input n: "); scanf("%d",&n);

            sum=fun(n);

            printf("sum=%d\n",sum);

            NONO();

            }

             

            解題思路:

            本題是考察考生怎樣利用循環來求出一個數n的所有(除1和自身外)因子i并求出它們的和

            s作為函數值返回。判斷因子的條件是:n % i == 0,(i是大于1且小于n中所有的正整數)。

            參考答案:

            int fun(int n)

            {

            int s = 0, i ;

            for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ;

            return s ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            62套:

            給定程序中,函數fun的功能是:把形參s所指字符串中下標為奇數的字符右

            移到下一個奇數位置,最右邊被移出字符串的字符繞回放到第一個奇數位置,下

            標為偶數的字符不動(注:字符串的長度大于等于2)。例如,形參s所指的字符

            串為:abcdefgh,執行結果為:ahcbedgf。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            void fun(char *s)

            { int i, n, k; char c;

            n=0;

             

             

             

             

            for(i=0; s[i]!='\0'; i++) n++;

            /**********found**********/

            if(n%2==0) k=n-___1___ ;

            else k=n-2;

            /**********found**********/

            c=___2___ ;

            for(i=k-2; i>=1; i=i-2) s[i+2]=s[i];

            /**********found**********/

            s[1]=___3___ ;

            }

            main()

            { char s[80]="abcdefgh";

            printf("\nThe original string is : %s\n",s);

            fun(s);

            printf("\nThe result is : %s\n",s);

            }

            解題思路:

            第一處:首先判斷字符串的長度是奇數還是偶數,如果是奇數,則k=n-1,所以應填:1。

            第二處:取字符串最后一個奇數位的字符,并由變量c保存,所以應填:s[k]。

            第三處:第1位奇數位用最一個奇數位字符替換,所以應填:c。

            ***************************************************

            給定程序MODI1.C fun 函數的功能是:求

            s = aa… aa - ... - aaa - aa - a

            (此處 aa aa 表示 n a, a n 的值在 1 9 之間)

            例如 a = 3, n = 6, 則以上表達式為:

            s = 333333 - 33333 - 3333 - 333 - 33 - 3

            其值是:296298

            a n fun 函數的形參,表達式的值作為函數值傳回 main函數。

            請改正程序中的錯誤,使它能計算出正確的結果。

            注意: 不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            long fun (int a, int n)

            { int j ;

            /**************found**************/

            long s = 0, t = 1 ;

            for ( j = 0 ; j < n ; j++)

            t = t * 10 + a ;

            s = t ;

            for ( j = 1 ; j < n ; j++) {

            /**************found**************/

            t = t % 10 ;

            s = s - t ;

            }

            return(s) ;

            }

            main( )

             

             

             

             

            { int a, n ;

            printf( "\nPlease enter a and n:") ;

            scanf( "%d%d", &a, &n ) ;

            printf( "The value of function is: %ld\n", fun ( a, n ) );

            }

            解題思路:

            第一處:根據for循環計算t的值可知,變量t的初值不正確,應為0。

            第二處:每次循環都是取t除以10的值,而不是取余數,所以應改t=t/10;。

            ***************************************************

            請編寫一個函數 void fun(char *tt, int pp[]),統計在tt所指字符串中

            'a' 'z' 26個小寫字母各自出現的次數,并依次放在pp所指數組中。

            例如,當輸入字符串:abcdefgabcdeabc 后,程序的輸出結果應該是:

            3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

            注意: 部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            void fun(char *tt, int pp[])

            {

            }

            main( )

            { char aa[1000] ;

            int bb[26], k, n ;

            printf( "\nPlease enter a char string:" ) ; scanf("%s", aa) ;

            fun(aa, bb ) ;

            for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;

            printf( "\n" ) ;

            NONO ( ) ;

            }

             

            解題思路:

            本題是考察考生在給定的字符串中統計出26個小寫字母的次數并存入到指定的數組中且由

            形參返回。其中數組下標的位置可以通過某一個字符的ASCII值減去97或直接減'a'也可以,就

            可以得出該字符出現次數存放的位置。例如:字符為b,那么位置為'b'-'a'=1,就是實際存放

            的位置。

            參考答案:

            void fun(char *tt, int pp[])

            {

            char *p = tt ;

            int i ;

            for(i = 0 ; i < 26 ; i++) pp[i] = 0 ;

            while(*p) {

            if(*p >= 'a' && *p <= 'z') pp[*p - 'a'] += 1 ;

            p++ ;

            }

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            63套:

            給定程序中,函數fun的功能是:有N×N矩陣,根據給定的mm<=N)值,將

            每行元素中的值均右移m個位置,左邊置為0。例如,N=3,m=2,有下列矩陣

             

             

             

             

            1 2 3

            4 5 6

            7 8 9

            程序執行結果為

            0 0 1

            0 0 4

            0 0 7

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 4

            void fun(int (*t)[N], int m)

            { int i, j;

            /**********found**********/

            for(i=0; i

            { for(j=N-1-m; j>=0; j--)

            /**********found**********/

            t[i][j+___2___ ]=t[i][j];

            /**********found**********/

            for(j=0; j<___3___; j++)

            t[i][j]=0;

            }

            }

            main()

            { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m;

            printf("\nThe original array:\n");

            for(i=0; i

            { for(j=0; j

            printf("- ",t[i][j]);

            printf("\n");

            }

            printf("Input m (m<=%d): ",N);scanf("%d",&m);

            fun(t,m);

            printf("\nThe result is:\n");

            for(i=0; i

            { for(j=0; j

            printf("- ",t[i][j]);

            printf("\n");

            }

            }

            解題思路:

            第一處:for循環變量的增量,所以應填:i++。

            第二處:由于右移m個位置,所以應填:m。

            第三處:左邊m列均置于0,所以for循環的終止值應為m。

             

             

             

             

            ***************************************************

            給定程序MODI1.C中函數 fun 的功能是:計算并輸出high以內最大的10個素

            數之和。high的值由主函數傳給fun函數。

            high的值為: 100, 則函數的值為: 732。

            請改正程序中的錯誤,使程序能輸出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            int fun( int high )

            { int sum = 0, n=0, j, yes;

            /************found************/

            while ((high >= 2) && (n < 10)

            { yes = 1;

            for (j=2; j<=high/2; j++ )

            if (high % j ==0 ){

            /************found************/

            yes=0; break

            }

            if (yes) { sum +=high; n++; }

            high--;

            }

            return sum ;

            }

            main ( )

            {

            printf("%d\n", fun (100));

            }

            解題思路:

            第一處:括號沒有匹配。

            Error: While statement missing ) in function fun

            在函數funWhile語句缺少)。

            第二處:缺少分號。

            Error: Break statement missing ; in function fun

            在函數funbreak語句缺少;。

            這種題型只要通過編譯即可發現程序的錯誤所在。

            ***************************************************

            編寫函數fun,它的功能是:利用以下所示的簡單迭代方法求

            方程:cos(x)-x=0 的一個實根。

            迭代步驟如下:

            1)取 x1 初值為0.0;

            2x0 = x1,把x1的值賦給 x0;

            3x1 = cos(x0),求出一個新的x1;

            4)若x0 - x1的絕對值小于 0.000001,執行步驟(5),否則執

            行步驟(2);

             

             

             

             

            5)所求x1就是方程 cos(x)-x=0 的一個實根,作為函數值返回。

            程序將輸出結果Root=0.739085。

            注意: 部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun

            的花括號中填入你編寫的若干語句。

            給定源程序:

            #include

            #include

            float fun()

            {

            }

            main()

            {

            printf("Root =%f\n", fun());

            NONO();

            }

             

            解題思路:

            本題是根據給定的公式及條件來計算方程的一個實根。

            參考答案:

            float fun()

            {

            float x0, x1=0.0;

            do {

            x0=x1;

            x1=cos(x0);

            } while(fabs(x0-x1)>0.000001);

            return x1;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            64套:

            給定程序中,函數fun的功能是:將a所指3×5矩陣中第k列的元素左移到第0

            列,第k列以后的每列元素行依次左移,原來左邊的各列依次繞到右邊。

            例如,有下列矩陣:

            1 2 3 4 5

            1 2 3 4 5

            1 2 3 4 5

            k2,程序執行結果為

            3 4 5 1 2

            3 4 5 1 2

            3 4 5 1 2

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define M 3

            #define N 5

            void fun(int (*a)[N],int k)

            { int i,j,p,temp;

            /**********found**********/

            for(p=1; p<= __1__; p++)

            for(i=0; i

            { temp=a[i][0];

            /**********found**********/

            for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1];

            /**********found**********/

            a[i][N-1]= __3__;

            }

            }

            main( )

            { int x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },i,j;

            printf("The array before moving:\n\n");

            for(i=0; i

            { for(j=0; jprintf("\n");

            }

            fun(x,2);

            printf("The array after moving:\n\n");

            for(i=0; i

            { for(j=0; jprintf("\n");

            }

             

             

             

             

            }

            解題思路:

            第一處:外循環p的終止變量的值,試題要求第k列左移,所以應填:k。

            第二處:矩陣共N列,所以應填:N-1。

            第三處:把存放在臨時變量temp中的值,放到a[i][N-1]中,所以應填:temp。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:根據形參m的值(2m9〕,在mm

            列的二維數組中存放如下所示規律的數據,由main函數輸出。

            例如,若輸入 2 | 若輸入 4

            則輸出: | 則輸出:

            1 2 | 1 2 3 4

            2 4 | 2 4 6 8

            | 3 6 9 12

            | 4 8 12 16

            請改正程序函數中的錯誤,使它能得出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define M 10

            int a[M][M] = {0} ;

            /**************found**************/

            fun(int **a, int m)

            { int j, k ;

            for (j = 0 ; j < m ; j++ )

            for (k = 0 ; k < m ; k++ )

            /**************found**************/

            a[j][k] = k * j ;

            }

            main ( )

            { int i, j, n ;

            printf ( " Enter n : " ) ; scanf ("%d", &n ) ;

            fun ( a, n ) ;

            for ( i = 0 ; i < n ; i++)

            { for (j = 0 ; j < n ; j++)

            printf ( "M", a[i][j] ) ;

            printf ( "\n" ) ;

            }

            }

            解題思路:

            第一處:在函數體fun中可知,a是一個字符串數組型變量,所以應改為:fun(int a[][M],

            int m)。

            第二處:根據輸出的結果可知,應改為:a[j][k]=(k+1)*(j+1);。

            ***************************************************

            函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c

            中。合并的方式是:a中的十位和個位數依次放在變量c的十位和千位上,b中的

            十位和個位數依次放在變量c的個位和百位上。

            例如,當a45,b=12。調用該函數后,c=5241。

             

             

             

             

            注意: 部分源程序存在文件PROG1.C中。數據文件IN.DAT中的數據不得修改。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #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();

            }

             

            解題思路:

            本題是給出兩個兩位數的正整數分別取出各位上的數字,再按條件組成一個新數。

            a十位數字的方法:a/10

            a個位數字的方法:a

            參考答案:

            void fun(int a, int b, long *c)

            {

            *c=(a)*1000+(b)*100+(a/10)*10+(b/10);

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            65套:

            給定程序中,函數fun的功能是:將a所指4×3矩陣中第k行的元素與第0行元

            素交換。

            例如,有下列矩陣:

            1 2 3

            4 5 6

            7 8 9

            10 11 12

            k2,程序執行結果為:

            7 8 9

            4 5 6

            1 2 3

            10 11 12

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 3

            #define M 4

            /**********found**********/

            void fun(int (*a)[N], int __1__)

            { int i,j,temp ;

            /**********found**********/

            for(i = 0 ; i < __2__ ; i++)

            { temp=a[0][i] ;

            /**********found**********/

            a[0][i] = __3__ ;

            a[k][i] = temp ;

            }

             

             

             

             

            }

            main()

            { int x[M][N]={ {1,2,3},{4,5,6},{7,8,9},{10,11,12} },i,j;

            printf("The array before moving:\n\n");

            for(i=0; i

            { for(j=0; jprintf("\n\n");

            }

            fun(x,2);

            printf("The array after moving:\n\n");

            for(i=0; i

            { for(j=0; jprintf("\n\n");

            }

            }

            解題思路:

            第一處:變量k在函數體fun中已經使用,所以應填:k。

            第二處:共N行,所以應填:N。

            第三處:變量值交換,所以應填:a[k][i]。

            ***************************************************

            給定程序MODI1.C中函數 fun 的功能是: 讀入一個字符串(長度<20 ),將該

            字符串中的所有字符按ASCII碼升序排序后輸出。

            例如, 若輸入: edcba, 則應輸出: abcde。

            請改正程序中的錯誤,使它能統計出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            void fun( char t[] )

            {

            char c;

            int i, j;

            /**********found***********/

            for( i = strlen( t ); i; i-- )

            for( j = 0; j < i; j++ )

            /**********found***********/

            if( t[j] < t[ j + 1 ] )

            {

            c = t[j];

            t[j] = t[ j + 1 ];

            t[j + 1 ] = c;

            }

            }

            main()

            {

            char s[81];

            printf( "\nPlease enter a character string: " );

            gets( s );

             

             

             

             

            printf( "\n\nBefore sorting:\n \"%s\"", s );

            fun( s );

            printf( "\nAfter sorting decendingly:\n \"%s\"", s );

            }

            解題思路:

            第一處:外for循環的初始值應是strlen(t)-1。

            第二處:由于是按升序排序,所以應 if(t[j]>t[j+1])。

            ***************************************************

            請編寫一個函數fun, 其功能是: ss所指字符串中所有下標為奇數位置上的

            字母轉換為大寫(若該位置上不是字母, 則不轉換)。

            例如, 若輸入"abc4EFg",則應輸出"aBc4EFg"。

            注意: 部分源程序在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容, 僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            void fun( char *ss )

            {

            }

            void main( void )

            {

            char tt[51];

            printf( "\nPlease enter an character string within 50 characters:\n" );

            gets( tt );

            printf( "\n\nAfter changing, the string\n \"%s\"", tt );

            fun(tt) ;

            printf( "\nbecomes\n \"%s\"", tt );

            NONO();

            }

            解題思路:

            本題是考察考生在字符串指定位置上的字母轉換為大寫。給出的程序是由i來控制字符串所

            在的位置,字符串指針p是指向形參ss,再使用while循環語句對p進行控制來判斷字符串是否結

            束,在循環體中使用if條件語句來判斷位置i是否為奇數且p所指的當前字符是否為'a''z'

            字母,如果滿足這兩個條件,則把該小寫字母轉換成大寫字符,小寫字母與大寫字母的差是32,

            所以只小寫字母減去32,即可得到該字母的大寫字母,且轉換后的字母仍存放到原字符串的位

            置上,轉換結束后,最后通過形參ss返回已轉換后的字符串。

            參考答案:

            void fun( char *ss )

            {

            char *p = ss ;

            int i = 0 ;

            while(*p) {

            if((i % 2) && (*p >= 'a' && *p <= 'z')) *p -= 32 ;

            p++ ;

            i++ ;

            }

            return ss ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            66套:

            給定程序中,函數fun的功能是:將形參std所指結構體數組中年齡最大者的

            數據作為函數值返回,并在main函數中輸出。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            typedef struct

            { char name[10];

            int age;

            }STD;

            STD fun(STD std[], int n)

            { STD max; int i;

            /**********found**********/

            max= ___1___;

            for(i=1; i

            /**********found**********/

            if(max.age<___2___) max=std[i];

            return max;

            }

            main( )

            { STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };

            STD max;

            max=fun(std,5);

            printf("\nThe result: \n");

            /**********found**********/

            printf("\nName : %s, Age : %d\n", ___3___,max.age);

            }

            解題思路:

            本題是從結構體中找出年齡最大的記錄。

            第一處:給存放最大者max賦初值,所以應填:*std。

            第二處:當前最大者的年齡和結構中所有的年齡進行比較,所以應填:std[i].age。

            第三處:輸出最大者的姓名和年齡,所以應填:max.name。

            ***************************************************

            給定程序MODI1.C中函數 fun 的功能是:實現兩個整數的交換。

             

             

             

             

            例如給ab分別輸入:60 65,輸出為:a = 65 b = 60

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            /**********found**********/

            void fun ( int a, b )

            { int t;

            /**********found**********/

            t = b; b = a ; a = t;

            }

            main ( )

            { int a, b;

            printf ( "Enter a , b : "); scanf ( "%d,%d", &a, &b );

            fun ( &a , &b ) ;

            printf (" a = %d b = %d\n ", a, b );

            }

            解題思路:

            第一處:函數形參定義不正確,在定義第2個形參時,也應加上int。由于通過該函數實現

            兩數交換,在C語言中,必須交換地址中的值,所以應定義為int *a,int *b。

            第二處:要交換地址中的值,不能交換地址,必須指定地址中的值,因此應改為

            t=*b;*b=*a;*a=t;。

            ***************************************************

            請編一個函數void fun(int tt[M][N ], int pp[N]),tt指向一個MN列的

            二維數組,求出二維數組每列中最小元素,并依次放入pp所指一維數組中。二維

            數組中的數已在主函數中賦予。

            注意: 部分源程序存在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #define M 3

            #define N 4

            void fun ( int tt[M][N], int pp[N] )

            {

            }

            main( )

            { int t [ M ][ N ]={{22,45, 56,30},

            {19,33, 45,38},

            {20,22, 66,40}};

            int p [ N ], i, j, k;

            printf ( "The original data is : \n" );

            for( i=0; i

            for( j=0; j

            printf ( "m", t[i][j] );

            printf("\n");

            }

             

             

             

             

            fun ( t, p );

            printf( "\nThe result is:\n" );

            for ( k = 0; k < N; k++ ) printf ( " M ", p[ k ] );

            printf("\n");

            NONO( );

            }

             

            解題思路:

            本題是求出二維數組每列中最小元素,并依次放入pp所指一維數組中。

            參考答案:

            void fun ( int tt[M][N], int pp[N] )

            {

            int i,j, min, k ;

            for(i = 0 ; i < N ; i++) {

            min = tt[0][i] ; k = 0 ;

            for(j = 1 ; j < M ; j++)

            if(min > tt[j][i]) {

            \TAB min=tt[j][i] ;

            k = j ;

            }

            pp[i] = tt[k][i] ;

            }

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            67套:

            給定程序中,函數fun的功能是:調用隨機函數產生20個互不相同的整數放在

            形參a所指數組中(此數組在主函數中已置0)。

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 20

            void fun( int *a)

            { int i, x, n=0;

            x=rand() ;

             

             

             

             

            /**********found**********/

            while (n<__1__)

            { for(i=0; i

            /**********found**********/

            if( x==a[i] ) __2__;

            /**********found**********/

            if( i==__3__){ a[n]=x; n++; }

            x=rand() ;

            }

            }

            main()

            { int x[N]={0} ,i;

            fun( x );

            printf("The result : \n");

            for( i=0; i

            { printf("M",x[i]);

            if((i+1)%5==0)printf("\n");

            }

            printf("\n\n");

            }

            解題思路:

            第一處:一共產生20個隨機數,所以應填:N。

            第二處:要求產生不同的20個整數,所以采用for循環對已產生的隨機數進行比較,是否有

            相同數,如果有相同,則退出循環體,所以應填:break。

            第三處:當退出循環體還是進行判斷,in的值是否相等,如果相等,則表示該隨機整數

            不重復,可以存放到指定的數組中,所以應填:n。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是: 先從鍵盤上輸入一個33列矩陣的各

            個元素的值, 然后輸出主對角線元素之和。

            請改正函數fun中的錯誤或在橫線處填上適當的內容并把橫線刪除,使它能得

            出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            int fun()

            {

            int a[3][3],sum;

            int i,j;

            /*********found**********/

            ______;

            for (i=0;i<3;i++)

            { for (j=0;j<3;j++)

            /*********found**********/

            scanf("%d",a[i][j]);

            }

            for (i=0;i<3;i++)

            sum=sum+a[i][i];

             

             

             

             

            printf("Sum=%d\n",sum);

            }

            main()

            {

            fun();

            }

            解題思路:

            第一處:變量sum進行初始化,由于計算累加和,所以應為:sum=0;。

            第二處:讀入整型數,應使用地址讀入,所以應為:scanf("%d",&a[i][j]);。

            ***************************************************

            編寫程序, 實現矩陣(33列)的轉置(即行列互換)

            例如, 輸入下面的矩陣:

            100 200 300

            400 500 600

            700 800 900

            程序輸出:

            100 400 700

            200 500 800

            300 600 900

            注意: 部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容, 僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            int fun(int array[3][3])

            {

            }

            main()

            {

            int i,j;

            int array[3][3]={{100,200,300},

            {400,500,600},

            {700,800,900}};

            for (i=0;i<3;i++)

            { for (j=0;j<3;j++)

            printf("}",array[i][j]);

            printf("\n");

            }

            fun(array);

            printf("Converted array:\n");

            for (i=0;i<3;i++)

            { for (j=0;j<3;j++)

            printf("}",array[i][j]);

            printf("\n");

            }

            NONO();

            }

             

            解題思路:

            本題是解決矩陣的轉置問題。

            參考答案:

            int fun(int array[3][3])

            {

            int i,j,arr[3][3] ;

            memcpy(arr, array, 9*sizeof(int)) ;

            for(i = 0 ; i < 3 ; i++)

            for(j = 0 ; j < 3 ; j++)

            array[i][j] = arr[j][i] ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            68套:

            給定程序中,函數fun的功能是:ss所指字符串數組中長度最長的字符串所

            在的行下標,作為函數值返回,并把其串長放在形參n所指變量中。ss所指字符串

            數組中共有M個字符串,且串長。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define M 5

            #define N 20

            /**********found**********/

            int fun(char (*ss) ___1___, int *n)

            { int i, k=0, len=0;

            for(i=0; i

            { len=strlen(ss[i]);

            /**********found**********/

            if(i==0) *n=___2___;

            if(len>*n) {

            /**********found**********/

            ___3___;

            k=i;

             

             

             

             

            }

            }

            return(k);

            }

            main()

            { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};

            int n,k,i;

            printf("\nThe original strings are :\n");

            for(i=0;i

            k=fun(ss,&n);

            printf("\nThe length of longest string is : %d\n",n);

            printf("\nThe longest string is : %s\n",ss[k]);

            }

            解題思路:

            第一處:形參ss的定義,它是一個字符串數組的定義,其寬度為N,所以應填:N。

            第二處:取第一個字符串的長度賦值給變量*n,所以應填:len。

            第三處:每循環一次,判斷當前字符串的長度是否大于*n,如果大于,則*n=len。

            ***************************************************

            給定程序MODI1.C fun 函數的功能是: 根據形參m,計算如下公式的值。

            1 1 1 1

            t = 1 + ----- +----- + ----- + ……+ -----

            2 3 4 m

            例如,若輸入 5,則應輸出 2.283333。

            請改正程序中的錯誤或在下劃線處填上適當的內容并把下劃線刪除, 使它

            能計算出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            double fun( int m )

            {

            double t = 1.0;

            int i;

            for( i = 2; i <= m; i++ )

            /**********found**********/

            t += 1.0/k;

            /**********found**********/

            ________

            }

            main()

            {

            int m;

            printf( "\nPlease enter 1 integer number:" );

            scanf( "%d", &m );

            printf( "\nThe result is %lf\n", fun( m ) );

            }

            解題思路:

            第一處:在此變量k沒有定義過,再根據公式和for循環語句中所用的變量可知,這里的k

             

             

             

             

            實際上是i。

            第二處:應是返回公式的值,函數中公式的值是存放在臨時變量t中,所以應填return t;。

            ***************************************************

            編寫一個函數,該函數可以統計一個長度為2的字符串在另一個字符串中出現

            的次數。例如,假定輸入的字符串為: asd asasdfg asd as zx67 asd mklo,子字

            符串為:as,則應輸出6。

            注意:部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            int fun(char *str,char *substr)

            {

            }

            main()

            {

            char str[81],substr[3];

            int n;

            printf("輸入主字符串: ");

            gets(str);

            printf("輸入子字符串: ");

            gets(substr);

            puts(str);

            puts(substr);

            n=fun(str,substr);

            printf("n=%d\n",n);

            NONO();

            }

             

            解題思路:

            本題是統計一個字符串在另一個字符串中出現的次數。

            程序流程如下:

            1. 利用strstr函數,首先找到第一個出現的位置。

            2. 利用while循環和strstr依次查找所有出現的位置,并進行統計,并把統計結果作為函

            數值返回。

            strstr(const char *s1, const char *s2)是字符串s2s1中出現的位置,如果找到則返

            回位置指針。

            參考答案:

            int fun(char *str,char *substr)

            {

            int cnt = 0 ;

            char *p = str, *q ;

            while(*p) {

            q = strstr(p, substr) ;

            if(q == NULL) break;

            p = q + strlen(substr) ;

            cnt++ ;

            }

            return cnt ;

            }

            main()

            {

            char str[81],substr[3];

            int n;

            printf("輸入主字符串: ");

            gets(str);

            printf("輸入子字符串: ");

            gets(substr);

            puts(str);

            puts(substr);

            n=fun(str,substr);

            printf("n=%d\n",n);

            NONO();

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            69套:

            給定程序中,函數fun的功能是將ab所指的兩個字符串轉換成面值相同的整

            數,并進行相加作為函數值返回,規定字符串中只含9個以下數字字符。

            例如,主函數中輸入字符串:3248612345,在主函數中輸出的函數值為:

            44831。

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            #include

            #define N 9

            long ctod( char *s )

            { long d=0;

            while(*s)

            if(isdigit( *s)) {

            /**********found**********/

            d=d*10+*s-__1__;

            /**********found**********/

            __2__; }

            return d;

            }

            long fun( char *a, char *b )

            {

            /**********found**********/

            return __3__;

            }

            main()

             

             

             

             

            { char s1[N],s2[N];

            do

            { printf("Input string s1 : "); gets(s1); }

            while( strlen(s1)>N );

            do

            { printf("Input string s2 : "); gets(s2); }

            while( strlen(s2)>N );

            printf("The result is: %ld\n", fun(s1,s2) );

            }

            解題思路:

            第一處:數字字符與其對應的數值相差48,所以應填:48。

            第二處:到字符串下一個位置,所以應填:s++。

            第三處:返回兩個數字字符串經轉換成數值的和,所以應填:ctod(a)+ctod(b)。

            ***************************************************

            給定程序MODI1.C fun 函數的功能是:分別統計字符串中大寫字母和小寫

            字母的個數。

            例如, 給字符串 s 輸入:AAaaBBb123CCccccd,則應輸出結果:

            upper = 6, lower = 8。

            請改正程序中的錯誤,使它能計算出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            /**********found**********/

            void fun ( char *s, int a, int b )

            {

            while ( *s )

            { if ( *s >= 'A' && *s <= 'Z' )

            /**********found**********/

            *a=a+1 ;

            if ( *s >= 'a' && *s <= 'z' )

            /**********found**********/

            *b=b+1;

            s++;

            }

            }

            main( )

            { char s[100]; int upper = 0, lower = 0 ;

            printf( "\nPlease a string : " ); gets ( s );

            fun ( s, & upper, &lower );

            printf( "\n upper = %d lower = %d\n", upper, lower );

            }

            解題思路:

            第一處:在等式右邊應寫*a。

            第二處:在等式右邊應寫*b。

            ***************************************************

            請編一個函數fun,函數的功能是使實型數保留2位小數,并對第三位進行四

            舍五入 (規定實型數為正數)。

             

             

             

             

            例如:實型數為 1234.567, 則函數返回 1234.570000;

            實型數為 1234.564, 則函數返回 1234.560000。

            注意: 部分源程序存在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            float fun ( float h )

            {

            }

            main( )

            { float a;

            printf ("Enter a: "); scanf ( "%f", &a );

            printf ( "The original data is : " );

            printf ( "%f \n\n", a );

            printf ( "The result : %f\n", fun ( a ) );

            NONO( );

            }

             

            解題思路:

            本題主要是考察考生保留小數點后兩位數并對第三位進行四舍五入。方法是先把這個數乘

            100,然后再加0.5(實現四舍五入),再把這個數存放到一個長整型變量中,目的是把小數

            點后的小數去除,最后把這個數轉換成浮點型數除以100,即可得出所的結果。

            參考答案:

            float fun ( float h )

            {

            long w ;

            w = h * 100 + 0.5 ;

            return (float) w / 100 ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            70套:

            給定程序中,函數fun的功能是:計算形參x所指數組中N個數的平均值(規定

            所有數均為正數),作為函數值返回;并將大于平均值的數放在形參y所指數組中,

            在主函數中輸出。

            例如,有10個正數:46 30 32 40 6 17 45 15 48 26,平均值為:

            30.500000

            主函數中輸出:46 32 40 45 48

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 10

            double fun(double x[],double *y)

            { int i,j; double av;

            /**********found**********/

            av=__1__;

            /**********found**********/

            for(i=0; i

            for(i=j=0; i

            /**********found**********/

            if(x[i]>av) y[__3__]= x[i];

            y[j]=-1;

            return av;

             

             

             

             

            }

            main()

            { int i; double x[N],y[N];

            for(i=0; i4.0f ",x[i]);}

            printf("\n");

            printf("\nThe average is: %f\n",fun(x,y));

            for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]);

            printf("\n");

            }

            解題思路:

            第一處:計算平均值時,需對變量av進行初始化為0。

            第二處:利用for循環計算其平均值,所以應填:x[i]/N。

            第三處:把數組x中元素值大于平均值的數依次存放到形參y所指的數組中其中位置由變量j

            來控制,所以應填:j++。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:根據整型形參m,計算如下公式的值。

                 1          1          1             1

            y = ------- +    --------- +   --------- + …… + -------

                 100*100 200*200     300*300        m*m

            例如,若m = 2000,則應輸出: 0.000160。

            請改正程序中的語法錯誤,使它能計算出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            /************found************/

            fun ( int m )

            { double y = 0, d ;

            int i ;

            /************found************/

            for( i = 100, i <= m, i += 100 )

            { d = (double)i * (double)i ;

            y += 1.0 / d ;

            }

            return( y ) ;

            }

            main( )

            { int n = 2000 ;

            printf( "\nThe result is %lf\n", fun ( n ) ) ;

            }

            解題思路:

            第一處:由于計算的實型值要通過函數返回,所以必須定義函數的返回類型,只要intvoid

            可以省略,其他都要定義類型。由于返回是實型值,所以應在數名前加上double等定義。如果

            使用float則精度不夠,所以在這里不能使用float定義。

            第二處:在for循環中,兩個“;”不可省略,在此把“;”錯寫成“,”。

            ***************************************************

            已知學生的記錄由學號和學習成績構成,N名學生的數據已存入a結構體數組

            中。請編寫函數 fun,函數的功能是:找出成績最低的學生記錄,通過形參返回

             

             

             

             

            主函數(規定只有一個最低分)。

            注意: 部分源程序存在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            #define N 10

            typedef struct ss

            { char num[10]; int s; } STU;

            fun( STU a[], STU *s )

            {

            }

            main ( )

            { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

            {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;

            int i;

            printf("***** The original data *****\n");

            for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);

            fun ( a, &m );

            printf ("***** THE RESULT *****\n");

            printf ("The lowest : %s , %d\n",m.num, m.s);

            NONO( );

            }

            解題思路:

            本題考察學生在一組記錄中找出最低分。我們使用for循環語句來解決這個問題。

            參考答案:

             

            fun( STU a[], STU *s )

            {

             

             

             

             

            int i, min = a[0].s, j = 0;

            for(i = 1 ; i < N ; i++)

            if(min > a[i].s) { /* 如果最低分min仍大于當前分 */

            j = i ; /* 記住位置 */

            min = a[i].s ; /* 把當前分賦值給min */

            }

            *s = a[j] ;

            }

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩