![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
全國(guó)計(jì)算機(jī)二級(jí)C題庫(kù)第61--70套 |
本題目如果下載后發(fā)現(xiàn)有錯(cuò)誤的地方,請(qǐng)聯(lián)系網(wǎng)站管理員:QQ121431055 考試時(shí),上機(jī)題目有三套,基本操作題、簡(jiǎn)單應(yīng)用題、綜合應(yīng)用題
第61套: 函數(shù)fun的功能是進(jìn)行字母轉(zhuǎn)換。若形參ch中是小寫英文字母,則轉(zhuǎn)換成對(duì)應(yīng) 的大寫英文字母;若ch中是大寫英文字母,則轉(zhuǎn)換成對(duì)應(yīng)的小寫英文字母;若是 其它字符則保持不變;并將轉(zhuǎn)換后的結(jié)果作為函數(shù)值返回。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。
注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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是否是小寫字母,所以應(yīng)填:&&。 第二處:小寫字母與大寫字母的ASCII值相差為32,所以應(yīng)填:'A'或65。 第三處:返回處理后的形參ch,所以應(yīng)填:ch。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 給一維數(shù)組a輸入任意4個(gè)整數(shù), 并按 下例的規(guī)律輸出。例如輸入1、2、3、4, 程序運(yùn)行后將輸出以下方陣。 4 1 2 3 3 4 1 2 2 3 4 1 1 2 3 4 請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #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; m } } main() { int a[M]; fun(a); printf("\n\n"); } 解題思路: 第一處:在函數(shù)fun體中,a是一個(gè)整型數(shù)組,所以形參a應(yīng)定義為指針型整數(shù)變量。 第二處:變量書寫錯(cuò)誤,aa應(yīng)為a。 *************************************************** 請(qǐng)編寫一個(gè)函數(shù)fun, 它的功能是: 計(jì)算并輸出給定整數(shù)n的所有因子(不包括 1與n自身)之和。規(guī)定n的值不大于1000。 例如,在主函數(shù)中從鍵盤給n輸入的值為856, 則輸出為:sum=763。 注意:部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include int fun(int n) { } main() { int n,sum; printf("Input n: "); scanf("%d",&n); sum=fun(n); printf("sum=%d\n",sum); NONO(); }
解題思路: 本題是考察考生怎樣利用循環(huán)來(lái)求出一個(gè)數(shù)n的所有(除1和自身外)因子i并求出它們的和 s作為函數(shù)值返回。判斷因子的條件是:n % i == 0,(i是大于1且小于n中所有的正整數(shù))。 參考答案: int fun(int n) { int s = 0, i ; for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ; return s ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第62套: 給定程序中,函數(shù)fun的功能是:把形參s所指字符串中下標(biāo)為奇數(shù)的字符右 移到下一個(gè)奇數(shù)位置,最右邊被移出字符串的字符繞回放到第一個(gè)奇數(shù)位置,下 標(biāo)為偶數(shù)的字符不動(dòng)(注:字符串的長(zhǎng)度大于等于2)。例如,形參s所指的字符 串為:abcdefgh,執(zhí)行結(jié)果為:ahcbedgf。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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); } 解題思路: 第一處:首先判斷字符串的長(zhǎng)度是奇數(shù)還是偶數(shù),如果是奇數(shù),則k=n-1,所以應(yīng)填:1。 第二處:取字符串最后一個(gè)奇數(shù)位的字符,并由變量c保存,所以應(yīng)填:s[k]。 第三處:第1位奇數(shù)位用最一個(gè)奇數(shù)位字符替換,所以應(yīng)填:c。 *************************************************** 給定程序MODI1.C中 fun 函數(shù)的功能是:求 s = aa… aa - ... - aaa - aa - a (此處 aa… aa 表示 n 個(gè) a, a 和 n 的值在 1 至 9 之間) 例如 a = 3, n = 6, 則以上表達(dá)式為: s = 333333 - 33333 - 3333 - 333 - 33 - 3 其值是:296298 a 和 n 是 fun 函數(shù)的形參,表達(dá)式的值作為函數(shù)值傳回 main函數(shù)。 請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。 注意: 不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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 ) ); } 解題思路: 第一處:根據(jù)for循環(huán)計(jì)算t的值可知,變量t的初值不正確,應(yīng)為0。 第二處:每次循環(huán)都是取t除以10的值,而不是取余數(shù),所以應(yīng)改t=t/10;。 *************************************************** 請(qǐng)編寫一個(gè)函數(shù) void fun(char *tt, int pp[]),統(tǒng)計(jì)在tt所指字符串中 'a' 到 'z' 26個(gè)小寫字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。 例如,當(dāng)輸入字符串:abcdefgabcdeabc 后,程序的輸出結(jié)果應(yīng)該是: 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中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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 ( ) ; } 解題思路: 本題是考察考生在給定的字符串中統(tǒng)計(jì)出26個(gè)小寫字母的次數(shù)并存入到指定的數(shù)組中且由 形參返回。其中數(shù)組下標(biāo)的位置可以通過(guò)某一個(gè)字符的ASCII值減去97或直接減'a'也可以,就 可以得出該字符出現(xiàn)次數(shù)存放的位置。例如:字符為b,那么位置為'b'-'a'=1,就是實(shí)際存放 的位置。 參考答案: 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套: 給定程序中,函數(shù)fun的功能是:有N×N矩陣,根據(jù)給定的m(m<=N)值,將 每行元素中的值均右移m個(gè)位置,左邊置為0。例如,N=3,m=2,有下列矩陣
1 2 3 4 5 6 7 8 9 程序執(zhí)行結(jié)果為 0 0 1 0 0 4 0 0 7 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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循環(huán)變量的增量,所以應(yīng)填:i++。 第二處:由于右移m個(gè)位置,所以應(yīng)填:m。 第三處:左邊m列均置于0,所以for循環(huán)的終止值應(yīng)為m。
*************************************************** 給定程序MODI1.C中函數(shù) fun 的功能是:計(jì)算并輸出high以內(nèi)最大的10個(gè)素 數(shù)之和。high的值由主函數(shù)傳給fun函數(shù)。 若high的值為: 100, 則函數(shù)的值為: 732。 請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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)); } 解題思路: 第一處:括號(hào)沒(méi)有匹配。 Error: While statement missing ) in function fun 在函數(shù)fun中While語(yǔ)句缺少)。 第二處:缺少分號(hào)。 Error: Break statement missing ; in function fun 在函數(shù)fun中break語(yǔ)句缺少;。 這種題型只要通過(guò)編譯即可發(fā)現(xiàn)程序的錯(cuò)誤所在。 *************************************************** 編寫函數(shù)fun,它的功能是:利用以下所示的簡(jiǎn)單迭代方法求 方程:cos(x)-x=0 的一個(gè)實(shí)根。 迭代步驟如下: (1)取 x1 初值為0.0; (2)x0 = x1,把x1的值賦給 x0; (3)x1 = cos(x0),求出一個(gè)新的x1; (4)若x0 - x1的絕對(duì)值小于 0.000001,執(zhí)行步驟(5),否則執(zhí) 行步驟(2);
(5)所求x1就是方程 cos(x)-x=0 的一個(gè)實(shí)根,作為函數(shù)值返回。 程序?qū)⑤敵鼋Y(jié)果Root=0.739085。 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun 的花括號(hào)中填入你編寫的若干語(yǔ)句。 給定源程序: #include #include float fun() { } main() { printf("Root =%f\n", fun()); NONO(); } 解題思路: 本題是根據(jù)給定的公式及條件來(lái)計(jì)算方程的一個(gè)實(shí)根。 參考答案: float fun() { float x0, x1=0.0; do { x0=x1; x1=cos(x0); } while(fabs(x0-x1)>0.000001); return x1; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第64套: 給定程序中,函數(shù)fun的功能是:將a所指3×5矩陣中第k列的元素左移到第0 列,第k列以后的每列元素行依次左移,原來(lái)左邊的各列依次繞到右邊。 例如,有下列矩陣: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 若k為2,程序執(zhí)行結(jié)果為 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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; j } fun(x,2); printf("The array after moving:\n\n"); for(i=0; i { for(j=0; j }
} 解題思路: 第一處:外循環(huán)p的終止變量的值,試題要求第k列左移,所以應(yīng)填:k。 第二處:矩陣共N列,所以應(yīng)填:N-1。 第三處:把存放在臨時(shí)變量temp中的值,放到a[i][N-1]中,所以應(yīng)填:temp。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)形參m的值(2≤m≤9〕,在m行m 列的二維數(shù)組中存放如下所示規(guī)律的數(shù)據(jù),由main函數(shù)輸出。 例如,若輸入 2 | 若輸入 4 則輸出: | 則輸出: 1 2 | 1 2 3 4 2 4 | 2 4 6 8 | 3 6 9 12 | 4 8 12 16 請(qǐng)改正程序函數(shù)中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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" ) ; } } 解題思路: 第一處:在函數(shù)體fun中可知,a是一個(gè)字符串?dāng)?shù)組型變量,所以應(yīng)改為:fun(int a[][M], int m)。 第二處:根據(jù)輸出的結(jié)果可知,應(yīng)改為:a[j][k]=(k+1)*(j+1);。 *************************************************** 函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c 中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的十位和千位上,b中的 十位和個(gè)位數(shù)依次放在變量c的個(gè)位和百位上。 例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=5241。
注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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 參考答案: void fun(int a, int b, long *c) { *c=(a)*1000+(b)*100+(a/10)*10+(b/10); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第65套: 給定程序中,函數(shù)fun的功能是:將a所指4×3矩陣中第k行的元素與第0行元 素交換。 例如,有下列矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 若k為2,程序執(zhí)行結(jié)果為: 7 8 9 4 5 6 1 2 3 10 11 12 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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; j } fun(x,2); printf("The array after moving:\n\n"); for(i=0; i { for(j=0; j } } 解題思路: 第一處:變量k在函數(shù)體fun中已經(jīng)使用,所以應(yīng)填:k。 第二處:共N行,所以應(yīng)填:N。 第三處:變量值交換,所以應(yīng)填:a[k][i]。 *************************************************** 給定程序MODI1.C中函數(shù) fun 的功能是: 讀入一個(gè)字符串(長(zhǎng)度<20 ),將該 字符串中的所有字符按ASCII碼升序排序后輸出。 例如, 若輸入: edcba, 則應(yīng)輸出: abcde。 請(qǐng)改正程序中的錯(cuò)誤,使它能統(tǒng)計(jì)出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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循環(huán)的初始值應(yīng)是strlen(t)-1。 第二處:由于是按升序排序,所以應(yīng) if(t[j]>t[j+1])。 *************************************************** 請(qǐng)編寫一個(gè)函數(shù)fun, 其功能是: 將ss所指字符串中所有下標(biāo)為奇數(shù)位置上的 字母轉(zhuǎn)換為大寫(若該位置上不是字母, 則不轉(zhuǎn)換)。 例如, 若輸入"abc4EFg",則應(yīng)輸出"aBc4EFg"。 注意: 部分源程序在文件PROG1.C文件中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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(); } 解題思路: 本題是考察考生在字符串指定位置上的字母轉(zhuǎn)換為大寫。給出的程序是由i來(lái)控制字符串所 在的位置,字符串指針p是指向形參ss,再使用while循環(huán)語(yǔ)句對(duì)p進(jìn)行控制來(lái)判斷字符串是否結(jié) 束,在循環(huán)體中使用if條件語(yǔ)句來(lái)判斷位置i是否為奇數(shù)且p所指的當(dāng)前字符是否為'a'至'z'的 字母,如果滿足這兩個(gè)條件,則把該小寫字母轉(zhuǎn)換成大寫字符,小寫字母與大寫字母的差是32, 所以只小寫字母減去32,即可得到該字母的大寫字母,且轉(zhuǎn)換后的字母仍存放到原字符串的位 置上,轉(zhuǎn)換結(jié)束后,最后通過(guò)形參ss返回已轉(zhuǎn)換后的字符串。 參考答案: 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套: 給定程序中,函數(shù)fun的功能是:將形參std所指結(jié)構(gòu)體數(shù)組中年齡最大者的 數(shù)據(jù)作為函數(shù)值返回,并在main函數(shù)中輸出。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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); } 解題思路: 本題是從結(jié)構(gòu)體中找出年齡最大的記錄。 第一處:給存放最大者max賦初值,所以應(yīng)填:*std。 第二處:當(dāng)前最大者的年齡和結(jié)構(gòu)中所有的年齡進(jìn)行比較,所以應(yīng)填:std[i].age。 第三處:輸出最大者的姓名和年齡,所以應(yīng)填:max.name。 *************************************************** 給定程序MODI1.C中函數(shù) fun 的功能是:實(shí)現(xiàn)兩個(gè)整數(shù)的交換。
例如給a和b分別輸入:60 和 65,輸出為:a = 65 b = 60 請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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 ); } 解題思路: 第一處:函數(shù)形參定義不正確,在定義第2個(gè)形參時(shí),也應(yīng)加上int。由于通過(guò)該函數(shù)實(shí)現(xiàn) 兩數(shù)交換,在C語(yǔ)言中,必須交換地址中的值,所以應(yīng)定義為int *a,int *b。 第二處:要交換地址中的值,不能交換地址,必須指定地址中的值,因此應(yīng)改為 t=*b;*b=*a;*a=t;。 *************************************************** 請(qǐng)編一個(gè)函數(shù)void fun(int tt[M][N ], int pp[N]),tt指向一個(gè)M行N列的 二維數(shù)組,求出二維數(shù)組每列中最小元素,并依次放入pp所指一維數(shù)組中。二維 數(shù)組中的數(shù)已在主函數(shù)中賦予。 注意: 部分源程序存在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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( ); } 解題思路: 本題是求出二維數(shù)組每列中最小元素,并依次放入pp所指一維數(shù)組中。 參考答案: 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套: 給定程序中,函數(shù)fun的功能是:調(diào)用隨機(jī)函數(shù)產(chǎn)生20個(gè)互不相同的整數(shù)放在 形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置0)。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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"); } 解題思路: 第一處:一共產(chǎn)生20個(gè)隨機(jī)數(shù),所以應(yīng)填:N。 第二處:要求產(chǎn)生不同的20個(gè)整數(shù),所以采用for循環(huán)對(duì)已產(chǎn)生的隨機(jī)數(shù)進(jìn)行比較,是否有 相同數(shù),如果有相同,則退出循環(huán)體,所以應(yīng)填:break。 第三處:當(dāng)退出循環(huán)體還是進(jìn)行判斷,i和n的值是否相等,如果相等,則表示該隨機(jī)整數(shù) 不重復(fù),可以存放到指定的數(shù)組中,所以應(yīng)填:n。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 先從鍵盤上輸入一個(gè)3行3列矩陣的各 個(gè)元素的值, 然后輸出主對(duì)角線元素之和。 請(qǐng)改正函數(shù)fun中的錯(cuò)誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得 出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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進(jìn)行初始化,由于計(jì)算累加和,所以應(yīng)為:sum=0;。 第二處:讀入整型數(shù),應(yīng)使用地址讀入,所以應(yīng)為:scanf("%d",&a[i][j]);。 *************************************************** 編寫程序, 實(shí)現(xiàn)矩陣(3行3列)的轉(zhuǎn)置(即行列互換) 例如, 輸入下面的矩陣: 100 200 300 400 500 600 700 800 900 程序輸出: 100 400 700 200 500 800 300 600 900 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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(); }
解題思路: 本題是解決矩陣的轉(zhuǎn)置問(wèn)題。 參考答案: 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套: 給定程序中,函數(shù)fun的功能是:求ss所指字符串?dāng)?shù)組中長(zhǎng)度最長(zhǎng)的字符串所 在的行下標(biāo),作為函數(shù)值返回,并把其串長(zhǎng)放在形參n所指變量中。ss所指字符串 數(shù)組中共有M個(gè)字符串,且串長(zhǎng) 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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的定義,它是一個(gè)字符串?dāng)?shù)組的定義,其寬度為N,所以應(yīng)填:N。 第二處:取第一個(gè)字符串的長(zhǎng)度賦值給變量*n,所以應(yīng)填:len。 第三處:每循環(huán)一次,判斷當(dāng)前字符串的長(zhǎng)度是否大于*n,如果大于,則*n=len。 *************************************************** 給定程序MODI1.C中 fun 函數(shù)的功能是: 根據(jù)形參m,計(jì)算如下公式的值。 1 1 1 1 t = 1 + ----- +----- + ----- + ……+ ----- 2 3 例如,若輸入 5,則應(yīng)輸出 2.283333。 請(qǐng)改正程序中的錯(cuò)誤或在下劃線處填上適當(dāng)?shù)膬?nèi)容并把下劃線刪除, 使它 能計(jì)算出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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沒(méi)有定義過(guò),再根據(jù)公式和for循環(huán)語(yǔ)句中所用的變量可知,這里的k
實(shí)際上是i。 第二處:應(yīng)是返回公式的值,函數(shù)中公式的值是存放在臨時(shí)變量t中,所以應(yīng)填return t;。 *************************************************** 編寫一個(gè)函數(shù),該函數(shù)可以統(tǒng)計(jì)一個(gè)長(zhǎng)度為2的字符串在另一個(gè)字符串中出現(xiàn) 的次數(shù)。例如,假定輸入的字符串為: asd asasdfg asd as zx67 asd mklo,子字 符串為:as,則應(yīng)輸出6。 注意:部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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(); } 解題思路: 本題是統(tǒng)計(jì)一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)。 程序流程如下: 1. 利用strstr函數(shù),首先找到第一個(gè)出現(xiàn)的位置。 2. 利用while循環(huán)和strstr依次查找所有出現(xiàn)的位置,并進(jìn)行統(tǒng)計(jì),并把統(tǒng)計(jì)結(jié)果作為函 數(shù)值返回。 strstr(const char *s1, const char *s2)是字符串s2在s1中出現(xiàn)的位置,如果找到則返 回位置指針。 參考答案: 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套: 給定程序中,函數(shù)fun的功能是將a和b所指的兩個(gè)字符串轉(zhuǎn)換成面值相同的整 數(shù),并進(jìn)行相加作為函數(shù)值返回,規(guī)定字符串中只含9個(gè)以下數(shù)字字符。 例如,主函數(shù)中輸入字符串:32486和12345,在主函數(shù)中輸出的函數(shù)值為: 44831。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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) ); } 解題思路: 第一處:數(shù)字字符與其對(duì)應(yīng)的數(shù)值相差48,所以應(yīng)填:48。 第二處:到字符串下一個(gè)位置,所以應(yīng)填:s++。 第三處:返回兩個(gè)數(shù)字字符串經(jīng)轉(zhuǎn)換成數(shù)值的和,所以應(yīng)填:ctod(a)+ctod(b)。 *************************************************** 給定程序MODI1.C中 fun 函數(shù)的功能是:分別統(tǒng)計(jì)字符串中大寫字母和小寫 字母的個(gè)數(shù)。 例如, 給字符串 s 輸入:AAaaBBb123CCccccd,則應(yīng)輸出結(jié)果: upper = 6, lower = 8。 請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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 ); } 解題思路: 第一處:在等式右邊應(yīng)寫*a。 第二處:在等式右邊應(yīng)寫*b。 *************************************************** 請(qǐng)編一個(gè)函數(shù)fun,函數(shù)的功能是使實(shí)型數(shù)保留2位小數(shù),并對(duì)第三位進(jìn)行四 舍五入 (規(guī)定實(shí)型數(shù)為正數(shù))。
例如:實(shí)型數(shù)為 1234.567, 則函數(shù)返回 1234.570000; 實(shí)型數(shù)為 1234.564, 則函數(shù)返回 1234.560000。 注意: 部分源程序存在文件PROG1.C文件中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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( ); } 解題思路: 本題主要是考察考生保留小數(shù)點(diǎn)后兩位數(shù)并對(duì)第三位進(jìn)行四舍五入。方法是先把這個(gè)數(shù)乘 以100,然后再加0.5(實(shí)現(xiàn)四舍五入),再把這個(gè)數(shù)存放到一個(gè)長(zhǎng)整型變量中,目的是把小數(shù) 點(diǎn)后的小數(shù)去除,最后把這個(gè)數(shù)轉(zhuǎn)換成浮點(diǎn)型數(shù)除以100,即可得出所的結(jié)果。 參考答案: float fun ( float h ) { long w ; w = h * 100 + 0.5 ; return (float) w / 100 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第70套: 給定程序中,函數(shù)fun的功能是:計(jì)算形參x所指數(shù)組中N個(gè)數(shù)的平均值(規(guī)定 所有數(shù)均為正數(shù)),作為函數(shù)值返回;并將大于平均值的數(shù)放在形參y所指數(shù)組中, 在主函數(shù)中輸出。 例如,有10個(gè)正數(shù):46 30 32 40 6 17 45 15 48 26,平均值為: 30.500000 主函數(shù)中輸出:46 32 40 45 48 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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; i printf("\n"); printf("\nThe average is: %f\n",fun(x,y)); for(i=0; y[i]>=0; i++) printf("% printf("\n"); } 解題思路: 第一處:計(jì)算平均值時(shí),需對(duì)變量av進(jìn)行初始化為0。 第二處:利用for循環(huán)計(jì)算其平均值,所以應(yīng)填:x[i]/N。 第三處:把數(shù)組x中元素值大于平均值的數(shù)依次存放到形參y所指的數(shù)組中其中位置由變量j 來(lái)控制,所以應(yīng)填:j++。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。 1 1 1 1 y = ------- + --------- + --------- + …… + ------- 100*100 200*200 300* 例如,若m = 2000,則應(yīng)輸出: 0.000160。 請(qǐng)改正程序中的語(yǔ)法錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #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 ) ) ; } 解題思路: 第一處:由于計(jì)算的實(shí)型值要通過(guò)函數(shù)返回,所以必須定義函數(shù)的返回類型,只要int或void 可以省略,其他都要定義類型。由于返回是實(shí)型值,所以應(yīng)在數(shù)名前加上double等定義。如果 使用float則精度不夠,所以在這里不能使用float定義。 第二處:在for循環(huán)中,兩個(gè)“;”不可省略,在此把“;”錯(cuò)寫成“,”。 *************************************************** 已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組 中。請(qǐng)編寫函數(shù) fun,函數(shù)的功能是:找出成績(jī)最低的學(xué)生記錄,通過(guò)形參返回
主函數(shù)(規(guī)定只有一個(gè)最低分)。 注意: 部分源程序存在文件PROG1.C文件中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #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( ); } 解題思路: 本題考察學(xué)生在一組記錄中找出最低分。我們使用for循環(huán)語(yǔ)句來(lái)解決這個(gè)問(wèn)題。 參考答案: 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仍大于當(dāng)前分 */ j = i ; /* 記住位置 */ min = a[i].s ; /* 把當(dāng)前分賦值給min */ } *s = a[j] ; } |