计算机等级考试二级C语言上机题集(第11~15套)
第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; }
第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; }
第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; }
第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; }
第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; }