计算机等级考试二级C语言上机题集(第96~100套)
第96套
1.程序填空题
给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。
例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> int fun(char *s) { int sum=0; while(*s) { if(*s>='0' && *s<='9') /**********found**********/ sum+= *s- __1__ ; /**********found**********/ __2__; } /**********found**********/ return __3__ ; } int main() { char s[81]; int n; printf("\nEnter a string:\n\n"); gets(s); n=fun(s); printf("\nThe result is: %d\n",n); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define M 5 /************found************/ int fun(int n, int xx[][]) { int i, j, sum=0; printf( "\nThe %d x %d matrix:\n", M, M ); for( i = 0; i < M; i++ ) { for( j = 0; j < M; j++ ) /************found************/ printf( "%4f ", xx[i][j] ); printf("\n"); } for( i = 0 ; i < n ; i++ ) sum += xx[i][i]+xx[i][ n-i-1 ]; return( sum ); } int main( ) { int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; printf ("\nThe sum of all elements on 2 diagnals is %d.",fun(M, aa)); return 0; }
3.程序设计题
编写函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串“-1234”,则函数把它转换成整数值-1234。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); long fun(char *p) { } int main() { char s[6]; long n; printf("Enter a string:\n") ; gets(s); n = fun(s); printf("%ld\n",n); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s[20] ; long n ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", s) ; n = fun(s); fprintf(wf, "%ld\n", n) ; } fclose(fp) ; fclose(wf) ; }
1.(1)'0' (2)s++ (3)sum 2. int fun(int n, int xx[M][M]) printf( "%4d ", xx[i][j] ); 3. long fun(char *p) { long num=0,t=1; int i=0; if (p[0]=='-') { t=-1; i=1; } for (;p[i]!='\0';i++) { num=num*10+(p[i]-'0'); } return t*num; }
第97套
1.程序填空题
给定程序中,函数fun的功能是:判定形参a所指的N*N(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1,;不是,函数返回值为0。“幻方”的判定条件是:矩阵的每行、每列、主对角线及反向对角线上元素之和都相等。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 3 int fun(int (*a)[N]) { int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i<N; i++) { j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; } if(m1!=m2) return 0; for(i=0; i<N; i++) { /**********found**********/ row=colum= __1__; for(j=0; j<N; j++) { row+=a[i][j]; colum+=a[j][i]; } /**********found**********/ if((row!=colum) __2__ (row!=m1)) return 0; } /**********found**********/ return __3__; } int main() { int x[N][N],i,j; printf("Enter number for array:\n"); for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d",&x[i][j]); printf("Array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } if(fun(x)) printf("The Array is a magic square.\n"); else printf("The Array isn't a magic square.\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串中最大包含5位八进制数字字符。
例如,若输入77777,则输出32767。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <stdlib.h> #include <string.h> int fun(char *p) { int n; /**********found**********/ n= *P-'o'; p++; while( *p!=0 ) { /**********found**********/ n=n*7+*P-'o'; p++; } return n; } int main() { char s[6]; int i,n; printf("Enter a string (Ocatal digits): "); gets(s); if(strlen(s)>5) { printf("Error: String too longer !\n"); exit(0); } for(i=0; s[i]; i++) if(s[i]<'0'||s[i]>'7') { printf("Error: %c not is ocatal digits!\n",s[i]);exit(0); } printf("The original string: "); puts(s); n=fun(s); printf("\n%s is convered to integer number: %d\n",s,n); return 0; }
3.程序设计题
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> #define N 16 typedef struct { char num[10]; int s; } STREC; STREC fun(STREC *a, char *b) { } 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",77},{"GA017",64}, {"GA018",64},{"GA016",72}}; STREC h; char m[10]; int i;FILE *out ; printf("The original data:\n"); for(i=0; i<N; i++) { if(i%4==0) printf("\n"); printf("%s %3d ",s[i].num,s[i].s); } printf("\n\nEnter the number: "); gets(m); h=fun( s,m ); printf("The data : "); printf("\n%s %4d\n",h.num,h.s); printf("\n"); out = fopen("out.dat","w") ; h=fun(s,"GA013"); fprintf(out,"%s %4d\n",h.num,h.s); fclose(out); return 0; }
1.(1)0 (2)|| (3)1 2. n= *p-'0'; n=n*8+*p-'0'; 3. STREC fun(STREC *a, char *b) { STREC t; int i; t.num[0]='\0'; t.s=-1; for (i=0;i<N;i++) if (strcmp(a[i].num,b)==0) { t=a[i]; break; } return t; }
第98套
1.程序填空题
给定程序中,函数fun的功能是:判断形参s所指字符串是否为回文。若是,函数返回1,否则返回0。回文是指顺读和倒读都一样的字符串(不区分大小写字母)。
例如,字符串LEVEL和Level都是回文,而字符串LEVLEV就不是回文。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #include <ctype.h> int fun(char *s) { char *lp,*rp; /**********found**********/ lp= __1__ ; rp=s+strlen(s)-1; while ((toupper(*lp)==toupper(*rp)) && (lp<rp)) { /**********found**********/ lp++; rp __2__ ; } /**********found**********/ if(lp<rp) __3__ ; else return 1; } int main() { char s[81]; printf("Enter a string: "); scanf("%s",s); if(fun(s)) printf("\n\"%s\" is a Palindrome.\n",s); else printf("\n\"%s\" isn't a Palindrome.\n",s); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形:构成的是等边三角形还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /**************found**************/ void fun(int a,int b,int c) { if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c) return 3; else if(a==b||b==c||a==c) return 2; /**************found**************/ else retrun 1 } else return 0; } int main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape =fun(a,b,c); printf("\n\nThe shape : %d\n",shape); return 0; }
3.程序设计题
编写函数fun,其功能是:计算3到n之间(含3和n)所有素数的平方根之和。
例如,在主函数中给n输入100后,输出为:sum=148.874270。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <math.h> void NONO(void); double fun(int n) { } int main() { int n; double sum; printf("\n\nInput n: "); scanf("%d",&n); sum=fun(n); printf("\n\nsum=%f\n\n",sum); 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, "%lf\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)s (2)-- (3)return 0 2. int fun(int a,int b,int c) else return 1; 3. double fun(int n) { double s=0.0; int i,k; for (i=3;i<=n;i+=2) { for (k=3;k<=i/3;k+=2) if (i%k==0) break; if (k>i/3) s+=sqrt(1.0*i); } return s; }
第99套
1.程序填空题
给定程序中,函数fun的功能是:在3*4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。
例如,有下列矩阵
1 2 13 4
7 8 10 6
3 5 9 7
程序执行结果为:find:a[2][2]=9。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define M 3 #define N 4 void fun(int (*a)[N]) { int i=0,j,find=0,rmax,c,k; while( (i<M) && (!find)) { rmax=a[i][0]; c=0; for(j=1; j<N; j++) if(rmax<a[i][j]) { /**********found**********/ rmax=a[i][j]; c= __1__ ; } find=1; k=0; while(k<M && find) { /**********found**********/ if (k!=i && a[k][c]<=rmax) find= __2__ ; k++; } if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]); /**********found**********/ __3__ ; } if (!find) printf("not found!\n"); } int main() { int x[M][N],i,j; printf("Enter number for array:\n"); for(i=0; i<M; i++) for(j=0; j<N; j++) scanf("%d",&x[i][j]); printf("The array:\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n\n"); } fun(x); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:根据形参m的值,计算如下公式的值。
例如,若m=5,则应输出:0.536389。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> double fun ( int m ) { double y = 1.0 ; int i ; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y -= 1 /(i * i) ; return( y ) ; } int main( ) { int n = 5 ; printf( "\nThe result is %f\n", fun(n)); return 0; }
3.程序设计题
编写函数fun,它的功能是:移动字符串中的内容。移动规则如下:把第1到m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABC。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> #define N 80 void NONO(void); void fun(char *w, int m) { } int main() { char a[N]= "ABCDEFGHIJK"; int m; printf("The original string:\n");puts(a); printf("\n\nEnter m: ");scanf("%d",&m); fun(a,m); printf("\nThe string after moving:\n");puts(a); printf("\n\n"); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; char a[N] ; int m, i ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%d %s", &m, a) ; fun(a, m) ; fprintf(wf, "%s\n", a) ; } fclose(rf) ; fclose(wf) ; }
1.(1)j (2)0 (3)i++ 2. for(i = 2 ; i <= m ; i++) y -= 1.0 /(i * i) ; 3. void fun(char *w, int m) { int k,i,t,n; n=strlen(w); for (k=1;k<=m;k++) { t=w[0]; for (i=1;i<n;i++) { w[i-1]=w[i]; } w[n-1]=t; } }
第100套
1.程序填空题
给定程序中,函数fun的功能是:建立一个N*N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依次类推。
例如,若N=5,生成的矩阵为
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 7 /**********found**********/ void fun(int (*a) __1__) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i<m; i++) { /**********found**********/ for(j= __2__ ; j<N-i; j++) a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k<N-i; k++) /**********found**********/ a[k][i]=a[k][N-i-1]= __3__; } } int main() { int x[N][N]={0},i,j; fun(x); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } return 0; }
2.程序修改题
给定程序中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define SIZE 20 int fun(double *s, double *w) { int k,i; double sum; for(k=2,i=0;i<SIZE;i++) { s[i]=k; k+=2; } /**********found**********/ sun=0.0; for(k=0,i=0;i<SIZE;i++) { sum+=s[i]; /**********found**********/ if(i+1%5==0) { w[k]=sum/5; sum=0; k++; } } return k; } int main( ) { double a[SIZE],b[SIZE/5]; int i, k; k = fun(a,b); printf("The original data:\n"); for(i=0; i<SIZE; i++) { if(i%5==0) printf("\n"); printf("%4.0f", a[i]); } printf("\n\nThe result :\n"); for(i=0; i<k; i++) printf("%6.2f ",b[i]); printf("\n\n"); return 0; }
3.程序设计题
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 8 typedef struct { char num[10]; double s; } STREC; double fun(STREC *a,STREC *b,int *n) { } int main() { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85}, {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}}; STREC h[N],t; FILE *out ; int i,j,n; double ave; ave=fun( s,h,&n ); printf("The %d student data which is lower than %7.3f:\n",n,ave); for(i=0;i<n; i++) printf("%s %4.1f\n",h[i].num,h[i].s); printf("\n"); out = fopen("out.dat","w") ; fprintf(out, "%d\n%7.3f\n", n, ave); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(h[i].s>h[j].s) {t=h[i];h[i]=h[j];h[j]=t;} for(i=0;i<n; i++) fprintf(out,"%4.1f\n",h[i].s); fclose(out); return 0; }
1.(1)[N] (2)i (3)i+1 2. sum=0.0; if((i+1)%5==0) 3. double fun(STREC *a,STREC *b,int *n) { double sum=0,avg; int i,j; for (i=0;i<N;i++) sum+=a[i].s; avg=sum/N; for (i=0,j=0;i<N;i++) if (a[i].s<avg) b[j++]=a[i]; *n=j; return avg; }