计算机等级考试二级C语言上机题集(第91~95套)
第91套
1.程序填空题
给定程序中,函数fun的功能是:将形参n中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。
例如,若n=27638496,得到的新数为:64862。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> unsigned long fun(unsigned long n) { unsigned long x=0; int t; while(n) { t=n%10; /**********found**********/ if(t%2==__1__) /**********found**********/ x=__2__+t; /**********found**********/ n=__3__; } return x; } int main() { unsigned long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } printf("\nThe result is: %ld\n",fun(n)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:用选择法对数组中的N个元素按从小到大的顺序进行排序。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /************found************/ p = j for (i = j;i < n; i++) if(a[i] < a[p]) /************found************/ p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } } int main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若m=50,则程序输出:7 11 14 21 22 28 33 42 44 49。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 100 void fun (int m, int *a , int *n) { } int main() { int aa[M], n, k; fun ( 50, aa, &n ); for ( k = 0; k < n; k++ ) if((k+1)%20==0) printf("\n"); else printf( "%4d", aa[k] ); printf("\n") ; NONO( ); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n, j, k, aa[M], sum ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%d,", &j) ; fun(j, aa, &n) ; sum = 0 ; for(k = 0 ; k < n ; k++) sum+=aa[k] ; fprintf(wf, "%d\n", sum) ; } fclose(fp) ; fclose(wf) ; }
1.(1)0 (2)x*10 (3)n/10 2. p = j; p = i; 3. void fun (int m, int *a , int *n) { int i,k=0; for (i=1;i<=m;i++) if (i%7==0 || i%11==0) a[k++]=i; *n=k; }
第92套
1.程序填空题
给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为:asd123fgh5###43df
处理后新字符串为:123543asdfgh###df。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> char *fun(char *s) { int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i<n; i++) { if(isdigit(s[i])) { /**********found**********/ p[__1__]=s[i]; j++; } else { t[k]=s[i]; k++; } } /**********found**********/ for(i=0; i<__2__; i++) p[j+i]= t[i]; p[j+k]=0; /**********found**********/ return __3__; } int main() { char s[80]; printf("Please input: "); scanf("%s",s); printf("\nThe result is: %s\n",fun(s)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。
例如,若输入“Ab,cD”,则输出“AB,CD”。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> char* fun( char tt[] ) { int i; for( i = 0; tt[i]; i++ ) /**********found***********/ if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) /**********found***********/ tt[i] += 32; return( tt ); } int main( ) { char tt[81]; printf( "\nPlease enter a string: " ); gets( tt ); printf( "\nThe result string is:\n%s", fun( tt ) ); return 0; }
3.程序设计题
编写函数fun,它的功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,若输入:17,则应输出:9和4 6 8 9 10 12 14 15 16。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun( int m, int *k, int xx[] ) { } int main() { int m, n, zz[100]; printf("\nPlease enter an integer number between 10 and 100:"); scanf("%d", &n ); fun(n, &m, zz ); printf( "\n\nThere are %d non-prime numbers less than %d:", m, n ); for( n = 0; n < m; n++ ) printf( "\n %4d", zz[n] ); NONO(); return 0; } void NONO(void) { /* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ int m, n, zz[100]; FILE *rf, *wf ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; fscanf( rf, "%d", &n ); fun( n, &m, zz ); fprintf(wf, "%d\n%d\n", m, n ); for( n = 0; n < m; n++ ) fprintf(wf, "%d\n", zz[n] ); fclose(rf) ; fclose(wf) ; }
1.(1)j (2)k (3)p 2. if(('a'<=tt[i])&&(tt[i]<= 'z')) tt[i] -= 32; 3. void fun( int m, int *k, int xx[] ) { int i,j=0,t; for (i=4;i<m;i++) { for (t=2;t<=i/2;t++) if (i%t==0) break; if (t<=i/2) xx[j++]=i; } *k=j; }
第93套
1.程序填空题
给定程序中,函数fun的功能是:计算
例如,若形参e的值为1e-3,函数的返回值为0.551690。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> double fun(double e) { int i, k; double s, t, x; s=0; k=1; i=2; /**********found**********/ x=__1__/4; /**********found**********/ while(x __2__ e) { s=s+k*x; k=k*(-1); t=2*i; /**********found**********/ x=__3__/(t*t); i++; } return s; } int main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求出以下分数序列的前n项之和。
2/1, 3/2, 5/3, 8/5, 13/8, 21/13, ……
例如,若n=5,则应输出:8.391667。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ fun (int n) { int a, b, c, k; double s; s = 0.0; a = 2; b = 1; for ( k = 1; k <= n; k++ ) { /************found************/ s = s + (Double)a / b; c = a; a = a + b; b = c; } return s; } int main( ) { int n = 5; printf( "\nThe value of function is: %f\n", fun(n)); return 0; }
3.程序设计题
编写函数fun,它的功能是:求出一个2*M二维数组中最大元素的值,并将此值返回调用函数。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 4 void NONO(void); int fun (int a[][M]) { } int main() { int arr[2][M]={5,8,3,45,76,-4,12,82} ; printf("max =%d\n", fun(arr)) ; NONO( ) ; return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *wf ; int arr[][M]={5,8,3,90,76,-4,12,82} ; wf = fopen("out.dat","w") ; fprintf(wf, "max=%d\n", fun(arr)) ; fclose(wf) ; }
1.(1)3.0 (2)> (3)(t+1) 2. double fun (int n) s = s + (double)a / b; 3. int fun (int a[][M]) { int i,j,max; max=a[0][0]; for (i=0;i<2;i++) for (j=0;j<M;j++) if (max<a[i][j]) max=a[i][j]; return max; }
第94套
1.程序填空题
给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个字符串,且串长<M。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #define N 5 #define M 8 int fun(char (*ss)[M],char *t) { int i; /**********found**********/ for(i=0; i< __1__ ; i++) /**********found**********/ if(strcmp(ss[i],t)==0 ) return __2__ ; return -1; } int main() { char ch[N][M]={"if","while","switch", "int","for"},t[M]; int n,i; printf("\nThe original string\n"); for(i=0;i<N;i++) puts(ch[i]); printf("\n"); printf("\nEnter a string for search: "); gets(t); n=fun(ch,t); /**********found**********/ if(n==__3__) printf("\nDon't found!\n"); else printf("\nThe position is %d .\n",n); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。
例如,当a所指字符串中的内容为“abcdefg”,b所指在字符串中的内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1efg”;而当a所指字符串中的内容为“1234”,b所指在字符串中的内容为“abcdefg”时,c所指数组中的内容应该为“1g2f3e4dcba”。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun(char *a,char *b,char *c) { int i , j; char ch; i = 0; j = strlen(b)-1; /************found************/ while ( i > j ) { ch = b[i]; b[i] = b[j]; b[j] = ch; i++; j--; } while (*a || *b ) { /************found************/ If ( *a ) { *c = *a; c++; a++; } if ( *b ) { *c = *b; c++; b++; } } *c = 0; } int main() { char s1[100],s2[100],t[200]; printf("\nEnter s1 string : "); scanf("%s",s1); printf("\nEnter s2 string : "); scanf("%s",s2); fun( s1, s2, t ); printf("\nThe result is : %s\n", t ); return 0; }
3.程序设计题
编写函数fun,它的功能是:将s所指在字符串中下标为偶数同时ASCII码值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。
例如,若s所指字符串中的内容为“ABCDEFG12345”,则t所指的字符数组中的内容应是“BDF12345”。
注意:请勿改动主函数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)N (2)i (3)-1 2. while ( i < j ) if ( *a ) 3. void fun(char *s, char t[]) { int i,j; for (i=0,j=0;s[i]!='\0';i++) if (i%2==1 || s[i]%2==0) t[j++]=s[i]; t[j]='\0'; }
第95套
1.程序填空题
给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #define N 5 #define M 8 void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k; for(i=0; i<N; i++) ps[i]=ss[i]; for(i=0; i<N-1; i++) { /**********found**********/ k= __1__ ; for(j=i+1; j<N; j++) /**********found**********/ if(strlen(ps[k])<strlen(__2__)) k=j; /**********found**********/ tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; } printf("\nThe string after sorting by length:\n"); for(i=0; i<N; i++) puts(ps[i]); } int main() { char ch[N][M]={"red","green","blue","yellow","black"}; int i; printf("\nThe original string\n\n"); for(i=0;i<N;i++) puts(ch[i]); printf("\n"); fun(ch); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:实现两个整数的交换。
例如,给a和b分别输入:60和65,输出为:a=65,b=60。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ void fun(int a,b) { int t; /************found************/ t=b;b=a;a=t; } int main() { int a,b; printf("Enter a,b:"); scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%d b=%d\n",a,b); return 0; }
3.程序设计题
编写函数fun,它的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。
例如,当s所指字符串为“ABCDE”时,则t所指的字符串应为“EDCBAABCDE”。
注意:请勿改动主函数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)i (2)ps[j] (3)tp 2. void fun(int *a,int *b) t=*b;*b=*a;*a=t; 3. void fun (char *s, char *t) { int i,sl; sl = strlen(s); for (i=0; i<sl; i++) t[i] = s[sl-1-i]; for (i=0; i<sl; i++) t[sl+i] = s[i]; t[2*sl] = '\0'; }