第11套
1.程式填空題
給定程式中,函式fun的功能是:將形參s所指字串中的所有字母字符順序前移,其他字符順序后移,處理后新字串的首地址作為函式值回傳,
例如,s所指字串為:asd123fgh543df,處理后新字串為:asdfghdf123543,
請在下劃線處填入正確的內容并將下劃線洗掉,使程式得出正確的結果,
注意:不得增行或刪行,也不得更改程式的結構!
#include <stdio.h> #include <stdlib.h> #include <string.h> char *fun(char *s) { int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i<n; i++) { if(((s[i]>='a')&&(s[i]<='z'))|| ((s[i]>='A')&&(s[i]<='Z'))) { /**********found**********/ t[j]=__1__; j++; } else { p[k]=s[i]; k++; } } /**********found**********/ for(i=0; i<__2__; i++) t[j+i]=p[i]; /**********found**********/ t[j+k]= __3__; return t; } int main() { char s[80]; printf("Please input: "); scanf("%s",s); printf("\nThe result is: %s\n",fun(s)); return 0; }
2.程式修改題
給定程式中,函式fun的功能是:求出以下分數序列的前n項之和,
2/1,3/2,5/3,8/5,13/8,21/13,……
例如,若n=5,則應輸出:8.391667,
請改正函式fun中指定部位的錯誤,使它能得出正確的結果,
注意:不要改動main函式,不得增行或刪行,也不得更改程式的結構,
#include <stdio.h> /**************found**************/ fun( 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) ; } int main( ) { int n = 5 ; printf("\nThe value of function is: %f\n", fun(n)); return 0; }
3.程式設計題
撰寫函式fun,其功能是:求Fibonacci數列中大于s的最小的一個數,結果由函式回傳,其中Fibonacci數列F(n)的定義為:
F(0)=0 F(1)=1
F(n)=F(n-1)+F(n-2)
例如,當s=1000時,函式值為1597,
注意:請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
#include <stdio.h> void NONO(void); int fun(int s) { } int main() { int n; n=1000; printf("n=%d,f=%d\n",n,fun(n)); NONO(); return 0; } void NONO(void) {/* 本函式用于打開檔案,輸入資料,呼叫函式,輸出資料,關閉檔案, */ FILE *fp, *wf ; int i, n, s ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for (i = 0 ; i < 10 ; i++) { fscanf(fp, "%d", &n) ; s = fun(n) ; fprintf(wf, "%d\n", s) ; } fclose(fp) ; fclose(wf) ; }
1.(1)s[i] (2)k (3)'\0' 2. double fun(int n) c = a+b; b=a; a=c; 3. int fun(int s) { if (s<0) return 0; int a=0,b=1,c; c=a+b; while (c<=s) { a=b; b=c; c=a+b; } return c; }第11套參考答案
第12套
1.程式填空題
函式fun的功能是:計算

