![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
全國計算機二級C題庫第51--60套 |
本題目如果下載后發(fā)現(xiàn)有錯誤的地方,請聯(lián)系網(wǎng)站管理員:QQ121431055
考試時,上機操作題目有三套,基本操作題、簡單應用題、綜合應用題 第51套: 給定程序中,函數(shù)fun的功能是:計算出形參s所指字符串中包含的單詞個數(shù), 作為函數(shù)值返回。為便于統(tǒng)計,規(guī)定各單詞之間用空格隔開。 例如,形參s所指的字符串為:This is a C language program.,函數(shù) 的返回值為6。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include int fun(char *s) { int n=0, flag=0; while(*s!='\0') { if(*s!=' ' && flag==0) { /**********found**********/ __1__ ; flag=1;} /**********found**********/ if (*s==' ') flag= __2__ ; /**********found**********/ __3__ ; } return n; } main() { char str[81]; int n; printf("\nEnter a line text:\n"); gets(str); n=fun(str); printf("\nThere are %d words in this text.\n\n",n); } 解題思路: 本題是統(tǒng)計字符串中包含的單詞個數(shù)。 第一處:單詞個數(shù)用變量n來統(tǒng)計,當當前字母不是空格且flag狀態(tài)標志為0時,則單詞數(shù) 就加1,將狀態(tài)標志flag置為1,所以應填:n++。 第二處:當當前字符是空格時,flag狀態(tài)標志置0,所以應填:0。 第三處:到字符串下一個位置,所以應填:s++。 *************************************************** 給定程序MODI1.C中函數(shù) fun 的功能是:從n(形參)個學生的成績中統(tǒng)計出低 于平均分的學生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲單 元中。 例如,若輸入 8 名學生的成績:80.5 60 72 90.5 98 51.5 88 64 則低于平均分的學生人數(shù)為: 4 (平均分為:75.5625 )。 請改正程序中的錯誤,使它能統(tǒng)計出正確的結果。 注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #define N 20 int fun ( float *s, int n, float *aver ) { float ave, t = 0.0 ; int count = 0, k, i ; for ( k = 0 ; k < n ; k++ ) /**************found**************/ t = s[k] ; ave = t / n ; for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ; /**************found**************/ *aver = Ave ; return count ; } main() { float s[30], aver ; int m, i ; printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ; printf ( "\nPlease enter %d mark :\n ", m ) ; for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ; printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) ); printf( "Ave = %f\n", aver ) ; } 解題思路: 第一處:應求累加和,而不賦值,所以應改為t+=s[k];。 第二處:ave不需要取地址,直接賦給*aver就可以了。 *************************************************** 請編寫函數(shù)fun,其功能是求出數(shù)組的最大元素在數(shù)組中的下標并存放在k所 指的存儲單元中。 例如, 輸入如下整數(shù): 876 675 896 101 301 401 980 431 451 777 則輸出結果為: 6, 980 注意: 部分源程序在文件PROG1.C文件中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include int fun(int *s, int t, int *k) { } main( ) { int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; fun(a, 10, &k) ; printf("%d, %d\n", k, a[k]) ; NONO( ) ; } 解題思路: 本題是考察考生如何在指定的數(shù)組找出最大元素值的下標,通過形參*k返回到主程序中。 給出的程序是使用for循環(huán)語句進行處理的,在循環(huán)之前,首先把數(shù)組的第一個元素值賦給 最大值變量max,位置pos為0,然后通過循環(huán)依次判斷下一元素值是否大于最大值max,如果大 于,那么把這個數(shù)重新賦給max,位置i賦給pos,循環(huán)結果,即可得到最大值的位置pos,最后 執(zhí)行語句*k=pos就可以實現(xiàn)返回了。 參考答案: int fun(int *s, int t, int *k) { int i, pos = 0, max = *s ; for(i = 1 ; i < t ; i++) { if(max < *(s + i)) { max = *(s + i) ; pos = i ; } } *k = pos ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第52套: 給定程序中,函數(shù)fun的功能是:將N×N矩陣中元素的值按列右移1個位置, 右邊被移出矩陣的元素繞回左邊。例如,N=3,有下列矩陣 1 2 3 4 5 6 7 8 9 計算結果為 3 1 2 6 4 5 9 7 8 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #define N 4 void fun(int (*t)[N]) { int i, j, x; /**********found**********/ for(i=0; i<___1___; i++) { /**********found**********/ x=t[i][___2___] ; for(j=N-1; j>=1; j--) t[i][j]=t[i][j-1]; /**********found**********/ t[i][___3___]=x; } } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("The original array:\n"); for(i=0; i { for(j=0; j } fun(t); printf("\nThe result is:\n"); for(i=0; i { for(j=0; j } } 解題思路: 第一處:函數(shù)fun是對N×N矩陣進行操作,for循環(huán)的終止值為N。 第二處:把最后一列的元素值賦值給臨時變量x保存用來交換,所以應填:N-1。 第三處:第1列元素值使用x替換,由于C語言的下標是從0開始的,所以應填:0。 *************************************************** 例如,若q的值為: 50.0,則函數(shù)值為: 49.394948。 請改正程序中的錯誤,使程序能輸出正確的結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include double fun( double q ) { int n; double s,t; n = 2; s = 2.0; while (s<=q) { t=s; /************found************/ s=s+(n+1)/n; n++; } printf("n=%d\n",n); /************found************/ return s; } main ( ) { printf("%f\n", fun(50)); } 解題思路: 第一處:如果兩個整數(shù)類型相除,結果仍為整數(shù),所以必須轉(zhuǎn)換其中一個數(shù)的類型,所以 應改為:s+=(float)(n+1)/n;。 第二處:返回結果錯誤,應改為:return t;。 *************************************************** 編寫函數(shù)fun,它的功能是:求Fibonacci數(shù)列中大于t的最小的一個數(shù),結果 由函數(shù)返回。其中Fibonacci數(shù)列F(n)的定義為: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 例如:當t = 1000時,函數(shù)值為:1597。 注意: 部分源程序在文件PROG1.C中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include int fun( int t) { } main() /* 主函數(shù) */ { int n; n=1000; printf("n = %d, f = %d\n",n, fun(n)); NONO(); } 解題思路: 本題是考察考生用遞推算法來求出斐波那契數(shù)列中每項的值。給出的程序就是用變量f、f0 和f1來表示遞推的過程,給變量f0和f1最初分別置數(shù)列中第1項和第2項的值0和1,然后進入循 環(huán),執(zhí)行語句f=f0+f1;將所得和值存入f中,這就是數(shù)列的第3項,把f1的值移入f0中,將f的 值移入f1中,為求數(shù)列的下一列作好準備;接著進入下一次循環(huán),通過語句f=f0+f1求得數(shù)列的 第4項,不斷重復以上步驟,每重復一次就依次求得數(shù)列的下一項,直至某項滿足要為止。 參考答案: int fun( int t) { int f0 = 0, f1 = 1, f ; do { f = f0 + f1 ; f0 = f1 ; f1 = f ; } while(f < t) ; return f ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第53套: 函數(shù)fun的功能是:計算 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include double fun(double x) { double f, t; int n; f = 1.0 + x; /**********found**********/ t = ___1___; n = 1; do { n++; /**********found**********/ t *= (-1.0)*x/___2___; f += t; } /**********found**********/ while (___3___ >= 1e-6); return f; } main() { double x, y; x=2.5; y = fun(x); printf("\nThe result is :\n"); printf("x=% } 解題思路: 第一處:根據(jù)公式可知,變量t的值為x。 第二處:根據(jù)公式可知,此處應該除以n,所以應填:n。 第三處:根據(jù)試題中條件的要求,所以應填:fabs(t)。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 求整數(shù)x的y次方的低3位值。例如,整 數(shù)5的6次方為15625, 此值的低3位值為625。 請改正函數(shù)fun中指定部位的錯誤, 使它能得出正確的結果。 注意: 不要改動main函數(shù), 不得增行或刪行, 也不得更改程序的結構! 給定源程序: #include long fun(int x,int y,long *p ) { int i; long t=1; /**************found**************/ for(i=1; i t=t*x; *p=t; /**************found**************/ t=t/1000; return t; } main() { long t,r; int x,y; printf("\nInput x and y: "); scanf("%ld%ld",&x,&y); t=fun(x,y,&r); printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t ); } 解題思路: 第一處:錯誤在for循環(huán)語句上,根據(jù)試題要求,終止條件應該是i<=y。 第二處:要取低3位的值時,應模1000取余數(shù),而不是整除1000取商。 *************************************************** 例如, 在主函數(shù)中從鍵盤給x輸入0.21后,輸出為:s=1.100000。 注意: 部分源程序在文件PROG1.C中。 請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的 花括號中填入你編寫的若干語句。 給定源程序: #include #include double fun(double x) { } main() { double x,s; printf("Input x: "); scanf("%lf",&x); s=fun(x); printf("s=%f\n",s); NONO(); } 解題思路: 本題是根據(jù)給定的公式進行計算。具體操作請看答案程序中的說明。 參考答案: double fun(double x) { int n=1; /* 循環(huán)計數(shù)*/ double sn=1; /* 累計數(shù)*/ double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/ while(fabs(xn-xn1)>=0.000001)/*絕對值是否滿足條件*/ { xn=xn*x*(0.5-n+1)/n; /*表達式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1; sn+=xn; /*sn累加上xn*/ } return(sn); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第54套: 給定程序中,函數(shù)fun的功能是:計算出帶有頭結點的單向鏈表中各結點數(shù)據(jù) 域中值之和作為函數(shù)值返回。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include #define N 8 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *); void outlist(SLIST *); int fun( SLIST *h) { SLIST *p; int s=0; p=h->next; while(p) { /**********found**********/ s+= p->___1___; /**********found**********/ p=p->___2___; } return s; }
main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head); /**********found**********/ printf("\nsum=%d\n", fun(___3___)); } SLIST *creatlist(int a[]) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } 解題思路: 本題是計算出帶有頭結點的單向鏈表中各結點數(shù)據(jù)域中值之和。 第一處:累加數(shù)據(jù)域中的值,所以應填:data。 第二處:指定p的下一個指針,所以應填:next。 第三處:函數(shù)調(diào)用,在主函數(shù)中已經(jīng)給出了head,所以應填:head。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中出現(xiàn)的與t1所指字符 串相同的子串全部替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。在此 處,要求t1和t2所指字符串的長度相同。 例如,當s所指字符串中的內(nèi)容為:"abcdabfab",t1所指子串中的內(nèi)容為: "ab",t2所指子串中的內(nèi)容為:"99"時, 結果在w所指的數(shù)組中的內(nèi)容應為: "99cd 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include int fun (char *s, char *t1, char *t2 , char *w)
{ int i; char *p , *r, *a; strcpy( w, s ); while ( *w ) { p = w; r = t1; /************found************/ while ( r ) if ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' ) { a = w; r = t2; while ( *r ){ /************found************/ *a = *r; a++; r++ } w += strlen(t2) ; } else w++; } } main() { char s[100], t1[100], t2[100], w[100]; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)==strlen(t2) ) { fun( s, t1, t2, w); printf("\nThe result is : %s\n", w); } else printf("Error : strlen(t1) != strlen(t2)\n"); } 解題思路: 第一處:判斷字符串當前字符是否是字符串結束符,所以應改為:while(*r)。 第二處:語句后缺少分號。 *************************************************** 函數(shù)fun的功能是:將s所指字符串中下標為偶數(shù)的字符刪除,串中剩余字符 形成的新串放在t所指數(shù)組中。 例如,當s所指字符串中的內(nèi)容為:"ABCDEFGHIJK", 在t所指數(shù)組中的內(nèi)容應是:"BDFHJ"。 注意: 部分源程序存在文件PROG1.C中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include void fun(char *s, char t[])
{ } main() { char s[100], t[100]; printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); NONO(); } 解題思路: 本題是從一個字符串按要求生成另一個新的字符串。我們使用for循環(huán)語句來解決這個問 題。 參考答案: void fun(char *s, char t[]) { int i, j = 0 ; for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ; t[j] = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第55套: 給定程序中,函數(shù)fun的功能是:判斷形參s所指字符串是否是"回文" (Palindrome),若是,函數(shù)返回值為1;不是,函數(shù)返回值為0。"回文" 是正讀和反讀都一樣的字符串(不區(qū)分大小寫字母)。 例如,LEVEL和Level是"回文",而LEVLEV不是"回文"。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include #include int fun(char *s) { char *lp,*rp; /**********found**********/ lp= __1__ ; rp=s+strlen(s)-1; while((toupper(*lp)==toupper(*rp)) && (lp /**********found**********/ lp++; rp __2__ ; } /**********found**********/ if(lp else return 1; } main() { char s[81]; printf("Enter a string: "); scanf("%s",s); if(fun(s)) printf("\n\"%s\" is a Palindrome.\n\n",s); else printf("\n\"%s\" isn't a Palindrome.\n\n",s); } 解題思路: 本題是判斷字符串是否是“回文”。
第一處:根據(jù)函數(shù)體fun中,對變量lp的使用可知,lp應指向形參s,所以應填:s。 第二處:rp是指向字符串的尾指針,當每做一次循環(huán)rp指向就要指向前一個字符,所以應 填:--。 第三處:當lp和rp相等時,則表示字符串是回文并返回1,否則就返回0,所以應填:return 0。 *************************************************** 給定程序MODI1.C中fun函數(shù)的功能是:求出以下分數(shù)序列的前n項之和。 2 3 5 8 13 21 ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , …… 1 2 3 5 8 13 和值通過函數(shù)值返回main函數(shù)。 例如,若 n = 5,則應輸出: 8.391667。 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include /**************found**************/ fun (int n ) { int a = 2, b = 1, c, k ; double s=0.0 ; for ( k = 1; k <= n; k++ ) { s = s + 1.0 * a / b ; /**************found**************/ c = a; a += b; b += c; } return(s) ; } main( ) { int n = 5 ; printf( "\nThe value of function is: %lf\n", fun ( n ) ) ; } 解題思路: 第一處:由于計算的實型值要通過函數(shù)返回,所以必須定義函數(shù)的返回類型,只要int或void 可以省略,其他都要定義類型。由于返回是實型值,所以應在數(shù)名前加上double或float等定義。 第二處:根據(jù)公式可知,在for循環(huán)內(nèi)b的值應是c。 *************************************************** 請編寫函數(shù)fun,函數(shù)的功能是:將大于形參m且緊靠m的k個素數(shù)存入xx所指 的數(shù)組中。例如,若輸入17, 5,則應輸出:19, 23, 29, 31, 37。函數(shù)fun中給 出的語句僅供參考。 注意: 部分源程序在文件PROG1.C文件中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include void fun(int m, int k, int xx[]) { /* 以下代碼僅供參考 */
int i, j=1, t=m+1; while(j<=k) { /* 以下完成判斷素數(shù),并存放到數(shù)組xx中 */ } } main() { int m, n, zz[1000] ; printf( "\nPlease enter two integers:") ; scanf("%d%d", &m, &n ) ; fun( m, n, zz) ; for( m = 0 ; m < n ; m++ ) printf("%d ", zz[m]) ; printf("\n") ; NONO( ) ; } 解題思路: 本題是考察考生如何判斷一個數(shù)是素數(shù),再判斷所求出的素數(shù)是否符合題義要求,如果符 合,則存入指定的數(shù)組xx中保存,最后由形參xx返回。 本題是用while循環(huán)語句分別求出5個符合題義的素數(shù)。其中,j是控制變量,m是所求素數(shù) 要大于這個數(shù)且還要緊靠這個數(shù),k是所求素數(shù)的個數(shù),j是當前所求第幾個素數(shù)。其中while 循環(huán)體中的for循環(huán)語句是判斷t是否是素數(shù)。 參考答案: void fun(int m, int k, int xx[]) { /* 以下代碼僅供參考 */ int i, j=1, t=m+1; while(j<=k) { /* 以下完成判斷素數(shù),并存放到數(shù)組xx中 */
for(i = 2 ; i < t; i++) if(t % i==0) break; if(i==t) { xx[j-1] = i; j++; } t++; } } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第56套: 給定程序的功能是:從鍵盤輸入若干行文本(每行不超過80個字符),寫到 文件myfile4.txt中,用-1作為字符串輸入結束的標志。然后將文件的內(nèi)容讀出顯 示在屏幕上。文件的讀寫分別由自定義函數(shù)ReadText和WriteText實現(xiàn)。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include
#include #include void WriteText(FILE *); void ReadText(FILE *); main() { FILE *fp; if((fp=fopen("myfile4.txt","w"))==NULL) { printf(" open fail!!\n"); exit(0); } WriteText(fp); fclose(fp); if((fp=fopen("myfile4.txt","r"))==NULL) { printf(" open fail!!\n"); exit(0); } ReadText(fp); fclose(fp); } /**********found**********/ void WriteText(FILE ___1___) { char str[81]; printf("\nEnter string with -1 to end :\n"); gets(str); while(strcmp(str,"-1")!=0) { /**********found**********/ fputs(___2___,fw); fputs("\n",fw); gets(str); } } void ReadText(FILE *fr) { char str[81]; printf("\nRead file and output to screen :\n"); fgets(str,81,fr); while( !feof(fr) ) { /**********found**********/ printf("%s",___3___); fgets(str,81,fr); } } 解題思路: 本題要求是把鍵盤上輸入的內(nèi)容寫到指定的文件中。程序中共有三處要填上適當?shù)膬?nèi)容, 使程序能運行出正確的結果。 第一處:要求填寫文件流的自變量名,在這個函數(shù)中,已有的語句fputs("\n",fw);分析可 知:由于文件流變量fw在函數(shù)體沒有定義過,所以本處應填*fw或fw[]。 第二處:通過while循環(huán)語句,把鍵盤上輸入的內(nèi)容,要寫入到指定的文件中,鍵盤上輸入 的內(nèi)容已存入字符串str變量中,因此,本處應填寫str。 第三處:要把已存入文件中的內(nèi)容,再從文件中讀出且已存入字符串變量str中,最后在屏 幕顯示出來,因此,此處應填寫str。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中奇數(shù)位
上的數(shù),依次構成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。 例如,當s中的數(shù)為:7654321時,t中的數(shù)為:7531。 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include /************found************/ void fun (long s, long t) { long sl=10; *t = s % 10; while ( s > 0) { s = s/100; *t = s * sl + *t; /************found************/ \TAB sl = sl*100; } } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); } 解題思路: 第一處:在函數(shù)fun中使用了*t,但在函數(shù)定義時沒有使用*t,所以應改為:void fun(long s,long *t)。 第二處:每循環(huán)一次,sl的值就乘以10,所以應改為:sl=sl*10;。 *************************************************** 函數(shù)fun的功能是:將兩個兩位數(shù)的正整數(shù)a、b合并形成一個整數(shù)放在c中。 合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)的個位和百位上, b數(shù)的十位 和個位數(shù)依次放在c數(shù)的千位和十位上。 例如,當a=45,b=12時,調(diào)用該函數(shù)后,c=1524。 注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。 請勿改動主函數(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: %ld\n", c); NONO();
} 解題思路: 本題是給出兩個兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個新數(shù)。 取a十位數(shù)字的方法:a/10 取a個位數(shù)字的方法:a 參考答案: void fun(int a, int b, long *c) { *c=(b/10)*1000+(a)*100+(b)*10+(a/10); } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第57套: 函數(shù)fun的功能是:把形參a所指數(shù)組中的最小值放在元素a[0]中,接著把 形參a所指數(shù)組中的最大值放在a[1]元素中;再把a所指數(shù)組元素中的次小值放 在a[2]中,把a所指數(shù)組元素中的次大值放在a[3];其余以此類推。例如:若a 所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7;則按規(guī)則移動 后,數(shù)據(jù)排列為:1、9、2、8、3、7、4、6、5。形參n中存放a所指數(shù)組中數(shù) 據(jù)的個數(shù)。 注意:規(guī)定fun函數(shù)中的max存放當前所找的最大值,px存放當前所找最大 值的下標。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: # include #define N 9 void fun(int a[], int n) { int i,j, max, min, px, pn, t; for (i=0; i { /**********found**********/ max = min = ___1___; px = pn = i; for (j=i+1; j /**********found**********/ if (max<___2___) { max = a[j]; px = j; } /**********found**********/ if (min>___3___) { min = a[j]; pn = j; } } if (pn != i) { t = a[i]; a[i] = min; a[pn] = t; if (px == i) px =pn; } if (px != i+1) { t = a[i+1]; a[i+1] = max; a[px] = t; } } } main() { int b[N]={9,1,4,2,3,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i fun(b, N); printf("\nThe data after moving :\n");
for (i=0; i } 解題思路: 第一處:外循環(huán)每循環(huán)一次均把數(shù)組a當前位置的值,分別賦值給max和min變量,所以應填: a[i]。 第二處:判斷max是否小于a[j],若小于,則把a[j]賦值給max,所以應填:a[j]。 第三處:判斷min是否大于a[j],若大于,則把a[j]賦值給min,所以應填:a[j]。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:用遞歸算法計算斐波拉契數(shù)列中第n 項的值。從第1項起,斐波拉契數(shù)列為:1、1、2、3、5、8、13、21、…… 例如,若給n輸入7,該項的斐波拉契數(shù)值為:13。 請改正程序中的錯誤,使它能得出正確結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。 給定源程序: #include long fun(int g) { /**********found**********/ switch(g); { case 0: return 0; /**********found**********/ case 1 ;case 2 : return 1 ; } return( fun(g-1)+fun(g-2) ); } main() { long fib; int n; printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n); fib=fun(n); printf("fib = %d\n\n",fib); } 解題思路: 第一處:switch后有多余的分號。 第二處:case 1后沒有返回語句,也應該為return 1;。所以應改為:case 1: return 1; case 2:return 1;。 *************************************************** 某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程的成績已 在主函數(shù)中給出。請編寫函數(shù)fun,它的功能是:求出該學生的平均分放在記錄的 ave成員中。 例如,學生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分應當 是:78.875。 注意: 部分源程序在文件PROG1.C中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun部位中填入你編 寫的若干語句。 給定源程序: #include
#define N 8 typedef struct { char num[10]; double s[N]; double ave; } STREC; void fun(STREC *a) { } main() { STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5}; int i; fun( &s ); printf("The %s's student data:\n", s.num); for(i=0;i printf("% printf("\nave=% NONO(); } 解題思路: 本題是求記錄結構中學生課程成績的平均值,其結果仍放在該記錄結構中。 參考答案: void fun(STREC *a) { int i ; for(i = 0 ; i < N ; i++) a->ave = a->ave + a->s[i] ; a->ave /= N ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第58套: 給定程序中,函數(shù)fun的功能是:把形參s所指字符串中最右邊的n個字符復制 到形參t所指字符數(shù)組中,形成一個新串。若s所指字符串的長度小于n,則將整個
字符串復制到形參t所指字符數(shù)組中。 例如,形參s所指的字符串為:abcdefgh,n的值為5,程序執(zhí)行后t所指字符數(shù) 組中的字符串應為:defgh。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include #define N 80 void fun(char *s, int n, char *t) { int len,i,j=0; len=strlen(s); /**********found**********/ if(n>=len) strcpy(__1__); else { /**********found**********/ for(i=len-n; i<=len-1; i++) t[j++]= __2__ ; /**********found**********/ t[j]= __3__ ; } } main() { char s[N],t[N]; int n; printf("Enter a string: ");gets(s); printf( "Enter n:"); scanf("%d",&n); fun(s,n,t); printf("The string t : "); puts(t); } 解題思路: 本題是根據(jù)要求來復制字符串。 第一處:當給定的長度n大于該字符串s的長度,那么把該字符串直接拷貝到t就可以了,所 以應填:t,s。 第二處:使用for循環(huán)語句,把最右邊n個字符依次添加到t中,所以應填:s[i]。 第三處:字符串操作結束,需要到t加一個字符串結束符,所以應填:'\0'。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:找出一個大于形參m且緊隨m的素數(shù), 并作為函數(shù)值返回。 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include int fun(int m) { int i, k ; for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++)
/**************found**************/ if (i % k != 0) break ; /**************found**************/ if (k < i) return(i); } } void main() { int n ; n = fun(20) ; printf("n=%d\n", n) ; } 解題思路: 第一處:判斷素數(shù)的條件是一個數(shù)i除自身或1除外不被任何數(shù)k整除的數(shù),如果一個數(shù)i被 另一個數(shù)k取模,模值等于零,那么這個不是素數(shù)并退出循環(huán)體,所以應改為if(i%k==0)。 第二處:如果i不被循環(huán)中任一個k值不整除,那么循環(huán)結束后k的值應該等于i,所以應改 為if(k==i)或if(k>=i)也可以。 *************************************************** 請編寫函數(shù)fun,它的功能是:求出能整除形參x且不是偶數(shù)的各整數(shù),并按從 小到大的順序放在pp所指的數(shù)組中,這些除數(shù)的個數(shù)通過形參n返回。 例如,若 x 中的值為: 35,則有 4 個數(shù)符合要求,它們是: 1, 5, 7, 35。 注意: 部分源程序在文件PROG1.C文件中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include void fun ( int x, int pp[], int *n ) { } main( ) { int x, aa[1000], n, i ; printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ; fun(x, aa, &n ) ; for( i = 0 ; i < n ; i++ ) printf("%d ", aa[i]) ; printf("\n") ; NONO( ) ; } 解題思路: 本題是求出能整除形參x且不是偶數(shù)的各整數(shù),并按從小到大的順序放在pp所指的數(shù)組中, 這些除數(shù)的個數(shù)通過形參n返回。 參考答案: void fun ( int x, int pp[], int *n ) { int i; *n=0; for(i=1; i <= x; i++) if((x % i== 0) && (i % 2)) pp[(*n)++]=i; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第59套: 給定程序中,函數(shù)fun的功能是:在3×4的矩陣中找出在行上最大、在列上最 小的那個元素,若沒有符合條件的元素則輸出相應信息。 例如,有下列矩陣: 1 2 13 4 7 8 10 6
3 5 9 7 程序執(zhí)行結果為:find: a[2][2]=9 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #define M 3 #define N 4 void fun(int (*a)[N]) { int i=0,j,find=0,rmax,c,k; while( (i { rmax=a[i][0]; c=0; for(j=1; j /**********found**********/ rmax=a[i][j]; c= __1__ ; } find=1; k=0; while(k /**********found**********/ if (k!=i && a[k][c]<=rmax) find= __2__ ; k++; } if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]); /**********found**********/ __3__ ; } if(!find) printf("not found!\n"); } main() { int x[M][N],i,j; printf("Enter number for array:\n"); for(i=0; i for(j=0; j printf("The array:\n"); for(i=0; i { for(j=0; j } fun(x); } 解題思路: 本題是在矩陣中找出在行上最大、在列上最小的那個元素。 第一處:找出行上最大的數(shù),并該位置j(列)保存在c中,所以應填:j。 第二處:使用while循環(huán)語句和控制變量find,如果該數(shù)不是列是最小數(shù),那么把find置0, 所以應填:0。
第三處:i是while的控制變量,所以每做一次循環(huán),該數(shù)均要加1,所以應填:i++。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參m的值,計算如下公式的 值。 1 1 1 t = 1 - ----- - ----- - …… - ----- 2*2 3* 例如,若 m 中的值為: 5,則應輸出: 0.536389。 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #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)計算公式,必須計算到m,所以應改為for(i=2; i<=m; i++)。 第二處:在除法運算中,如果除數(shù)和被除數(shù)都是整數(shù),所么所除結果也是整數(shù),因此應改 為y-=1./(i*i)。 *************************************************** m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平均 分的人數(shù)作為函數(shù)值返回,將低于平均分的分數(shù)放在below所指的數(shù)組中。 例如,當score數(shù)組中的數(shù)據(jù)為:10、20、30、40、50、60、70、80、90時, 函數(shù)返回的人數(shù)應該是4, below中的數(shù)據(jù)應為: 10、20、30、40。 注意: 部分源程序在文件PROG1.C文件中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入 你編寫的若干語句。 給定源程序: #include #include int fun(int score[], int m, int below[]) { } main( ) { int i, n, below[9] ; int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ; n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ; for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ; NONO() ; } 解題思路: 本題是計算平均成績,再把低于平均成績的分數(shù)存入依次數(shù)組below中。 參考答案: int fun(int score[], int m, int below[]) { float av=0.0 ; int i, j=0 ; for(i=0; i av /= m; for(i=0; i if(av>score[i]) below[j++]=score[i]; return j; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第60套: 給定程序中,函數(shù)fun的功能是:將形參指針所指結構體數(shù)組中的三個元素按 num成員進行升序排列。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序: #include typedef struct { int num; char name[10]; }PERSON; /**********found**********/ void fun(PERSON ___1___) { /**********found**********/ ___2___ temp; if(std[0].num>std[1].num) { temp=std[0]; std[0]=std[1]; std[1]=temp; } if(std[0].num>std[2].num) { temp=std[0]; std[0]=std[2]; std[2]=temp; } if(std[1].num>std[2].num) { temp=std[1]; std[1]=std[2]; std[2]=temp; } } main() { PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" }; int i; /**********found**********/ fun(___3___); printf("\nThe result is :\n"); for(i=0; i<3; i++) printf("%d,%s\n",std[i].num,std[i].name); } 解題思路: 本題是要求對結構體數(shù)組中的三個元素按num成員升序排列。
第一處:由于在函數(shù)體fun中,已經(jīng)使用了std變量,所以應填:*std。 第二處:由于temp是存放交換記錄的中間變量,所以應填:PERSON。 第三處:函數(shù)的調(diào)用,所以應填:std。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:將 m(1≤m≤10)個字符串連接起來, 組成一個新串,放入pt所指存儲區(qū)中。 例如:把3個串:"abc","CD","EF"連接起來,結果是 "abcCDEF"。 請改正程序中的錯誤,使它能得出正確的結果。 注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結構! 給定源程序: #include #include int fun ( char str[][10], int m, char *pt ) { /************found************/ Int k, q, i ; for ( k = 0; k < m; k++ ) { q = strlen ( str [k] ); for (i=0; i /************found************/ pt[i] = str[k,i] ; pt += q ; pt[0] = 0 ; } } main( ) { int m, h ; char s[10][10], p[120] ; printf( "\nPlease enter m:" ) ; scanf("%d", &m) ; gets(s[0]) ; printf( "\nPlease enter %d string:\n", m ) ; for ( h = 0; h < m; h++ ) gets( s[h]) ; fun(s, m, p) ; printf( "\nThe result is : %s\n", p) ; } 解題思路: 第一處:保留字int錯寫成Int。 第二處:字符數(shù)組的字符串書寫格式錯誤。 *************************************************** 程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù) fun( int a[][N]),函數(shù)的功能是:使數(shù)組左下三角元素中的值全部置成0 。 例如:a 數(shù)組中的值為 | 1 9 7 | | 0 9 7 | a = | 2 3 8 | 則返回主程序后a數(shù)組中的值應為 | 0 0 8 | | 4 5 6 | | 0 0 0 | 注意: 部分源程序存在文件PROG1.C中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。 給定源程序: #include #include #define N 5 int fun ( int a[][N] ) { } main ( ) { int a[N][N], i, j; printf("***** The array *****\n"); for ( i =0; i { for ( j =0; j { a[i][j] = rand(); printf( "M", a[i][j] ); } printf("\n"); } fun ( a ); printf ("THE RESULT\n"); for ( i =0; i { for ( j =0; j printf("\n"); } NONO( ); } 解題思路: 本題是利用兩重循環(huán)給二維數(shù)組左下三角元素中的值全部置成0。 參考答案: int fun ( int a[][N] ) { int i, j; for(i = 0 ; i < N ; i++) for(j = 0 ; j <= i; j++) a[i][j] = 0 ; } |