计算机等级考试二级C语言上机题集(第61~65套)
第61套
1.程序填空题
给定程序中,函数fun的功能是:找出100~x(x<=999)之间所有整数中各位上数字之和为15的整数,然后输出;符合条件的整数个数作为函数值返回。
例如,若x=500时,100~500之间各位上数字之和为15的整数有: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个。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while (t<=__2__) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==15) { printf("%d ",t); n++; } /**********found**********/ __3__; } return n; } int main() { int x=-1; while(x>999||x<0) { printf("Please input(0<x<=999): "); scanf("%d",&x); } printf("\nThe result is: %d\n",fun(x)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #define N 5 #define M 81 /**********found**********/ fun(char (*sq)[M]) { int i; char *sp; sp=sq[0]; for(i=0;i<N;i++) if(strlen( sp)<strlen(sq[i])) sp=sq[i] ; /**********found**********/ return sq; } int main() { char str[N][M], *longest; int i; printf("Enter %d lines :\n",N); for(i=0; i<N; i++) gets(str[i]); printf("\nThe N string :\n",N); for(i=0; i<N; i++) puts(str[i]); longest=fun(str); printf("\nThe longest string :\n"); puts(longest); return 0; }
3.程序设计题
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 16 typedef struct { char num[10]; int s; } STREC; void fun(STREC a[]) { } int main() { STREC s[N]={{"GA005",85},{"GA003",76}, {"GA002",69},{"GA004",85},{"GA001",91}, {"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64}, {"GA014",91},{"GA011",66},{"GA017",64}, {"GA018",64},{"GA016",72}}; int i; FILE *out ; fun(s); printf("The data after sorted :\n"); for(i=0;i<N; i++) { if( (i)%4==0 )printf("\n"); printf("%s %4d ",s[i].num,s[i].s); } printf("\n"); out = fopen("out.dat","w") ; for(i=0;i<N; i++) { if( (i)%4==0 && i) fprintf(out, "\n"); fprintf(out, "%4d ",s[i].s); } fprintf(out,"\n"); fclose(out) ; return 0; }
1.(1)0 (2)x (3)t++ 2. char * fun(char (*sq)[M]) return sp; 3. void fun(STREC a[]) { int i,j,k; STREC t; for (i=0;i<N-1;i++) { k=i; for (j=i+1;j<N;j++) if (a[k].s<a[j].s) k=j; t=a[i]; a[i]=a[k]; a[k]=t; } }
第62套
1.程序填空题
给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩下的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。
例如,输入一个数:27638496,新的数为:739。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(unsigned long *n) { unsigned long x=0, i; int t; i=1; while(*n) /**********found**********/ { t=*n % __1__; /**********found**********/ if(t%2!= __2__) { x=x+t*i; i=i*10; } *n =*n /10; } /**********found**********/ *n=__3__; } int main() { unsigned long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } fun(&n); printf("\nThe result is: %ld\n",n); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为:abcdabfabcdx,t中的内容为ab时,输出的结果应为:abcdx。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> char * fun (char *s, char *t ) { char *p , *r, *a; /************found************/ a = Null; while ( *s ) { p = s; r = t; while ( *r ) /************found************/ if ( r == p ) { r++; p++; } else break; if ( *r == '\0' ) a = s; s++; } return a ; } int main() { char s[100], t[100], *p; printf("\nPlease enter string S :"); scanf("%s", s); printf("\nPlease enter substring t :"); scanf("%s", t); p = fun(s, t); if (p) printf("\nThe result is : %s\n", p); else printf("\nNot found !\n" ); return 0; }
3.程序设计题
编写函数fun,它的功能是:将s所指字符串中除了下标为偶数,同时ASCII码值也为偶数的字符外,其余的字符全部删除;串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:ABCDEFG123456,则t所指数组中的内容应为:246。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun(char *s, char t[]) { } int 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(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ char s[100], t[100] ; FILE *rf, *wf ; int i ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", s) ; fun(s, t) ; fprintf(wf, "%s\n", t) ; } fclose(rf) ; fclose(wf) ; }
1.(1)10 (2)0 (3)x 2. a = NULL; if ( *r == *p ) 3. void fun(char *s, char t[]) { int i,k; for (i=k=0; s[i]!='\0';i++) if (i%2==0 && s[i]%2==0) t[k++]=s[i]; t[k]='\0'; }
第63套
1.程序填空题
给定程序中,通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是:重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename, STU n) { FILE *fp; /**********found**********/ fp = fopen(__1__, "rb+"); /**********found**********/ fseek(fp, -1L*sizeof(STU), __2__); /**********found**********/ fwrite(__3__, sizeof(STU), 1, fp); fclose(fp); } int main() { STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, {10005,"ZhangSan", 95, 80, 88}}; STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); printf("\nThe original data :\n\n"); for (j=0; j<N; j++) { printf("\nNo:%ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } fun("student.dat", n); printf("\nThe data after modifing :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } return 0; }
2.程序修改题
给定程序中,函数Craetlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0~m-1的值。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; /**********found***********/ p=(NODE )malloc(sizeof(NODE)); h=p; p->next=NULL; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } /**********found***********/ return p; } void outlink(NODE *h) { NODE *p; p=h->next; printf("\n\nTHE LIST :\n\n HEAD "); while(p) { printf("->%d ",p->data); p=p->next; } printf("\n"); } int main() { NODE *head; head=Creatlink(8,22); outlink(head); return 0; }
3.程序设计题
编写函数fun,它的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> #define N 80 void NONO(void); int fun( char *s) { int flag=0,n=0; for ( ; *s; s++) { if (flag) { if (*s==' ') flag=0; } else if (*s!=' ') { flag = 1; n++; } } return n; } int main() { char line[N]; int num=0; printf("Enter a string :\n"); gets(line); num=fun( line ); printf("The number of word is : %d\n",num); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, num ; char line[N], *p ; rf = fopen("in.dat", "r") ; wf = fopen("out.dat", "w") ; for(i = 0 ; i < 10 ; i++) { fgets(line, N, rf) ; p = strchr(line, '\n') ; if (p != NULL) *p = 0 ; num = fun(line) ; fprintf(wf, "%d\n", num) ; } fclose(rf) ; fclose(wf) ; }
1.(1)filename (2)SEEK_END (3)&n 2. p=(NODE *)malloc(sizeof(NODE)); return h; 3. int fun( char *s) { int flag=0,n=0; for ( ; *s; s++) { if (flag) { if (*s==' ') flag=0; } else if (*s!=' ') { flag = 1; n++; } } return n; }
第64套
1.程序填空题
给定程序中,函数fun的功能是:将形参所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。
例如,形参s所指的字符串为:Abc@1x56,程序执行后t所指字符数组中的字符串应为:A@156。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> int fun(char *s, char *t) { int n=0; while(*s) { if(*s < 97) { /**********found**********/ *(t+n)= __1__ ; n++; } /**********found**********/ __2__ ; } *(t+n)=0; /**********found**********/ return __3__ ; } int main() { char s[81],t[81]; int n; printf("\nEnter a string:\n"); gets(s); n=fun(s,t); printf("\nThere are %d letter which ASCII code is less than 97: %s\n",n,t); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。
例如,n=8时,输入:193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763,所得平均值为:195.838745,在平均值以上的实数个数应为:5。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun(float x[], int n) { /************found************/ int j, c=0, float xa=0.0; for (j=0; j<n; j++ ) xa += x[j]/n; printf("ave =%f\n",xa); for (j=0; j<n; j++ ) /************found************/ if (x[j] => xa) c++; return c; } int main() { float x[100]={193.199,195.673,195.757,196.051, 196.092, 196.596, 196.579, 196.763}; printf("%d\n", fun (x, 8)); return 0; }
3.程序设计题
编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。
P=m!/(n!(m-n)!)
例如:m=12,n=8时,运行结果为495.000000。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); float fun(int m, int n) { } int main() { printf("P=%f\n", fun (12,8)); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, m, n ; float s; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%d,%d", &m, &n) ; s = fun(m, n) ; fprintf(wf, "%f\n", s) ; } fclose(fp) ; fclose(wf) ; }
1.(1)*s (2)s++ (3)n 2. int j, c=0; float xa=0.0; if (x[j] >= xa) 3. float fun(int m, int n) { float a1=1,a2=1,a3=1; int i; for (i=1;i<=m;i++) a1*=i; for (i=1;i<=n;i++) a2*=i; for (i=1;i<=m-n;i++) a3*=i; return a1/a2/a3; }
第65套
1.程序填空题
给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 20 void fun( int *a) { int i, x, n=0; x=rand()%20; /**********found**********/ while (n<__1__) { for(i=0; i<n; i++ ) /**********found**********/ if( x==a[i] ) __2__; /**********found**********/ if( i==__3__) { a[n]=x; n++; } x=rand()%20; } } int main() { int x[N]={0} ,i; fun( x ); printf("The result : \n"); for( i=0; i<N; i++ ) { printf("%4d",x[i]); if((i+1)%5==0)printf("\n"); } printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。
例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <math.h> double funx(double x) { return(2*x*x*x-4*x*x+3*x-6); } double fun( double m, double n) { /************found************/ int r; r=(m+n)/2; /************found************/ while(fabs(n-m)<0.001) { if(funx(r)*funx(n)<0) m=r; else n=r; r=(m+n)/2; } return r; } int main( ) { double m,n, root; printf("Enter m n : \n"); scanf("%lf%lf",&m,&n); root=fun( m,n ); printf("root = %6.3f\n",root); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。
例如,字符串中的内容为:*****A*BC*DEF*G***,删除后,字符串的内容应当为:*****ABCDEFG***。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(char *a,char *h,char *p) { } int main() { char s[81],*t,*f; printf("Enter a string:\n"); gets(s); t=f=s; while(*t) t++; t--; while (*t=='*') t--; while (*f=='*') f++; fun(s,f,t); printf("The string after deleted:\n");puts(s); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ char s[81],*t,*f; int i; FILE *rf,*wf; rf = fopen("in.dat","r"); wf = fopen("out.dat", "w") ; for (i=0;i<4;i++) { fscanf(rf,"%s",s); t=f=s; while(*t) t++; t--; while (*t=='*') t--; while (*f=='*') f++; fun(s,f,t); fprintf(wf,"%s\n",s); } fclose(rf); fclose(wf) ; }
1.(1)N 或 20 (2)break (3)n 2. double r; while(fabs(n-m)>=0.001) 3. void fun(char *a,char *h,char *p) { char *t1,*t2; for (t1=t2=h;*t1!='\0';t1++) if ((t1<=p && *t1!='*') || t1>p) { *t2=*t1; t2++; } *t2='\0'; }