的前n項,
例如,若x=2.5,n=12,函式值為:12.182340,
請在下劃線處填入正確的內容并將下劃線洗掉,使程式得出正確的結果,
注意:不得增行或刪行,也不得更改程式的結構!
#include <stdio.h> double fun(double x, int n) { double f, t; int i; f = 1.0; /**********found**********/ t = ___1___; /**********found**********/ for (i=___2___; i<n; i++) { /**********found**********/ t *= x/___3___; f += t; } return f; } int main() { double x, y; x=2.5; y = fun(x, 12); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f\n", x, y); return 0; }
2.程式修改題
假定整數數列中的數不重復,并存放在陣列中,給定程式中函式fun的功能是:洗掉數列中值為x的元素,N中存放的是數列中元素的個數,
請改正函式fun中指定部位的錯誤,使它能得出正確的結果,
注意:不要改動main函式,不得增行或刪行,也不得更改程式的結構,
#include <stdio.h> #define N 20 int fun(int *a,int n,int x) { int p=0,i; a[n]=x; while(x!=a[p]) p=p+1; /************found************/ if (p=n) return -1; else { for(i=p;i<n;i++) /************found************/ a[i+1]=a[i]; return n-1; } } int main() { int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10; printf("The original data :\n"); for (i=0;i<n;i++) printf("%5d",w[i]); printf("\nInput x (to delete):"); scanf("%d",&x); printf("Delete : %d\n",x); n=fun(w,n,x); if (n==-1) printf("***Not be found!***\n\n"); else { printf("The data after deleted:\n"); for(i=0;i<n;i++) printf("%5d",w[i]); printf("\n"); } return 0; }
3.程式設計題
撰寫函式fun,其功能是:計算下列多項式的值,
例如,若n=50,函式值為:1.718282,
注意:請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
#include <stdio.h> void NONO( ); double fun(int n) { } int main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); NONO(); return 0; } void NONO() {/* 請在此函式內打開檔案,輸入測驗資料,呼叫 fun 函式,輸出資料,關閉檔案, */ FILE *rf, *wf ; int n, i ; double s ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d", &n) ; s = fun(n) ; fprintf(wf, "%lf\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)1.0 (2)1 (3)i 2. if (p==n) return -1; a[i]=a[i+1]; 3. double fun(int n) { double s=0.0,t=1.0; int i; for (i=1;i<=n;i++) { t=t/i; s+=t; } return s; }第12套參考答案
第13套
1.程式填空題
給定程式中,函式fun的功能是:求出形參ss所指字串中最長字串的長度,將其余字串右邊用字符“*”補齊,使其與最長的字串等長,ss所指字串陣列中共有M個字串,且串長<N,
請在下劃線處填入正確的內容并將下劃線洗掉,使程式得出正確的結果,
注意:不得增行或刪行,也不得更改程式的結構!
#include <stdio.h> #include <string.h> #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, n, len=0; for(i=0; i<M; i++) { len=strlen(ss[i]); if(i==0) n=len; if(len>n)n=len; } len=n; for(i=0; i<M; i++) { /**********found**********/ n=strlen(___1___); for(j=0; j<len-n; j++) /**********found**********/ ss[i][ ___2___]='*'; /**********found**********/ ss[i][ ___3___]='\0'; } } int main() { char ss[M][N]={"shanghai","guangzhou", "beijing","tianjing","cchongqing"}; int i; printf("The original strings are :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); printf("\n"); fun(ss); printf("The result is :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); return 0; }
2.程式修改題
給定程式中,函式fun的功能是:把主函式中輸入的3個數,最大的放在a中,最小的放在c中,
例如,輸入:55 12 34,輸出結果為:a=55.0,b=34.0,c=12.0,
請改正函式fun中指定部位的錯誤,使它能得出正確的結果,
注意:不要改動main函式,不得增行或刪行,也不得更改程式的結構,
#include <stdio.h> void fun(float *p,float *q,float *s) { /**********found**********/ float *k; if( *p<*q ) { k=*p; *p=*q; *q=k; } /**********found**********/ if( *p>*s ) { k=*s; *s=*p; *p=k; } if( *q<*s ) { k=*q; *q=*s; *s=k; } } int main() { float a,b,c; printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c); printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); return 0; }
3.程式設計題
學生的記錄由學號和成績組成,N名學生的資料已在主函式中放入結構體陣列s中,撰寫函式fun,它的功能是:把分數最高的學生資料放在b所指的陣列中,注意:分數最高的學生可能不止一個,函式回傳分數最高的學生的人數,
注意:請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
#include <stdio.h> #define N 16 typedef struct { char num[10]; int s; }STREC; int fun(STREC *a,STREC *b) { } int main() { STREC s[N]={{"GA05",85},{"GA03",76}, {"GA02",69},{"GA04",85},{"GA01",91}, {"GA07",72},{"GA08",64},{"GA06",87}, {"GA015",85},{"GA013",91},{"GA012",64}, {"GA014",91},{"GA011",91},{"GA017",64}, {"GA018",64},{"GA016",72}}; STREC h[N]; int i,n;FILE *out; n=fun(s,h); printf("The %d highest score:\n",n); for(i=0;i<n;i++) printf("%s %4d\n",h[i].num,h[i].s); printf("\n"); out=fopen("out.dat","w"); fprintf(out,"%d\n",n); for (i=0;i<n;i++) fprintf(out,"%s %4d\n",h[i].num,h[i].s); fclose(out); }
1.(1)ss[i] (2)n+j (3)n+j 2. float k; if( *p<*s ) 3. int fun(STREC *a,STREC *b) { int i,n=0,max; max=a[0].s; for (i=1;i<N;i++) if (max<a[i].s) max=a[i].s; for (i=0;i<N;i++) if (max==a[i].s) b[n++]=a[i]; return n; }第13套參考答案
第14套
1.程式填空題
用篩選法可得到2~n(n<10000)之間的所有素數,方法是:首先從素數2開始,將所有2的倍數的數從數表中洗掉(把數表中相應位置的值置為0);接著從數表中找到下一個非0數,并從數表中洗掉該數的所有倍數,以此類推,直到所找的下一個數等于n為止,這樣會得到一個序列:2,3,5,7,11,13,17,19,23,…,
函式fun用篩選法找出所有小于等于n的素數,并統計素數的個數作為函式值回傳,
請在下劃線處填入正確的內容并將下劃線洗掉,使程式得出正確的結果,
注意:不得增行或刪行,也不得更改程式的結構!
#include <stdio.h> int fun(int n) { int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2; while (i<n) { /**********found**********/ for (j=a[i]*2; j<=n; j+=___1___) a[j] = 0; i++; /**********found**********/ while (___2___==0) i++; } printf("\nThe prime number between 2 to %d\n", n); for (i=2; i<=n; i++) /**********found**********/ if (a[i]!=___3___) { count++; printf( count%15?"%5d":"\n%5d",a[i]); } return count; } int main() { int n=20, r; r = fun(n); printf("\nThe number of prime is : %d\n", r); return 0; }
2.程式修改題
給定程式中,函式fun的功能是:比較兩個字串,將長的字串的首地址作為函式值回傳,
請改正函式fun中指定部位的錯誤,使它能得出正確的結果,
注意:不要改動main函式,不得增行或刪行,也不得更改程式的結構,
#include <stdio.h> /**********found**********/ char fun(char *s, char *t) { int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss) { sl++; /**********found**********/ (*ss)++; } while(*tt) { tl++; /**********found**********/ (*tt)++; } if(tl>sl) return t; else return s; } int main() { char a[80],b[80]; int i; printf("\nEnter a string : "); gets(a); printf("\nEnter a string again : "); gets(b); printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); return 0; }
3.程式設計題
撰寫函式fun,它的功能是:求n以內(不包括n)同時能被3和7整除的所有自然數之和的平方根s,并作為函式值回傳,
例如,n=1000時,函式值應為:s=153.909064,
注意:請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
#include <stdio.h> #include <math.h> double fun(int n) { } int main() { printf("s=%f\n",fun(1000)); void NONO(void); NONO(); return 0; } void NONO(void) {/* 請在此函式內打開檔案,輸入測驗資料,呼叫 fun 函式, 輸出資料,關閉檔案, */ FILE *wf; wf = fopen("a28.out", "w") ; fprintf(wf,"s=%f\n",fun(1000)); fclose(wf) ; }
1.(1)a[i] (2)a[i] (3)0 2. char *fun(char *s, char *t) ss++; tt++; 3. double fun(int n) { double s=0; int i; for (i=1;i<n;i++) if (i%3==0 && i%7==0) s+=i; s=sqrt(s); return s; }第14套參考答案
第15套
1.程式填空題
人員的記錄由編號和出生年、月、日組成,N名人員的資料已在主函式中存入結構體陣列std中,函式fun的功能是:找出指定出生年份的人員,將其資料放在形參k所指的陣列中,由主函式輸出,同時由函式值回傳滿足指定條件的人數,
請在下劃線處填入正確的內容并將下劃線洗掉,使程式得出正確的結果,
注意:不得增行或刪行,也不得更改程式的結構!
#include <stdio.h> #define N 8 typedef struct { int num; int year,month,day ; }STU; int fun(STU *std, STU *k, int year) { int i,n=0; for (i=0; i<N; i++) /**********found**********/ if( ___1___==year) /**********found**********/ k[n++]= ___2___; /**********found**********/ return (___3___); } int main() { STU std[N]={ {1,1984,2,15},{2,1983,9,21}, {3,1984,9,1},{4,1983,7,15}, {5,1985,9,28},{6,1982,11,15}, {7,1982,6,22},{8,1984,8,19}}; STU k[N]; int i,n,year; printf("Enter a year : "); scanf("%d",&year); n=fun(std,k,year); if(n==0) printf("\nNo person was born in %d \n",year); else { printf("\nThese persons were born in %d \n",year); for(i=0; i<n; i++) printf("%d %d-%d-%d\n",k[i].num,k[i].year, k[i].month,k[i].day); } return 0; }
2.程式修改題
給定程式中,函式fun的功能是:通過某種方式實作兩個變數值得交換,規定不允許增加陳述句和運算式,例如,a=3,b=8,程式運行后a=8,b=3,
請改正函式fun中指定部位的錯誤,使它能得出正確的結果,
注意:不要改動main函式,不得增行或刪行,也不得更改程式的結構,
#include <stdio.h> int fun(int *x,int y) { int t ; /**************found**************/ t = x ; x = y ; /**************found**************/ return(y) ; } int main() { int a = 3, b = 8 ; printf("%d %d\n", a, b) ; b = fun(&a, b) ; printf("%d %d\n", a, b) ; return 0; }
3.程式設計題
撰寫函式fun,它的功能是:求出1~1000之內能被7或11整除,但不能同時被7和11整除的所有整數并將它們放在a所指的陣列中,通過n回傳這些數的個數,
注意:請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
#include <stdio.h> void NONO(void); void fun (int *a, int *n) { } int main() { int aa[1000], n, k ; fun(aa, &n); for ( k = 0 ; k < n ; k++ ) if ((k+1)%10==0) printf("\n") ; else printf("%5d", aa[k]) ; NONO( ); return 0; } void NONO(void) {/* 本函式用于打開檔案,輸入測驗資料,呼叫fun函式,輸出資料,關閉檔案,*/ int aa[1000], n, k ; FILE *fp ; fp = fopen("out.dat","w") ; fun ( aa, &n ) ; for ( k = 0 ; k < n ; k++ ) if ((k+1)%10==0) fprintf(fp, "\n") ; else fprintf(fp, "%5d", aa[k]) ; fclose(fp) ; }
1.(1)std[i].year (2)std[i] (3)n 2. t = *x ; *x = y ; return (t) ; 3. void fun (int *a, int *n) { int i,j; j=0; for (i=1;i<=1000;i++) if ((i%7==0 || i%11==0)&& (i%77!=0)) a[j++]=i; *n=j; }第15套參考答案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527747.html
標籤:C
