计算机等级考试二级C语言上机题集(第31~35套)
第31套
1.程序填空题
给定程序中,函数fun的功能是:有N*N矩阵,将矩阵中的外围元素顺时针旋转。操作顺序是:首先将第1行元素值存入临时数组r,然后使第1列成为第1行,最后1行成为第1列,最后1列成为最后1行,临时数组中的元素成为最后1列。
例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
旋转结果为
7 4 1
8 5 2
9 6 3
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 4 void fun(int (*t)[N]) { int j ,r[N]; for(j=0; j<N; j++) r[j]=t[0][j]; for(j=0; j<N; j++) /**********found**********/ t[0][N-j-1]=t[j][___1___ ]; for(j=0; j<N; j++) t[j][0]=t[N-1][j]; /**********found**********/ for(j=N-1; j>=0;___2___ ) t[N-1][N-1-j]=t[j][N-1]; for(j=N-1; j>=0; j--) /**********found**********/ t[j][N-1]=r[___3___]; } int main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe 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的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,设t1和t2所指字符串的长度相同。
例如,当s所指字符串为:abcdabfab,t1所指字符串为:ab,t2所指字符串为:99,运行后w所指数组中的内容为:abcdabf99。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun(char *s,char *t1,char *t2,char *w) { char *p , *r, *a; strcpy( w, s ); /************found************/ while (w) { p = w; r = t1; while (*r) /************found************/ IF ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' ) a = w; w++; } r = t2; while (*r) { *a = *r; a++; r++; } } int main() { char s[100],t1[100],t2[100],w[100]; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)==strlen(t2) ) { fun( s, t1, t2, w); printf("\nThe result is : %s\n", w); } else printf("\nError : strlen(t1) != strlen(t2)\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:将s所指字符串中ASCII码值为奇数的字符删除,串中剩余字符所形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为:ABCDEFG12345,在t所指数组中的内容应为:BDF24。
注意:请勿改动主函数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)0 (2)j-- (3)j 2. while (*w) if ( *r == *p ) 3. void fun(char *s, char t[]) { int i,j; for (i=0,j=0;s[i]!='\0';i++) if (s[i]%2==0) t[j++]=s[i]; t[j]='\0'; }
第32套
1.程序填空题
给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。
例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
移动结果为
3 1 2
6 4 5
9 7 8
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#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的功能是:将长整数s中每一位上为偶数的数依次取出,构成一个新数放在t中,高位仍在高位,低位仍在低位。
例如,s=87653142时,t=8642。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun(long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s%10; /************found************/ if (d%2=0) { *t=d* sl+ *t; sl *= 10; } /************found************/ s \= 10; } } int main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); return 0; }
3.程序设计题
编写函数fun,它的功能是:从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void fun(char(*a)[81],int num,char **max) { } int main() { char ss[10][81],*ps; int n,i=0; printf("输入若干个字符串:"); gets(ss[i]); puts(ss[i]); while(!strcmp(ss[i],"****")==0) { i++; gets(ss[i]); puts(ss[i]); } n=i; fun(ss,n,&ps); printf("\nmax=%s\n",ps); return 0; }
1.(1)N (2)N-1 (3)0 2. if (d%2==0) s /= 10; 3. void fun(char(*a)[81],int num,char **max) { int i; *max=a[0]; for (i=1;i<num;i++) if (strlen(*max)<strlen(a[i])) *max=a[i]; }
第33套
1.程序填空题
给定程序中,函数fun的功能是:将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/ if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, "w"))==NULL) return 0; printf("\nThe data in file :\n"); ch=fgetc(fs); /**********found**********/ while(!feof(___2___)) { putchar( ch ); /**********found**********/ fputc(ch,___3___); ch=fgetc(fs); } fclose(fs); fclose(ft); printf("\n\n"); return 1; } int main() { char sfname[20] ="myfile1",tfname[20]="myfile2"; FILE *myf; int i; char c; myf=fopen(sfname,"w"); printf("\nThe original data :\n"); for(i=1; i<30; i++) { c='A'+rand()%25; fprintf(myf,"%c",c); printf("%c",c); } fclose(myf); printf("\n\n"); if (fun(sfname, tfname)) printf("Succeed!"); else printf("Fail!"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:删除p所指字符串中的所有空白字符(包括tab字符、回车符及换行符)。输入字符串时用“#”结束输入。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #include <ctype.h> void fun(char *p) { int i,t; char c[80]; /************found************/ For (i = 0,t = 0; p[i] ; i++) if(!isspace(*(p+i))) c[t++]=p[i]; /************found************/ c[t]="\0"; strcpy(p,c); } int main( ) { char c,s[80]; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') { s[i]=c;i++;c=getchar(); } s[i]='\0'; fun(s); puts(s); return 0; }
3.程序设计题
编写函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写字母(若该位置上不是字母,则不转换)。
例如,若输入abc4Efg,则应输出aBc4EFg。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun(char *ss) { } int main( ) { char tt[81] ; printf("\nPlease enter an string:\n" ); gets(tt); printf("\nAfter changing, the string\n\"%s\"", tt); fun(tt); printf( "\nbecomes\n \"%s\"\n", tt ); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; char tt[81] ; int i ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", tt) ; fun( tt ) ; fprintf(wf, "%s\n", tt) ; } fclose(fp) ; fclose(wf) ; }
1.(1)"r" (2)fs (3)ft 2. for (i=0,t=0; p[i]; i++) c[t]='\0'; 3. void fun(char *ss) { int i; for (i=0;ss[i]!='\0';i++) if (i%2==1) { if (ss[i]>='a' && ss[i]<='z') ss[i]-=32; } }
第34套
1.程序填空题
给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指的字符数组中,形成一个新串。
例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指数组中的字符串应为:aachjlsw。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s, char *p) { int i, j, n, x, t; n=0; for(i=0; s[i]!='\0'; i++) n++; for(i=1; i<n-2; i=i+2) { /**********found**********/ ___1___; /**********found**********/ for(j=___2___+2 ; j<n; j=j+2) if(s[t]>s[j]) t=j; if(t!=i) { x=s[i]; s[i]=s[t]; s[t]=x; } } for(i=1,j=0; i<n; i=i+2, j++) p[j]=s[i]; /**********found**********/ p[j]=___3___; } int main() { char s[80]="baawrskjghzlicda", p[50]; printf("\nThe original string is : %s\n",s); fun(s,p); printf("\nThe result is : %s\n",p); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:从低位开始取出长整数变量s中偶数位上的数,依次构成一个新数放在t中,高位仍在高位,低位仍在低位。
例如,s=7654321时,t=642。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ void fun (long s, long t) { long sl=10; s /= 10; *t = s % 10; /************found************/ while ( s < 0) { s = s/100; *t = s%10*sl + *t; sl = sl * 10; } } int main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); return 0; }
3.程序设计题
编写函数fun,它的功能是:将两个两位数的正整数a,b合并为一个整数放在c中。合并方式是:将a数的十位和个位依次放在c数的百位和个位上,将b数的十位和个位依次放在c数的十位和千位上。
例如,当a=45,b=12时,调用函数后,c=2415。
注意:请勿改动主函数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: %ld\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)t=i (2)i (3)'\0' 2. void fun(long s, long *t) while ( s > 0) 3. void fun(int a, int b, long *c) { *c=(a/10)*100+(a%10)+(b/10)*10+(b%10)*1000; }
第35套
1.程序填空题
给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第1个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s) { int i, n, k; char c; n=0; for(i=0; s[i]!='\0'; i++) n++; /**********found**********/ if(n%2==0) k=n-___1___ ; else k=n-2; /**********found**********/ c=___2___ ; for(i=k-2; i>=1; i=i-2) s[i+2]=s[i]; /**********found**********/ s[1]=___3___ ; } int main() { char s[80]="abcdefgh"; printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。
例如,若形参是字母A,则转换为字母f;若形参是字母W,则转换为字母b。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <ctype.h> char fun(char c) { if( c>='A' && c<='Z') /**************found**************/ c=c-32; if(c>='a' && c<='u') /**************found**************/ c=c-5; else if(c>='v'&&c<='z') c=c-21; return c; } int main() { char c1,c2; printf("\nEnter a letter(A-Z): "); c1=getchar(); if (isupper(c1)) { c2=fun(c1); printf("\nThe letter \'%c\' change to \'%c\'\n", c1,c2); } else printf("\nEnter (A-Z)!\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算
例如,n=20时,S=534.188884。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <math.h> void NONO(void); double fun(int n) { } int main() { int n; double s; printf("\n\nInput n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 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, "%f\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)1 (2)s[k] (3)c 2. c=c+32; c=c+5; 3. double fun(int n) { double s=0.0,t=0.0; int i; for (i=1;i<=n;i++) { t=t+sqrt(i); s+=t; } return s; }