计算机等级考试二级C语言上机题集(第76~80套)
第76套
1.程序填空题
给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。
例如,若x=5时,100~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、230、302、311、320、401、410、500。共有15个。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> int fun(int x) { int n, s1, s2, s3, t; n=0; t=100; /**********found**********/ while (t<=__1__) { /**********found**********/ s1=t%10; s2=(__2__)%10; s3=t/100; /**********found**********/ if(s1+s2+s3==__3__) { printf("%d ",t); n++; } t++; } return n; } int main() { int x=-1; while(x<0) { printf("Please input(x>0): "); scanf("%d",&x); } printf("\nThe result is: %d\n",fun(x)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:从整数10至55之间,选出能被3整除且有一个位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1存放个位数,a2存放十位数。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun (int *b) { int k,a1,a2,i=0; for (k=10;k<=55;k++) { /************found************/ a2=k%10; a1=k-a2*10; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } } /************found************/ return k; } int main() { int a[100],k,m; m=fun(a); printf("The result is:\n"); for (k=0;k<m;k++) printf("%4d",a[k]); printf("\n"); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。
例如,字符串中的内容为:*****A*BC*DEF*G***,删除后,字符串的内容应当为:*****A*BC*DEF*G。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun( char *a ) { } int main() { char s[81]; printf("Enter a string:\n"); gets(s); fun( s ); printf("The string after deleted:\n"); puts(s); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i ; char s[81] ; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(in, "%s", s) ; fun(s) ; fprintf(out, "%s\n", s) ; } fclose(in) ; fclose(out) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)999 (2)t/10 (3)x 2. a2=k/10; return i; 3. void fun( char *a ) { int i,j; for (i=0,j=0;a[i]!='\0';i++) if (a[i]!='*') j=0; else j++; a[i-j]='\0'; }
第77套
1.程序填空题
给定程序中,函数fun的功能是:计算
直到||<=10-3,并把计算结果作为函数值返回。
例如,若形参e的值为1e-3,函数的返回值为2.985678。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> double fun(double e) { int i; double s, x; /**********found**********/ s=0; i=__1__; x=1.0; while(x>e) { /**********found**********/ __2__; /**********found**********/ x=(2.0*i-1)/((__3__)*(2.0*i)); s=s+x; } return s; } int main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); }
2.程序修改题
给定程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
例如,当s所指字符串为“ABCD”时,则t所指字符串中的内容应为“ABCDDCBA”。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> /************found************/ void fun (char s, char t) { int i, d; d = strlen(s); for (i = 0; i<d; i++) t[i] = s[i]; for (i = 0; i<d; i++) t[d+i] = s[d-1-i]; /************found************/ t[2*d-1] = '\0'; } 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); return 0; }
3.程序设计题
编写函数fun,它的功能是:将s所指字符串中除了下标为奇数,同时ASCII码值也为奇数的字符外,其余的字符全部删除;串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:ABCDEFG12345,则t所指数组中的内容应为:135。
注意:请勿改动主函数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) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)0 (2)i++ (3)2.0*i 2. void fun (char *s, char *t) t[2*d] = '\0'; 3. void fun(char *s, char t[]) { int i,j=0; for (i=0;s[i]!='\0';i++) if (i%2==1 && s[i]%2==1) t[j++]=s[i]; t[j]='\0'; }
第78套
1.程序填空题
给定程序中,函数fun的功能是:逆置数组元素中的值。
例如,若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(int a[], int n) { int i,t; /**********found**********/ for (i=0; i<___1___; i++) { t=a[i]; /**********found**********/ a[i] = a[n-1-___2___]; /**********found**********/ ___3___ = t; } } int main() { int b[9]={1,2,3,4,5,6,7,8,9}, i; printf("\nThe original data :\n"); for (i=0; i<9; i++) printf("%4d ", b[i]); printf("\n"); fun(b, 9); printf("\nThe data after invert :\n"); for (i=0; i<9; i++) printf("%4d ", b[i]); printf("\n"); }
2.程序修改题
给定程序中,函数fun的功能是:计算num的各位上的数字之积。
例如,若输入252,则输出应为20;若输入202,则输出应为0。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> long fun(long num) { /************found************/ long k; do { k*=num%10; /************found************/ num\=10; } while(num); return (k); } int main() { long n; printf("Please enter a number:"); scanf("%ld",&n); printf("\n%ld\n",fun(n)); return 0; }
3.程序设计题
编写函数fun,它的功能是:找出一维数组元素中最大的值和它所在的下标,最大的值和它所在的下标分别通过形参max和index传回。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <stdlib.h> void NONO(void); void fun(int a[], int n, int *max, int *d) { } int main() { int i, x[20], max , index, n = 10; for (i=0;i < n;i++) { x[i] = rand()%50; printf("%4d", x[i]) ; } printf("\n"); fun( x, n , &max, &index); printf("Max =%5d , Index =%4d\n",max, index ); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, x[20], max,index,n=10,j; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { for(j = 0 ; j < n ; j++) fscanf(fp, "%d,", &x[j]) ; fun( x, n , &max, &index); fprintf(wf, "Max=%d,Index=%d\n",max,index); } fclose(fp) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)n/2 (2)i (3)a[n-1-i] 2. long k=1; num/=10; 3. void fun(int a[], int n, int *max, int *d) { int i; *d=0; *max=a[0]; for (i=1;i<n;i++) if (*max<a[i]) { *max=a[i]; *d=i; } }
第79套
1.程序填空题
给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。
例如,有10个正数:40 30 32 40 6 17 45 15 48 26,平均值为:35.500000,主函数中输出m=30.0。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #define N 10 double fun(double x[],double *av) { int i,j; double d,s; s=0; for(i=0; i<N; i++) s = s +x[i]; /**********found**********/ __1__=s/N; d=32767; for(i=0; i<N; i++) if(x[i]<*av && *av - x[i]<=d) { /**********found**********/ d=*av-x[i]; j=__2__; } /**********found**********/ return __3__; } int main() { int i; double x[N],av,m; for(i=0; i<N; i++) { x[i]=rand()%50; printf("%4.0f ",x[i]); } printf("\n"); m=fun(x,&av); printf("\nThe average is: %f\n",av); printf("m=%5.1f ",m); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求s=aa..aa-…aaa-aa-a(此处aa..aa表示n个a,a和n的值在1至9之间)。
例如,a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33-3,其值是:296298。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> long fun (int a, int n) { int j ; /**************found**************/ long s = 0, t = 1 ; for ( j = 0 ; j < n ; j++) t = t * 10 + a ; s = t ; for ( j = 1 ; j < n ; j++) { /**************found**************/ t = t % 10 ; s = s - t ; } return(s) ; } int main( ) { int a, n ; printf( "\nPlease enter a and n:") ; scanf( "%d%d", &a, &n ) ; printf( "The value of function is: %ld\n", fun(a, n)); return 0; }
3.程序设计题
编写函数fun,它的功能是:统计tt字符串中’a’到’z’26个小写字母各自出现的次数,并依此放在pp所指数组中。
例如,输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun(char *tt, int pp[]) { } int main() { char aa[1000] ; int bb[26], k; printf( "\nPlease enter a char string:" ); scanf("%s", aa) ; fun(aa, bb ) ; for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ; printf( "\n" ) ; NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/ char aa[1000] ; int bb[26], k, i ; FILE *rf, *wf ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", aa) ; fun(aa, bb) ; for ( k = 0 ; k < 26 ; k++ ) fprintf (wf, "%d ", bb[k]) ; fprintf(wf, "\n" ) ; } fclose(rf) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)*av (2)i (3)x[j] 2. long s = 0, t = 0 ; t = t / 10 ; 3. void fun(char *tt, int pp[]) { int i; for (i=0;i<26;i++) pp[i]=0; for (i=0;tt[i]!='\0';i++) if (tt[i]>='a' && tt[i]<='z') pp[tt[i]-'a']++; }
第80套
1.程序填空题
给定程序中,通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是:从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖该学生原来的数据,其他学生的数据不变;若找不到,则什么都不做。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename, long sno) { FILE *fp; STU n; int i; fp = fopen(filename,"rb+"); /**********found**********/ while (!__1__) { fread(&n, sizeof(STU), 1, fp); /**********found**********/ if (n.sno__2__) break; } if (!feof(fp)) { for (i=0; i<3; i++) n.score[i] += 3; /**********found**********/ fseek(fp, -1L*__3__, SEEK_CUR); fwrite(&n, 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}}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); printf("\nThe original data :\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"); } fun("student.dat", 10003); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); printf("\nThe data after modifing :\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"); } return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求S的值。
例如,当k=10时,函数值应为:1.533852。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ void fun(int k) { int n; float s, w, p, q; n = 1; s = 1.0; while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } /************found************/ return s } int main() { printf("%f\n", fun (10)); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算下列级数和
例如,当n=10时,函数值为 0.909091。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); double fun(int n) { } int main() { printf("%f\n", fun(10)); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n ; double 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, "%f\n", s) ; } fclose(fp) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)feof(fp) (2)==sno (3)sizeof(STU) 2. float fun(int k) return s; 3. double fun(int n) { double s=0; int i; for (i=1;i<=n;i++) s+=1.0/(i*(i+1)); return s; }