当前位置:文档之家› 2020年全国计算机等级考试二级c语言上机精选题库(共80套)

2020年全国计算机等级考试二级c语言上机精选题库(共80套)

2020年全国计算机等级考试二级c语言上机精选题库(共80套)第1套试题第一题:给定程序中,函数fun的功能是:计算N*N矩阵的主对角元素和反向对角元素之和,并作为函数值返回。

注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。

例如,若N=3,有下列矩阵:1 2 34 5 67 8 9fun函数首先累加1、5、9,然后累加3、5、7,函数的返回值为30。

请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。

#include <stdio.h>#define N 4fun(int t[][N], int n){int i, sum;___1___;for (i=0; i<n; i++)sum += ___2___;for (i=0; i<n; i++)sum += t[i][n-i-___3___];return sum;}main(){int i, j, t[][N] ={21, 2, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21, 3, 10};printf("\nThe original data:\n");for (i=0; i<N; i++){for (j=0; j<N; j++)printf("%4d", t[i][j]);printf("\n");}printf("The result is: %d", fun(t, N));}第二题:下列给定程序中,函数fun 的功能是:根据整型参n ,计算如下公式的值。

,11=A ,1112A +=A ,1123A +=A … ,111-A +=A n n 例如,若n=10,则应输出0.617978。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main 函数,不得增行或删行,也不要更改程序的结构!#include <conio.h>#include <stdio.h>/********found********/fun(int n){double A = 1;int i;/********found********/for(i=2;i<n;i++)A = 1.0/(1+A);return A;}main(){int n;printf("\nPlease enter n: ");scanf("%d", &n);printf("A%d=%lf\n", n, fun(n));}第三题:请编写函数fun ,其功能是:将两个两位数的正整数a 、b 合并形成一个整数在c 中。

合并的方式是:将a 数的十位和个位依次放在c 数的百位和个位上,b 数的十位和个位数依次放c 数的千位和十位上。

例如,当a=45,b=12,调用该函数后,c=1425。

请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。

#include <conio.h>#include <stdio.h>void fun (int a, int b, long *c){}main (){int a, b;long c;FILE *out;printf ("Input a, b:");scanf ("%d%d", &a, &b);fun ( a, b, &c );printf ("The result is: %ld\n", c);out=fopen ("out.dat", "w");for (a = 0; a < 10; a++){fun(a+28, a+82, &c);fprintf(out, "%ld\n", c);}fclose (out );}第一题答案:第1处填空:sum=0;第2处填空:t[i][i]第3处填空:1第二题答案:第1处:fun(int n) 应改为double fun(int n)第2处:for(i=2;i<n;i++) 应改为for(i=2;i<=n;i++)第三题答案:void fun( int a, int b, long *c){*c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;}第2套试题第一题:请补充fun函数,函数的功能是:打印出1~1000中满足个位数字的立方等于其本身的所有数。

本题的结果为:1 64 125 216 729.仅在横线上填入所编写的若干表达式或语句,勿改动函数中其他函数任何内容。

#include <stdio.h>main(){int i, g;for (i=1; i<1000; i++){g = ___1___;if (___2___)printf("%4d", i);}}第二题:下列给定程序中,函数fun的功能是:计算整数n的阶乘。

请改正程序中的错误或在横线上填上适当的内容并把横线删除,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结果。

#include <stdio.h>double fun(int n){double result = 1.0;/********found********/while (n>1 && n<170)result *= --n;/********found********/___填空___}main(){int n;printf("Enter an integer: ");scanf("%d", &n);printf("\n\n%d!=%1g\n\n", n, fun(n));}第三题:请编写一个函数fun,它的功能是:计算n门课程的平均数,计算结果作为函数值返回。

例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为71.80.请勿改动主函数main和其他函数中哦的任何内容,仅在函数fun的花括号填入所编写的若干语句。

#include <stdio.h>float fun ( float *a, int n ){}main(){float score[30]={90.5,72,80,61.5,55}, aver;FILE *out;aver=fun(score,5);printf("\nAverage score is :%5.2f\n",aver);out=fopen ("out.dat", "w");fprintf(out, "%5.2f",aver);fclose (out );}答案第一题第一处:i%10第二处:g*g*g==i或i==g*g*g第二题第一处:result*=--n;应该为result*=n--;第二处:应填result第三题float fun ( float *a, int n ){float ave=0.0;int i;for(i=0;i<n;i++)ave+=a[i];ave/=n;return ave;}第3套试题第一题:请补充fun函数,函数的功能是:从键盘输入一个字符串及一个指定字符,然后把这个字符及后面的所以字符全部删除。

结果仍然保存在原串中。

例如,输入”abcdef”,指定字符为’c’,则输出“ab“。

仅在横线上填入所编写的若干表达式或语句,勿改动函数中其他函数任何内容。

#include <stdio.h>#define N 80main(){int i = 0;char str[N];char ch;printf("\n Input a string:\n");gets(str);printf("\n Input a charater:\n");scanf("%c", &ch);while (str[i] != '\0'){if (str[i] == ch)___1______2___;}str[i] = ___3___;printf("\n********* display string *********\n");puts(str);}第二题:下列给定程序中,函数fun的功能是:交换主函数中两个变量的值。

例如:若变量a中的值原为8,b中的值为3,则程序远行后a中的值为3,b中的值为8。

请改正程序中的错误,使它能得出正确的结果。

注意,不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>/********found********/void fun(int x, int y){int t;/********found********/t = x; x = y; y = t;}main(){int a, b;a = 8;b = 3;fun(&a, &b);printf("%d, %d\n", a, b);}第三题:假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****A*BC**DEF*G。

在编写函数时,不得使用C语言提供的字符串函数。

