计算机等级考试二级C语言上机题集(第6~10套)
第6套
1.程序填空题
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是:将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> struct student { long sno; char name[10]; float score[3]; }; /**********found**********/ __1__ fun(struct student a) { int i; a.sno = 10002; /**********found**********/ strcpy(__2__, "LiSi"); /**********found**********/ for (i=0; i<3; i++) __3__+= 1; return a; } int main() { struct student s={10001,"ZhangSan", 95, 80, 88}, t; int i; printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name); for (i=0; i<3; i++) printf("%6.2f ", s.score[i]); printf("\n"); t = fun(s); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name); for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <stdlib.h> #define N 20 int fun( int *b ) { /**********found**********/ int t[N] ,i, num for (i=0; i<N; i++) if(b[i]>=10) /**********found**********/ t[++num]=b[i]; /**********found**********/ for(i=0; i<nun; i++) b[i]=t[i]; return num; } int main() { int a[N],i,num; printf("a数组中的数据 :\n"); for (i=0;i<N ;i++) { a[i]=rand()%21; printf("%4d",a[i]); } printf("\n"); num=fun(a); for (i=0;i<num ;i++) printf("%4d",a[i]); printf("\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:将两个两位正整数a、b合并形成一个整数存放在c中,合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,将b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12时,调用该函数后,c=5142。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(int a, int b, long *c) { } int 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(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, a,b ; long c ; rf = fopen("in.dat", "r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d,%d", &a, &b) ; fun(a, b, &c) ; fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ; } fclose(rf) ; fclose(wf) ; }
1.(1)struct student (2)a.name (3)a.score[i] 2. int t[N] ,i, num=0; t[num++]=b[i]; for (i=0; i<num; i++) 3. void fun(int a, int b, long *c) { *c=1000*(a%10)+100*(b/10)+10*(a/10)+b%10; }
第7套
1.程序填空题
给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:41 17 34 0 19 24 28 8 12 14,平均值为:19.700000
移动后的输出为:17 0 19 8 12 14 41 34 24 28。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 10 double fun(double *x) { int i, j; double av, y[N]; av=0; /**********found**********/ for(i=0; i<N; i++) av +=__1__; av/=N; for(i=j=0; i<N; i++) if( x[i]<av ) { /**********found**********/ y[j]=x[i]; x[i]=-1; __2__; } i=0; while(i<N) { if (x[i]!=-1) y[j++]=x[i]; /**********found**********/ __3__; } for (i=0; i<N; i++) x[i] = y[i]; return av; } int main() { int i; double x[N]; for(i=0; i<N; i++) { x[i]=rand()%50; printf("%4.0f ",x[i]); } printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n"); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:计算并输出下列级数的前N项之和SN,直到SN+1大于q为止,q的值通过形参传入。
SN= 2/1+3/2+4/3+……+(N+1)/N
例如,若q的值为50.0,则函数值为49.394948。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> 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; } int main() { printf("%f\n",fun(50)); return 0; }
3.程序设计题
编写函数fun,它的功能是:将两个两位正整数a、b合并形成一个整数存放在c中,合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,将b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12时,调用该函数后,c=4152。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(int a, int b, long *c) { } int 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(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, a,b ; long c ; rf = fopen("in.dat", "r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d,%d", &a, &b) ; fun(a, b, &c) ; fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ; } fclose(rf) ; fclose(wf) ; }
1.(1)x[i] (2)j++ (3)i++ 2. s=s+1.0*(n+1)/n; return t; 3. void fun(int a, int b, long *c) { *c=1000*(a/10)+100*(b/10)+10*(a%10)+b%10; }
第8套
1.程序填空题
给定程序中,函数fun的功能是:有N*N矩阵,根据给定的m(m<=N)值,将每行元素中得值均右移m个位置,左边置为0。
例如,N=3,m=2,有下列矩阵
1 2 3
4 5 6
7 8 9
程序执行结果为
0 0 1
0 0 4
0 0 7
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 4 void fun(int (*t)[N], int m) { int i, j; /**********found**********/ for(i=0; i<N; ___1___ ) { 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; } } int 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<N; i++) { for(j=0; j<N; j++) printf("%2d ",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<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } return 0; }
2.程序修改题
给定程序中,函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun(char s[], int n) { char a[80] , *p; int i; /**********found***********/ s=p; for(i=0; i<n; i++) a[i]='*'; do { a[i]=*p; i++; /**********found***********/ } while(*p); a[i]=0; strcpy(s,a); } int main() { int n; char s[80]; printf("\nEnter a string : "); gets(s); printf("\nThe string \"%s\"\n",s); printf("\nEnter n ( number of * ) : "); scanf("%d",&n); fun(s,n); printf("\nThe string after inster : \"%s\" \n" ,s); return 0; }
3.程序设计题
编写函数fun,其功能是:统计各年龄段的人数。N个年龄通过随机函数获得,并放在主函数的age数组中;要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,……,把100岁(含100)以上的人数都放在d[10]中。结果在主函数中输出。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 50 #define M 11 void fun( int *a, int *b) { } double rnd() { static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return((double)r/m); } int main() { int age[N], i, d[M]; for(i=0; i<N;i++)age[i]=(int)(115*rnd()); printf("The original data :\n"); for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]); printf("\n\n"); fun(age, d); for(i=0;i<10;i++) printf("%4d---%4d : %4d\n",i*10,i*10+9,d[i]); printf(" Over 100 : %4d\n",d[10]); NONO(d); return 0; } void NONO(int d[M]) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *wf ; int i ; wf = fopen("bc.out", "w") ; for(i = 0 ; i < 10 ; i++) fprintf(wf, "%4d---%4d : %4d\n", i*10, i*10+9, d[i]) ; fprintf(wf, " Over 100 : %4d\n", d[10]) ; fclose(wf) ; }
1.(1)i++ (2)m (3)m 2. p=s; *p++ 3. void fun( int *a, int *b) { int i; for (i=0;i<M;i++) b[i]=0; for (i=0;i<N;i++) if (a[i]>=0 && a[i]<100) b[a[i]/10]++; else if (a[i]>=100) b[10]++; }
第9套
1.程序填空题
给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根保存到名为myfile1.txt的文本文件中,然后再顺序读出显示在屏幕上。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <math.h> int fun(char *fname ) { FILE *fp; int i,n; float x; if((fp=fopen(fname,"w"))==NULL) return 0; for(i=1;i<=10;i++) /**********found**********/ fprintf(___1___,"%d %f\n",i,sqrt((double)i)); printf("\nSucceed!!\n"); /**********found**********/ ___2___; printf("\nThe data in file :\n"); /**********found**********/ if((fp=fopen(___3___,"r"))==NULL) return 0; fscanf(fp,"%d%f",&n,&x); while(!feof(fp)) { printf("%d %f\n",n,x); fscanf(fp,"%d%f",&n,&x); } fclose(fp); return 1; } int main() { char fname[]="myfile1.txt"; fun(fname); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将字符串中得字符按逆序输出,但不改变字符串的内容。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ fun (char a) { if (*a) { fun(a+1) ; /************found************/ printf("%c" *a) ; } } int main() { char s[10]="abcd"; printf("处理前字符串=%s\n处理后字符串=", s); fun(s); printf("\n") ; return 0; }
3.程序设计题
编写函数fun,其功能是:比较两个字符串的长度(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); char *fun(char *s,char *t) { } int main() { char a[20],b[20],*p,*q; printf("Input 1th string:") ; gets(a); printf("Input 2th string:") ; gets(b); printf("%s\n",fun(a,b)); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char a[20], b[20] ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s %s", a, b) ; fprintf(wf, "%s\n", fun(a, b)) ; } fclose(fp) ; fclose(wf) ; }
1.(1)fp (2)fclose(fp) (3)fname 2. void fun (char *a) printf("%c",*a); 3. char *fun(char *s,char *t) { int i,j; for (i=0;s[i]!='\0';i++) ; for (j=0;t[j]!='\0';j++) ; if (i>=j) return s; else return t; }
第10套
1.程序填空题
给定程序中,函数fun的功能是:将带头结点的单链表逆置。
若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头到尾结点数据域依次为:10、8、6、4、2。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 5 typedef struct node { int data; struct node *next; } NODE; void fun(NODE *h) { NODE *p, *q, *r; /**********found**********/ p = h->__1__; /**********found**********/ if (p==__2__) return; q = p->next; p->next = NULL; while (q) { r = q->next; q->next = p; /**********found**********/ p = q; q = __3__; } h->next = p; } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h = (NODE *)malloc(sizeof(NODE)); h->next = NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h->next == NULL) h->next = p = q; else { p->next = q; p = q; } } return h; } void outlist(NODE *h) { NODE *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"); } } int main() { NODE *head; int a[N]={2,4,6,8,10}; head=creatlist(a); printf("\nThe original list:\n"); outlist(head); fun(head); printf("\nThe list after inverting :\n"); outlist(head); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:判断一个整数m是否是素数,若是返回1,否则返回0。
在主函数中,若fun返回1输出YES,若fun返回0输出NO!。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun ( int m ) { int k = 2; while (k<=m && (m%k)) /************found************/ k++ /************found************/ if (m = k ) return 1; else return 0; } int main( ) { int n; printf( "\nPlease enter n: " ); scanf( "%d", &n ); if ( fun ( n ) ) printf( "YES\n" ); else printf( "NO!\n" ); return 0; }
3.程序设计题
编写函数fun,其功能是:把a所指的结构体数组中分数最低的学生数据放在h所指的数组中(注意:分数最低的学生可能不止1个),函数返回分数最低的学生的人数。
注意:请勿改动主函数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 lowest 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)next (2)NULL (3)r 2. k++; if (m <= k ) 或 if (m == k ) 3. int fun(STREC *a,STREC *b) { int i,n=0,min; min=a[0].s; for (i=1;i<N;i++) if (min>a[i].s) min=a[i].s; for (i=0;i<N;i++) if (min==a[i].s) b[n++]=a[i]; return n; }