计算机等级考试二级C语言上机题集(第66~70套)
第66套
1.程序填空题
给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符。若找不到相同的字符则函数不做任何处理。
例如,s所指字符串为:baacda,c中的字符为a,执行后s所指字符串为:baaaacdaa。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s, char c) { int i, j, n; /**********found**********/ for(i=0; s[i]!=___1___ ; i++) if(s[i]==c) { /**********found**********/ n=___2___ ; while(s[i+1+n]!='\0') n++; for(j=i+n+1; j>i; j--) s[j+1]=s[j]; /**********found**********/ s[j+1]=___3___ ; i=i+1; } } int main() { char s[80]="baacda", c; printf("\nThe string: %s\n",s); printf("\nInput a character: "); scanf("%c",&c); fun(s,c); printf("\nThe result is: %s\n",s); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将十进制正整数m转换成k(2<=k<=9)进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun(int m,int k) { int aa[20],i; for (i=0;m;i++) { /************found************/ aa[i]=m/k; m/=k; } /************found************/ for(;i;i--) printf("%d",aa[i]); } int main() { int b,n; printf("\nPlease enter a number and a base:\n"); scanf("%d %d",&n,&b); fun(n,b); printf("\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。
例如,若有5门课程的成绩是:90.5、72、80、61.5、55,则函数值为:71.80。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); float fun(float *a,int n) { } int main() { float score[30]={90.5,72,80,61.5,55},aver; aver=fun(score,5); printf("\nAverage score is: %5.2f\n",aver); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, j ; float aver, score[5] ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { for(j = 0 ; j < 5 ; j++) fscanf(fp,"%f,",&score[j]) ; aver = fun(score, 5) ; fprintf(wf, "%5.2f\n", aver) ; } fclose(fp) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)'\0' (2)0 (3)c 2. aa[i]=m%k; for(i=i-1;i>=0;i--) 3. float fun(float *a,int n) { float sum=0.0; int i; for (i=0;i<n;i++) sum+=a[i]; return sum/n; }
第67套
1.程序填空题
给定程序中,函数fun的功能是:将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。
例如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #include <ctype.h> #define N 9 long ctod(char *s) { long d=0; while(*s) if (isdigit( *s)) { /**********found**********/ d=d*10+*s-__1__; /**********found**********/ __2__; } return d; } long fun(char *a, char *b) { /**********found**********/ return __3__; } int main() { char s1[N],s2[N]; do { printf("Input string s1 : "); gets(s1); } while (strlen(s1)>N); do { printf("Input string s2 : "); gets(s2); } while (strlen(s2)>N); printf("The result is: %ld\n", fun(s1,s2)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:计算函数
F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x!=y,z!=y。
例如,当x=9,y=11,z=15时,函数值为-3.50。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <math.h> #define FU(m,n) (m/n) float fun(float a,float b,float c) { float value; /************found************/ value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/ Return(Value); } int main() { float x,y,z,sum; printf("Input x y z: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if (x==y||y==z) {printf("Data error!\n");} sum=fun(x,y,z); printf("The result is : %5.2f\n",sum); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。
例如,字符串中的内容为:*****A*BC*DEF*G***,删除后,字符串的内容应当为:A*BC*DEF*G***。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.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)'0' (2)s++ (3)ctod(a)+ctod(b) 2. value=FU((a+b),(a-b))+FU((c+b),(c-b)); return(value); 3. void fun(char *a) { int i,j; for (i=0;a[i]=='*';i++); for (j=0;a[i]!='\0';i++) a[j++]=a[i]; a[j]='\0'; }
第68套
1.程序填空题
给定程序中,通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是:从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename) { FILE *fp; int i, j; STU s[N], t; /**********found**********/ fp = fopen(filename, __1__); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) /**********found**********/ if (s[i].sno __2__s[j].sno) { t=s[i]; s[i]=s[j]; s[j]=t; } fp = fopen(filename, "wb"); /**********found**********/ __3__(s, sizeof(STU), N, fp); fclose(fp); } int main() { STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78}, {10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}, {10001,"MaChao", 91, 92, 77}}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf("\n\nThe original data :\n\n"); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno, t[j].name); for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]); printf("\n"); } fun("student.dat"); printf("\n\nThe data after sorting :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), 5, 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.程序修改题
给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun(char *s) { int i,j; for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') /**********found**********/ s[j]=s[i]; /**********found**********/ s[j]="\0"; } int main() { char item[80]; printf("\nEnter a string : "); gets(item); printf("\nThe string is : \"%s\"\n",item); fun(item); printf("\nThe string of changing is :\"%s\"\n",item); return 0; }
3.程序设计题
编写函数fun,它的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应为:WSHWSHWSHWSH。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 3 #define N 4 void NONO(void); void fun(char (*s)[N], char *b) { } int main() { char a[100],w[M][N]={{'W','W','W','W'}, {'S','S','S','S'},{'H','H','H','H'}}; int i,j; printf("The matrix:\n"); for(i=0; i<M; i++) { for(j=0;j<N; j++) printf("%3c",w[i][j]); printf("\n"); } fun(w,a); printf("The A string:\n");puts(a); printf("\n\n"); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i,j,k ; char a[100],w[M][N], b ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(k = 0 ; k < 10 ; k++) { for(i = 0 ; i < M ; i++) { for(j = 0 ; j < N ; j++) fscanf(rf, "%c", &w[i][j]) ; fscanf(rf, "%c", &b) ; } fun(w, a) ; fprintf(wf, "%s\n", a) ; } fclose(rf) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)"rb" (2)> (3)fwrite 2. s[j++]=s[i]; s[j]='\0'; 3. void fun(char (*s)[N], char *b) { int i,j,k=0; for (j=0;j<N;j++) for (i=0;i<M;i++) b[k++]=s[i][j]; b[k]='\0'; }
第69套
1.程序填空题
给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移一个位置,右边被移出矩阵的元素绕回左边。
例如,N=4,有下列矩阵
21 12 13 24
25 16 47 38
29 11 32 54
42 21 33 10
移动后结果为
24 21 12 13
38 25 16 47
54 29 11 32
10 42 21 33
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 4 void fun(int (*t)[N]) { int i, j, x; /**********found**********/ for(i=0; i<___1___; i++) { /**********found**********/ x=t[i][___2___] ; for(j=N-1; j>0; j--) t[i][j]=t[i][j-1]; /**********found**********/ t[i][___3___]=x; } } int main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("The original array:\n"); for(i=0; i<N; i++) { for(j=0;j<N;j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); 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的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
例如,若输入:I am a student to take the examination,则应输出:I aM A studenT tO takE thE examinatioN。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <ctype.h> #include <string.h> void fun( char *p ) { int k = 0; for( ; *p; p++ ) if( k ) { /**********found***********/ if( p == ' ' ) { k = 0; /**********found***********/ * (p-1) = toupper( *( p - 1 ) ) } } else k = 1; } int main() { char chrstr[64]; int d ; printf( "\nPlease enter an English sentence within 63 letters: "); gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; printf("\n\nBefore changing:\n %s", chrstr); fun(chrstr); printf("\nAfter changing:\n %s", chrstr); return 0; }
3.程序设计题
编写函数fun,它的功能是:对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
例如,原来的字符串为CEAedca,排序后输出为:CedcEAa。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun(char *s,int num) { } int main() { char s[10]; printf("输入7个字符的字符串:"); gets(s); fun(s,7); printf("\n%s",s); NONO(); return 0; } void NONO(void) { /* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ char s[10] ; FILE *rf, *wf ; int i = 0 ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; while(i < 10) { fgets(s,10,rf) ; s[7] = 0 ; fun(s,7); fprintf(wf, "%s\n", s) ; i++ ; } fclose(rf) ; fclose(wf) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)N (2)N-1 (3)0 2. if( *p == ' ' ) * (p-1) = toupper(*(p-1)); 3. void fun(char *s,int num) { int i,j,k; char t; for (i=1;i<num-2;i++) { k=i; for (j=i+1;j<num-1;j++) if (s[k]<s[j]) k=j; t=s[i]; s[i]=s[k]; s[k]=t; } }
第70套
1.程序填空题
给定程序中,函数fun的功能是:找出N*N矩阵中每列元素中的最大值,并按顺序依次放入形参b所指的一维数组中。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 4 void fun(int (*a)[N], int *b) { int i,j; for(i=0; i<N; i++) { /**********found**********/ b[i]= __1__; for(j=1; j<N; j++) /**********found**********/ if(b[i] __2__ a[j][i]) b[i]=a[j][i]; } } int main() { int x[N][N]={ {12,5,8,7},{6,1,9,3}, {1,2,3,4},{2,8,4,3} },y[N],i,j; printf("\nThe matrix :\n"); for(i=0;i<N; i++) { for(j=0;j<N; j++) printf("%4d",x[i][j]); printf("\n"); } /**********found**********/ fun(__3__); printf("\nThe result is:"); for(i=0; i<N; i++) printf("%3d",y[i]); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:按以下递归公式求函数值
例如,当n=5时,函数值为18;当n=3时,函数值为14。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ void fun ( n ) { int c; /************found************/ if(n=1) c = 10 ; else c= fun(n-1)+2; return(c); } int main() { int n; printf("Enter n : "); scanf("%d",&n); printf("The result : %d\n", fun(n)); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*;若少于或等于n个,则什么也不做。前面和中间的*号不删除。
例如,字符串中的内容为:***A*BC*DEF*G*****,若n的值为4,删除后,字符串的内容应当为:***A*BC*DEF*G****;若n的值为8,则字符串的内容仍为:***A*BC*DEF*G*****。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun( char *a,int n) { } int main() { char s[81]; int n; printf("Enter a string:\n"); gets(s); printf("Enter n : "); scanf("%d",&n); fun( s,n ); printf("The string after deleted:\n"); puts(s); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i, n ; char s[81] ; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(in, "%s", s) ; fscanf(in, "%d", &n) ; fun(s,n) ; fprintf(out, "%s\n", s) ; } fclose(in) ; fclose(out) ; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.(1)a[0][i] (2)< (3)x,y 2. int fun(int n) if(n==1) 3. void fun( char *a,int n) { int i,j; for (i=0,j=0;a[i]!='\0';i++) if (a[i]!='*') j=0; else j++; if (j>n) a[i-j+n]='\0'; }