请勿改动主函数main和其他函数中哦的任何内容,仅在函数fun的花括号填入所编写的若干语句。

#include <stdio.h>#include <conio.h>#include <string.h>void fun( char *a){}main(){char s[81];FILE *out;printf("Enter a string:\n");gets(s);fun( s );printf("The string after deleted:\n");puts(s);out=fopen ("out.dat", "w");strcpy(s, "****A*BC*DE*F*G*********");fun(s);fprintf(out, "%s", s);fclose (out );}答案第一题:第1处:break;第2处i++或++i 或i+=1或i=i+1第3处‘\0’ 或0第二题:第1处void fun(int x,int y)应改为void fun(int*x,int*y) 第2处t=x;x=y;y=t; 应改为t=*x;*x=*y;*y=t;第三题:void fun( char *a){int i=0;char *p,*q;p=q=a;while(*p)p++;p--;while(*p==’*’)p--;while(q<=p){a[i]=*q;i++;q++;}a[i]=’\0’;}第4套试题一、填空题请补充main函数的功能是:输出方程组A+B=5,A+2B=60的一组正整数解.本题的结果是:A=44,B=8.仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其中他任何内容.#include <stdio.h>main(){int i, j;for (i=0; i<100; i++)for (j=0; j<100; j++)if (i+j==52 ___1___ i+2*j==60)printf("A=%2d,B=%2d", ___2___);}第1处填空:&&第2处填空:i,j二、改错题下列给定程序中,函数fun的功能是:将十进制正整数转换成k (2<=k<=9)进制数,并按位输入出.例如,若输入8和2,则应输出1000(即十进制数8转换成二制成二进制表示是1000).请改正fun函数中的错误,使它能得出正确的结果.注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>/********found********/void fun(int m, int k);{int aa[20], i;for (i=0; m; i++){/********found********/aa[i] = m/k;m /= k;}for (; i; i--)/********found********/printf("%d", aa[i]);}main(){int b, n;printf("\nPlease enter a number and a base:\n");scanf("%d%d", &n, &b);fun(n, b);printf("\n");}第1处:void fun(int m,int k):应改为void fun(int m,int k)第2处:aa[i]=m/k;应改为aa[i]m%k;第3处:printf(“%d”,aa[i]);应改为printf(“%d”,aa[i-1]);三、编程题请编写函数fun,其功能是:将两个两面三刀位数的正整数a、b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和十位上.例如,当a=45,b=12,调用该函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句.#include <conio.h>#include <stdio.h>void fun(int a, int b, long *c){}main(){int a,b;long c;FILE *out;printf(" Input a, b: ");scanf("%d%d", &a,&b);fun(a,b,&c);printf(" The result is :%ld\n", c);out=fopen ("out.dat", "w");for (a = 0; a < 10; a++){fun(a+77, a+66, &c);fprintf(out, "%ld\n", c);}fclose (out );}void fun(int a,int b,long *c){c=(b/10)1000+(a%10)*100+(b%10)*10+a/10;}第5套试题一填空题给定程序中,函数fun的功能是: 有N*N矩阵.以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0. 例如,若N=3,有下列矩阵:1 2 34 5 67 8 9计算结果为:1 0 06 5 010 14 9请勿改动主函数main和其它函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句.#include <stdio.h>#define N 4void fun(int (*t)___1___){int i, j;for (i=1; i<N; i++){for (j=0; j<i; j++){___2___ = t[i][j]+t[j][i];___3___ = 0;}}}main(){int i, j, t[][N] ={21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21, 33, 10};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");}}答案:第一处:[N]第一处:t[i][j]第三处:t[j][i]二.改错题下列给定程序中,函数fun的功能是: 从字符串s中删除所有小写字母’c’.请改正程序中的错误,使它能计算出正确的结果.注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include <stdio.h>void fun(char *s){int i, j;for (i=j=0; s[i]!='\0'; i++)/********found********/if (s[i] != 'c')s[j] = s[i];/********found********/s[i] = '\0';}main(){char s[80];printf("Enter a string: ");gets(s);printf("The original string :");puts(s);fun(s);printf("The string after deleted:");puts(s);printf("\n\n");}答案:1:s[j]=s[i];改为s[j++]=s[i];2:s[i]=’\0’;改为s[j]=’/0’;三.编程题N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点.请编写函数fun,它的功能是:求出平均分,由函数值返回.例如,若学生的成绩是85,69,85,91,64,87;则平均分应当是78.625.请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句.#include <stdio.h>#include <stdlib.h>#define N 8struct slist{double s;struct slist *next;};typedef struct slist STREC;double fun ( STREC *h ){}STREC * creat ( double *s )STREC *h, *p, *q;int i=0;h=p=( STREC* ) malloc (sizeof (STREC ) );p->s=0;while ( i<N ){q=( STREC* ) malloc (sizeof ( STREC ) );q->s=s[i];i++;p->next=q;p=q;}p->next=0;return h;}outlist ( STREC *h ){STREC *p;p=h->next;printf ( " head " );do{printf ( "->%4.1f", p->s );p=p->next;}while ( p!=0 );printf ( "\n\n" );}main (){double s[N]={85, 76, 69, 85, 91, 72, 64, 87}, ave;STREC *h;FILE *out;h=creat ( s );outlist (h);ave=fun ( h );printf ( "ave= %6.3f\n", ave );out=fopen ("out.dat", "w");fprintf (out, "%6.3f", ave );fclose (out );答案:double fun(STREC *h){double aver=0.0;while (h!=null){aver+=h->s;h=h->next;}aver/=N;return aver;}第6套填空题给定程序的功能是计算并输出下列级数的前N项之和s N,直到s N大于Q为止,Q的值通过形参传入。

相关主题