![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
全國計(jì)算機(jī)二級C題庫第81--90套 |
本題目如果下載后發(fā)現(xiàn)有錯(cuò)誤的地方,請聯(lián)系網(wǎng)站管理員:QQ121431055
考試時(shí),上機(jī)操作題目有三套,基本操作題、簡單應(yīng)用題、綜合應(yīng)用題
第81套: 給定程序中,函數(shù)fun的功能是:在形參s所指字符串中的每個(gè)數(shù)字字符之后 插入一個(gè)*號。例如,形參s所指的字符串為:def35adh3kjsdf7。執(zhí)行結(jié)果為: def3*5*adh3*kjsdf7*。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include void fun(char *s) { int i, j, n; for(i=0; s[i]!='\0'; i++)
/**********found**********/ if(s[i]>='0' ___1___ s[i]<='9') { n=0; /**********found**********/ while(s[i+1+n]!= ___2___) n++; for(j=i+n+1; j>i; j--) /**********found**********/ s[j+1]= ___3___; s[j+1]='*'; i=i+1; } } main() { char s[80]="ba printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); } 解題思路: 第一處:判斷是數(shù)字,應(yīng)該使用“與”,所以應(yīng)填:&&。 第二處:判斷字符串是否是字符串結(jié)束符,所以應(yīng)填:'\0'。 第三處:如果當(dāng)前字符是數(shù)字字符,則把當(dāng)前字符以后的所有字符往后一個(gè)位置,所以應(yīng) 填:s[j]。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。 1 1 1 1 y = 1 + ----- + ----- + ----- + …… + ----- 2*2 3*3 4* 例如,若 m 中的值為: 5,則應(yīng)輸出:1.463611。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意: 不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include double fun ( int m ) { double y = 1.0 ; int i; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y += 1 / (i * i) ; return( y ) ; } main( ) { int n = 5 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; } 解題思路:
第一處:使用for循環(huán)計(jì)算公式,必須計(jì)算到m,所以應(yīng)改為for(i=2; i<=m; i++)。 第二處:在除法運(yùn)算中,如果除數(shù)和被除數(shù)都是整數(shù),所以所除結(jié)果也是整數(shù),因此應(yīng)改 為y+=1./(i*i)。 *************************************************** 請編寫函數(shù)fun, 函數(shù)的功能是:實(shí)現(xiàn)B=A+A', 即把矩陣A加上A的轉(zhuǎn)置, 存放 在矩陣B中。計(jì)算結(jié)果在 main 函數(shù)中輸出。 例如,輸入下面的矩陣: 其轉(zhuǎn)置矩陣為: 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9 程序輸出: 2 6 10 6 10 14 10 14 18 注意: 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include void fun ( int a[3][3], int b[3][3]) { } main( ) /* 主程序 */ { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ; int i, j ; fun(a, t) ; for (i = 0 ; i < 3 ; i++) { for (j = 0 ; j < 3 ; j++) printf("}", t[i][j]) ; printf("\n") ; } NONO () ; } 解題思路: 本題考察考生如何實(shí)現(xiàn)矩陣的轉(zhuǎn)置,然后執(zhí)行兩個(gè)矩陣中的元素值相加生成一個(gè)新的矩陣。 矩陣轉(zhuǎn)置實(shí)現(xiàn)上就是原行元素值變?yōu)榱性刂,原列元素值變(yōu)樾性刂怠?/SPAN> 參考答案: void fun ( int a[3][3], int b[3][3]) { int c[3][3] ; int i, j ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < 3 ; j++) { c[i][j] = a[j][i] ; /* 矩陣的轉(zhuǎn)置 */ b[i][j] = a[i][j] + c[i][j] ; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第82套: 給定程序中,函數(shù)fun的功能是:找出100~999之間(含100和999)所有整數(shù) 中各位上數(shù)字之和為x(x為一正整數(shù))的整數(shù),然后輸出;符合條件的整數(shù)個(gè)數(shù)作 為函數(shù)值返回。 例如,當(dāng)x值為5時(shí),100~999之間各位上數(shù)字之和為5的整數(shù)有:104、113、 122、131、140、203、212、221、230、302、311、320、401、410、500。共有15 個(gè)。當(dāng)x值為27時(shí),各位數(shù)字之和為27的整數(shù)是:999。只有1個(gè)。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include fun(int x) { int n, s1, s2, s3, t; n=0; t=100; /**********found**********/ while(t<=__1__){ /**********found**********/ s1=t; s2=(__2__); s3=t/100; /**********found**********/ if(s1+s2+s3==__3__) { printf("%d ",t); n++; } t++; } return n; } main() { int x=-1; while(x<0) { printf("Please input(x>0): "); scanf("%d",&x); } printf("\nThe result is: %d\n",fun(x)); } 解題思路: 第一處:使用while循環(huán)找出100~999之間所有整數(shù),所以應(yīng)填:999。 第二處:s2是求十位數(shù)字,所以應(yīng)填:t/10。 第三處:各位數(shù)字之和為x,所以應(yīng)填:x。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中偶數(shù)位 上的數(shù),依次構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。 例如,當(dāng)s中的數(shù)為:7654321時(shí),t中的數(shù)為:642。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include /************found************/ void fun (long s, long t) { long sl=10; s /= 10; *t = s % 10; /************found************/ while ( s < 0) { s = s/100; *t = s*sl + *t; sl = sl * 10; } } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); } 解題思路: 第一處:在函數(shù)fun體中,t是一個(gè)指針型變量,因此定義形參時(shí)也應(yīng)定義指針。 第二處:條件應(yīng)該s>0,所以應(yīng)改為:while(s>0)。 *************************************************** 學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組 s中,請編寫函數(shù)fun,它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。 注意: 部分源程序在文件PROG1.C文件中。 請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #define N 16 typedef struct { char num[10]; int s; } STREC; int fun( STREC a[] ) { } main() { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, \TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, \TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, \TAB \TAB {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; int i;FILE *out ; fun( s );
printf("The data after sorted :\n"); for(i=0;i { if( (i)%4==0 )printf("\n"); printf("%s M ",s[i].num,s[i].s); } printf("\n"); out = fopen("c:\\test\\out.dat","w") ; for(i=0;i { if( (i)%4==0 && i) fprintf(out, "\n"); fprintf(out, "M ",s[i].s); } fprintf(out,"\n"); fclose(out) ; } 解題思路: 本題是按結(jié)構(gòu)體中成績s進(jìn)行降序排列,其結(jié)果仍存入當(dāng)前結(jié)構(gòu)體中。 參考答案: #include #define N 16 typedef struct { char num[10]; int s; } STREC; int fun( STREC a[] ) { STREC tmp; int i,j; for(i = 0; i < N; i++) for(j = i+1; j < N; j++) if(a[i].s < a[j].s) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第83套: 給定程序中,函數(shù)fun的功能是:找出100至x(x≤999)之間各位上的數(shù)字之 和為15的所有整數(shù),然后輸出;符合條件的整數(shù)個(gè)數(shù)作為函數(shù)值返回。 例如,當(dāng)n值為500時(shí),各位數(shù)字之和為15的整數(shù)有:159、168、177、186、 195、249、258、267、276、285、294、339、348、357、366、375、384、393、 429、438、447、456、465、474、483、492。共有26個(gè)。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while(t<=__2__) { s1=t; s2=(t/10); s3=t/100; if(s1+s2+s3==15) { printf("%d ",t); n++; } /**********found**********/ __3__; } return n; } main() { int x=-1; while(x>999||x<0) { printf("Please input(0 printf("\nThe result is: %d\n",fun(x)); } 解題思路: 第一處:符合條件的整數(shù)個(gè)數(shù)n,必須進(jìn)行初始化,所以應(yīng)填:0。
第二處:找出x≤999,所以應(yīng)填:x。 第三處:循環(huán)控制變量t每循環(huán)一次t要加1,所以應(yīng)填:t++。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放 到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串的后面。 例如:當(dāng)s所指的字符串為:"ABCDE"時(shí), 則t所指的字符串應(yīng)為:"EDCBAABCDE"。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include void fun (char *s, char *t) { /************found************/ int i; sl = strlen(s); for (i=0; i /************found************/ t[i] = s[sl-i]; for (i=0; i \TAB t[sl+i] = s[i]; t[2*sl] = '\0'; } main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 解題思路: 第一處:變量sl沒有定義。 第二處:在C語言中,字符串開始位置從0開始的,所以應(yīng)改為:t[i] = s[sl-i-1];。 *************************************************** 函數(shù)fun的功能是: 將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在 c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中 的十位和個(gè)位數(shù)依次放在變量c的千位和十位上。 例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=1425。 注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。 請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include void fun(int a, int b, long *c) { } main() /* 主函數(shù) */
{ 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=(b/10)*1000+(a/10)*100+(b)*10+(a); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第84套: 函數(shù)fun的功能是:從三個(gè)形參a,b,c中找出中間的那個(gè)數(shù),作為函數(shù)值返 回。 例如,當(dāng)a=3, b=5, c=4時(shí),中數(shù)為4。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include int fun(int a, int b, int c) { int t; /**********found**********/ t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___)); return t; } main() { int a1=3, a2=5, a3=4, r; r = fun(a1, a2, a3); printf("\nThe middle number is : %d\n", r); } 解題思路: 第一處:給三個(gè)數(shù)進(jìn)行比較大小,所以應(yīng)填:a。 第二處:給三個(gè)數(shù)進(jìn)行比較大小,所以應(yīng)填:a。 第三處:給三個(gè)數(shù)進(jìn)行比較大小,所以應(yīng)填:b。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 首先將大寫字母轉(zhuǎn)換為對應(yīng)小寫字母; 若小寫字母為a~u,則將其轉(zhuǎn)換為其后的第5個(gè)字母;若小寫字母為v~z, 使其值減 21。轉(zhuǎn)換后的小寫字母作為函數(shù)值返回。例如,若形參是字母A,則轉(zhuǎn)換為小寫字母 f; 若形參是字母W,則轉(zhuǎn)換為小寫字母b。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include char fun(char c) { if( c>='A' && c<='Z') /**************found**************/ C=C+32;
if(c>='a' && c<='u') /**************found**************/ c=c-5; else if(c>='v'&&c<='z') c=c-21; return c; } main() { char c1,c2; printf("\nEnter a letter(A-Z): "); c1=getchar(); if( isupper( c1 ) ) { c2=fun(c1); printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2); } else printf("\nEnter (A-Z)!\n"); } 解題思路: 第一處:變量c錯(cuò)寫成大寫C了。 第二處:要求轉(zhuǎn)換為其后的第5個(gè)字母,所以應(yīng)改為:c=c+5;。 *************************************************** 請編寫函數(shù)fun, 其功能是: 計(jì)算并輸出 例如, 在主函數(shù)中從鍵盤給n輸入20后,輸出為:s=534.188884。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include double fun(int n) { } main() { int n; double s; printf("\n\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); NONO(); } 解題思路: 本題是根據(jù)公式計(jì)算多項(xiàng)式的值。注意變量的取值范圍。 參考答案: double fun(int n) { int i; double fac=1.0; double sum=1.0; for(i=2;i<=n;i++) { fac+=sqrt(i); sum+=fac; } return sum; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第85套: 給定程序的功能是調(diào)用fun函數(shù)建立班級通訊錄。通訊錄中記錄每位學(xué)生的 編號、姓名和電話號碼。班級的人數(shù)和學(xué)生的信息從鍵盤讀入,每個(gè)人的信息作 為一個(gè)數(shù)據(jù)塊寫到名為myfile5.dat的二進(jìn)制文件中。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)
果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include #define N 5 typedef struct { int num; char name[10]; char tel[10]; }STYPE; void check(); /**********found**********/ int fun(___1___ *std) { /**********found**********/ ___2___ *fp; int i; if((fp=fopen("myfile5.dat","wb"))==NULL) return(0); printf("\nOutput data to file !\n"); for(i=0; i /**********found**********/ fwrite(&std[i], sizeof(STYPE), 1, ___3___); fclose(fp); return (1); } main() { STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"}, {1,"ddddd","444444"},{1,"eeeee","555555"}}; int k; k=fun(s); if (k==1) { printf("Succeed!"); check(); } else printf("Fail!"); } void check() { FILE *fp; int i; STYPE s[10]; if((fp=fopen("myfile5.dat","rb"))==NULL) { printf("Fail !!\n"); exit(0); } printf("\nRead file and output to screen :\n"); printf("\n num name tel\n"); for(i=0; i { fread(&s[i],sizeof(STYPE),1, fp); printf("m %s %s\n",s[i].num,s[i].name,s[i].tel);
} fclose(fp); } 解題思路: 本題是要求把指定的學(xué)生記錄輸出到指定的文件中。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容, 使程序能運(yùn)行出正確的結(jié)果。 第一處:結(jié)構(gòu)定義自變量,因此應(yīng)填寫STYPE。 第二處:在所填行的下面一行,使用fopen來創(chuàng)建一個(gè)二進(jìn)制文件,但文件流的變量名fp 已經(jīng)給出,這樣,此處只能填寫FILE。 每三處:fwrite是把變量中的內(nèi)容寫入指定文件中,再根據(jù)fwrite參數(shù)的使用要求,所以 只能填寫文件流變量fp。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:先將在字符串s中的字符按正序存放 到t串中,然后把s中的字符按逆序連接到t串的后面。 例如:當(dāng)s中的字符串為:"ABCDE"時(shí), 則t中的字符串應(yīng)為:"ABCDEEDCBA"。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include void fun (char *s, char *t) { int i, sl; sl = strlen(s); /************found************/ for( i=0; i<=s1; i ++) t[i] = s[i]; for (i=0; i \TAB t[sl+i] = s[sl-i-1]; /************found************/ t[sl] = '\0'; } main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 解題思路: 第一處:變量sl錯(cuò)寫成了s1。 第二處:新串t的字符串結(jié)束位置不正確,應(yīng)該是兩倍的sl距離。 *************************************************** 函數(shù)fun的功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。 合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的千位和十位上, b數(shù)的十位 和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。 例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=4152。 注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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: %d\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/10)*1000+(b/10)*100+(a)*10+(b); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第86套: 甲乙丙丁四人同時(shí)開始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次, 丙 每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函數(shù)fun的功能是根據(jù)形參 提供的值,求出總共聽到多少次鞭炮聲作為函數(shù)值返回。注意,當(dāng)幾個(gè)鞭炮同時(shí) 炸響,只算一次響聲,第一次響聲是在第0秒。 例如,若t1=7,t2=5,t3=6,t4=4,n=10,則總共可聽到28次鞭炮聲。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include /**********found**********/ #define OK(i, t, n) ((___1___%t==0) && (i/t int fun(int t1, int t2, int t3, int t4, int n) { int count, t , maxt=t1; if (maxt < t2) maxt = t2; if (maxt < t3) maxt = t3; if (maxt < t4) maxt = t4; count=1; /* 給count賦初值 */ /**********found**********/ for(t=1; t< maxt*(n-1); ___2___) { if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) ) count++; } /**********found**********/ return ___3___; } main() { int t1=7, t2=5, t3=6, t4=4, n=10, r; r = fun(t1, t2, t3, t4, n); printf("The sound : %d\n", r); }
解題思路: 第一處:根據(jù)定義的要求,所以應(yīng)填:i。 第二處:for循環(huán)語句的增量,所以應(yīng)填:t++。 第三處:返回統(tǒng)計(jì)次數(shù),所以應(yīng)填:count。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 根據(jù)輸入的三個(gè)邊長(整型值), 判斷 能否構(gòu)成三角形; 構(gòu)成的是等邊三角形, 還是等腰三角形。若能構(gòu)成等邊三角形 函數(shù)返回3,若能構(gòu)成等腰三角形函數(shù)返回2, 若能構(gòu)成一般三角形函數(shù)返回1, 若 不能構(gòu)成三角形函數(shù)返回0。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include /**************found**************/ void fun(int a,int b,int c) { if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c) return 3; else if(a==b||b==c||a==c) return 2; /**************found**************/ else retrun 1 } else return 0; } main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape =fun(a,b,c); printf("\n\nThe shape : %d\n",shape); } 解題思路: 第一處:函數(shù)有返回值,不能定義為void,所以應(yīng)改為:int fun(int a,int b,int c)。 第二處:語句后缺少分號。 *************************************************** 請編寫函數(shù)fun, 其功能是: 計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根 之和。 例如, 在主函數(shù)中從鍵盤給n輸入100后,輸出為: sum=148.874270。 注意: 要求n的值大于2但不大于100。 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include
double fun(int n) { } main() { int n; double sum; printf("\n\nInput n: "); scanf("%d",&n); sum=fun(n); printf("\n\nsum=%f\n\n",sum); NONO(); } 解題思路: 本題是計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根之和。 參考答案: double fun(int n) { int i,j=0; double s=0; for (i=3; i<=n; i++) { for (j=2; j if (i%j == 0) break; if (j == i) s=s+sqrt(i); } return s; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第87套: 函數(shù)fun的功能是:統(tǒng)計(jì)長整數(shù)n的各個(gè)位上出現(xiàn)數(shù)字1、2、3的次數(shù),并通過 外部(全局)變量c1,c2,c3返回主函數(shù)。例如:當(dāng)n=123114350時(shí),結(jié)果應(yīng)該為: c1= 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include int c1,c2,c3; void fun(long n) { c1 = c2 = c3 = 0; while (n) { /**********found**********/ switch(___1___) { /**********found**********/ case 1: c1++;___2___; /**********found**********/ case 2: c2++;___3___; case 3: c3++; } n /= 10; } } main() { long n= fun(n); printf("\nThe result :\n"); printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3); } 解題思路: 第一處:取個(gè)位數(shù)上的數(shù),所以n就可以得到個(gè)位數(shù)。 第二處:switch條件判斷中,滿足條件做好后,必須使用break語句跳出選擇體,所以應(yīng)填: break。
第三處:同第二處。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 統(tǒng)計(jì)一個(gè)無符號整數(shù)中各位數(shù)字值為 零的個(gè)數(shù), 通過形參傳回主函數(shù);并把該整數(shù)中各位上最大的數(shù)字值作為函數(shù)值 返回。例如, 若輸入無符號整數(shù)30800, 則數(shù)字值為零的個(gè)數(shù)為3, 各位上數(shù)字值 最大的是8。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n; /**************found**************/ if(t=0) count++; if(max n=n/10; }while(n); /**************found**************/ zero=count; return max; } main() { unsigned n; int zero,max; printf("\nInput n(unsigned): "); scanf("%d",&n); max = fun( n,&zero ); printf("\nThe result: max=%d zero=%d\n",max,zero); } 解題思路: 第一處:條件相等符號為==。 第二處:由于zero是一個(gè)指針型變量,所以給它進(jìn)行賦值時(shí)應(yīng)帶指針,因此應(yīng)改為: *zero=count;。 *************************************************** 請編寫函數(shù)fun, 其功能是: 計(jì)算并輸出下列多項(xiàng)式的值: 1 1 1 S = 1 + ── + ─── + … + ───── 1*2 1*2*3 1*2*3*…50 例如, 在主函數(shù)中從鍵盤給n輸入50后,輸出為:s=1.718282。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include double fun(int n)
{ } main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); NONO(); } 解題思路: 本題是根據(jù)公式計(jì)算多項(xiàng)式的值。注意變量的取值范圍。 參考答案: double fun(int n) { double s=0, t=1; int i ; for(i=1; i<=n; i++) { t *= i; s += 1./t; } return s; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第88套: 函數(shù)fun的功能是:把形參a所指數(shù)組中的最大值放在a[0]中,接著求出a所 指數(shù)組中的最小值放在a[1]中;再把a所指數(shù)組元素中的次大值放在a[2]中,把 a數(shù)組元素中的次小值放在a[3]中;其余以此類推。例如:若a所指數(shù)組中的數(shù)據(jù) 最初排列為:1、4、2、3、9、6、5、8、7,則按規(guī)則移動(dòng)后,數(shù)據(jù)排列為: 9、1、8、2、7、3、6、4、5。形參n中存放a所指數(shù)組中數(shù)據(jù)的個(gè)數(shù)。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 9 /**********found**********/ void fun(int ___1___, int n) { int i, j, max, min, px, pn, t; /**********found**********/ for (i=0; i { max = min = a[i]; px = pn = i; /**********found**********/ for (j=___3___; j { if (max < a[j]) { max = a[j]; px = j; } if (min > a[j]) { min = a[j]; pn = j; } } if (px != i) { t = a[i]; a[i] = max; a[px] = t; if (pn == i) pn= px; } if (pn != i+1) { t = a[i+1]; a[i+1] = min; a[pn] = t; } } } main() { int b[N]={1,4,2,3,9,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i } 解題思路: 第一處:形參a應(yīng)定義指針整型變量,所以應(yīng)填:*a。 第二處:外for循環(huán)每次增量應(yīng)該加2。 第三處:內(nèi)for循環(huán)的初始值應(yīng)為:i+1。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:按順序給s所指數(shù)組中的元素賦予從2 開始的偶數(shù),然后再按順序?qū)γ课鍌(gè)元素求一個(gè)平均值,并將這些值依次存放在 w所指的數(shù)組中。若s所指數(shù)組中元素的個(gè)數(shù)不是5的倍數(shù),多余部分忽略不計(jì)。 例如,s所指數(shù)組有14個(gè)元素,則只對前10個(gè)元素進(jìn)行處理,不對最后的4個(gè) 元素求平均值。 請改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。 給定源程序: #include #define SIZE 20 fun(double *s, double *w) { int k,i; double sum; for(k=2,i=0;i { s[i]=k; k+=2; } /**********found**********/ sun=0.0; for(k=0,i=0;i { sum+=s[i]; /**********found**********/ if(i+1%5==0) { w[k]=sum/5; sum=0; k++; } } return k; } main( ) { double a[SIZE],b[SIZE/5]; int i, k; k = fun(a,b); printf("The original data:\n"); for(i=0; i { if(i%5==0) printf("\n"); printf("% } printf("\n\nThe result :\n"); for(i=0; i printf("\n\n");
} 解題思路: 第一處:變量名書寫錯(cuò)誤,應(yīng)為sum。 第二處:由于%的優(yōu)先級比+優(yōu)先,所以必須加上括號,因此改為:if((i+1)%5==0)。 *************************************************** 學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組 s中,請編寫函數(shù)fun,它的功能是:把低于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中, 低于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。 注意: 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #define N 8 typedef struct { char num[10]; double s; } STREC; double fun( STREC *a, STREC *b, int *n ) { } main() { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85}, {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}}; STREC h[N],t;FILE *out ; int i,j,n; double ave; ave=fun( s,h,&n ); printf("The %d student data which is lower than % for(i=0;i printf("%s % printf("\n"); out = fopen("c:\\test\\out.dat","w") ; fprintf(out, "%d\n% for(i=0;i for(j=i+1;j if(h[i].s>h[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;} for(i=0;i fprintf(out,"% fclose(out); } 解題思路: 本題是利用循環(huán)計(jì)算出記錄結(jié)構(gòu)中學(xué)生成績的平均值,再把低于平均值的記錄存放到b所指 的數(shù)組中。具體操作請看答案程序中的說明。 參考答案: #include #define N 8 typedef struct
{ char num[10]; double s; } STREC; double fun( STREC *a, STREC *b, int *n ) { int i ; double ave = 0.0 ; *n = 0 ; for(i = 0 ; i < N ; i++) ave = ave + a[i].s ; ave /= N ; /* 計(jì)算平均值 */ for(i = 0 ; i < N ; i++) if(a[i].s < ave) { /* 把低于平均值的記錄存放到b所指的數(shù)組中 */ b[*n]=a[i] ; (*n)++; /* 人數(shù)加1 */ } return ave ; /* 返回平均值 */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第89套: 給定程序中,函數(shù)fun的功能是:求出形參ss所指字符串?dāng)?shù)組中最長字符串的 長度,其余字符串左邊用字符*補(bǔ)齊,使其與最長的字符串等長。字符串?dāng)?shù)組中共 有M個(gè)字符串,且串長 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include
#include #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, k=0, n, m, len; for(i=0; i { len=strlen(ss[i]); if(i==0) n=len; if(len>n) { /**********found**********/ n=len; ___1___=i; } } for(i=0; i if (i!=k) { m=n; len=strlen(ss[i]); /**********found**********/ for(j=___2___; j>=0; j--) ss[i][m--]=ss[i][j]; for(j=0; j /**********found**********/ ___3___='*'; } } main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int i; printf("\nThe original strings are :\n"); for(i=0; i printf("\n"); fun(ss); printf("\nThe result:\n"); for(i=0; i } 解題思路: 第一處:使用變量k來保存第幾個(gè)字符串是最長的字符串,所以應(yīng)填:k。 第二處:利用for循環(huán)把原字符串右移至最右邊存放,字符串的長為len,所以應(yīng)填:len。 第三處:左邊用字符*補(bǔ)齊,所以應(yīng)填:ss[i][j]。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 計(jì)算整數(shù)n的階乘。請改正程序中的錯(cuò) 誤或在下劃線處填上適當(dāng)?shù)膬?nèi)容并把下劃線刪除,使它能計(jì)算出正確的結(jié)果。 注意: 不要改動(dòng) main 函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include double fun(int n) {
double result=1.0; while (n>1 && n<170) /*********found*********/ result*=--n; /*********found*********/ return _____; } main() { int n; printf("Enter an integer: "); scanf("%d",&n); printf("\n\n%d!=%lg\n\n",n,fun(n)); } 解題思路: 第一處:--n是先減1,n--是后減1。本題應(yīng)該先乘以n,再減1,才正確。 第二處:返回計(jì)算結(jié)果,所以應(yīng)填:result。 *************************************************** 編寫函數(shù)fun,函數(shù)的功能是: 從s所指的字符串中刪除給定的字符。同一字 母的大、小寫按不同字符處理。 若程序執(zhí)行時(shí)輸入字符串為: turbo c and borland c++ 從鍵盤上輸入字符:n, 則輸出后變?yōu)?/SPAN>: turbo c ad borlad c++ 如果輸入的字符在字符串中不存在, 則字符串照原樣輸出。 注意: 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include int fun(char s[],char c) { } main() { static char str[]="turbo c and borland c++"; char ch; printf("原始字符串:%s\n", str); printf("輸入一個(gè)字符:"); scanf("%c",&ch); fun(str,ch); printf("str[]=%s\n",str); NONO(); } 解題思路: 本題是考察考生怎樣在字符串中刪除指定的字符,結(jié)果仍存放在原字符串中。給出的程序 是引用字符串指針p和while循環(huán)語句以及if條件判斷語句進(jìn)行處理的,新字符串的位置是由i 來控制的,循環(huán)結(jié)束后,再給新字符串置字符串結(jié)束符,最后產(chǎn)生的新字符串形參s返回到主程 序中。 參考答案: int fun(char s[],char c) { char *p = s ; int i = 0 ; while(*p) { if(*p != c) s[i++] = *p ; p++ ; } s[i] = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第90套: 函數(shù)fun的功能是:統(tǒng)計(jì)所有小于等于n(n>2)的素?cái)?shù)的個(gè)數(shù),素?cái)?shù)的個(gè)數(shù)作 為函數(shù)值返回。 請?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include int fun(int n) { int i,j, count=0; printf("\nThe prime number between 3 to %d\n", n); for (i=3; i<=n; i++) { /**********found**********/ for (___1___; j /**********found**********/ if (___2___%j == 0) break; /**********found**********/ if (___3___>=i) { count++; printf( count? "]":"\n]",i); } } return count; } main() { int n=20, r; r = fun(n); printf("\nThe number of prime is : %d\n", r); } 解題思路: 第一處:素?cái)?shù)的條件是除1和其本身外不能整除該數(shù),所以應(yīng)填:2。 第二處:判斷i是否素?cái)?shù),所以應(yīng)填:i。 第三處:如果內(nèi)循環(huán)for中所有數(shù)都不能整除i,那么i是素?cái)?shù)且j大于等于i,所以應(yīng)填:j。 *************************************************** 數(shù)列中,第一項(xiàng)值為3, 后一項(xiàng)都比前一項(xiàng)的值增5;給定程序MODI1.C中函數(shù) fun的功能是: 計(jì)算前n(4 加值放入數(shù)組中, 符合此條件的累加值的個(gè)數(shù)作為函數(shù)值返回主函數(shù)。 例如, 當(dāng)n的值為20時(shí),該數(shù)列為3,8,13,18,23,28,……,93,98。符合此條件 的累加值應(yīng)為42,126,366,570,1010。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 20 int fun(int n,int *a) { int i,j,k,sum; /**************found**************/ sum=j==0; for(k=3,i=0;i { sum=sum+k; /**************found**************/ if(sum%4=2) a[j++]=sum; } return j; } main() { int a[N],d,n,i; printf("\nEnter n (4 d=fun(n,a); printf("\n\nThe result :\n"); for(i=0; i } 解題思路: 第一處:連續(xù)賦初值為0,中間使用條件相等符號了,所以應(yīng)改為:sum=j=0;。 第二處:條件相等符號為==。 *************************************************** 請編寫函數(shù)fun, 其功能是: 計(jì)算并輸出下列多項(xiàng)式的值: 例如, 在主函數(shù)中從鍵盤給n輸入8后, 輸出為: s=0.662872。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include double fun(int n) { } main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); NONO(); } 解題思路: 本題是根據(jù)公式計(jì)算多項(xiàng)式的值。 參考答案: double fun(int n) { int i; double sum=0.0; if (n>1 && n<=100) { for(i=1; i<=n; i++) sum+=1.0/(2*i-1)-1.0/(2*i); } return sum; } |