二级C语言上机试题汇编.docx
全国计算机等级考试二级C语言上机试题汇编2011年版第1套填空题请补充FUN函数,FUN函数的功能是求10的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:Sinclude <stdio. h> long fun(int n) (if (_1)return (n*fun(2);return 3;)main()(printf("10!=%ldn”, fun(10);)第1处填空:n>l或l<n第2处填空:n-1第3处填空:1或11或1L改错题下列给定程序的功能是:读入一个整数K (2=K (=10000),打印它的所有因子 (即所有为素数的因子)。例如,若输入整数2310,则应输出:2, 3、5、7, llo 请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:Sinclude <conio. h>Sinclude <stdio.h>/*fourid*/ IsPrime(int n);(int i, m;m = 1;/*found*/for (i=2; i<n; i+) if !(n%i)(m = 0;break;return(m);main()(int j, k;printf(zznplease enter an integer number between 2 and 1OOOO:");scanf (d,&k);printf (zznnThe prime factor (s) of %d is (are):,z, k);for (j=2; j<k; j+)if (!(k%j) && (IsPrime(j)printf (z/ %4d, ", j);printf(n");)第 1 处:Isprime(int n);应改为Isprime(int n)第2 处:if !61%。应该为1£(!(11%。)编程题M个人的成绩存放在score数组中,请编写函数fun,它的功能是:返回低于平均 分的认输,并将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的认输应该是4, below中的数据应我10、20、30、40o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:Sinclude <conio.h>Sinclude <stdio.h>Sinclude <string. h>int fun(int scored, int m, int below口)()main()|int i, n, below9;int score9 = 10, 20, 30, 40, 50, 60, 70, 80, 90);FILE *out;n=fun (score, 9, below);printf("nBelow the average score are :out=fopen(,zout. dat,“w);for (i=0;i<n;i+)(printf (zz%d belowi);fprintf (out, dn,belowi);fclose(out); ) 答案是: int fun(int score, int m, int below口) ( int I, k=0, aver=0;for (i=0;i<m;i+) aver+=scorei; aver/=m;for (i=0;im;i+) if (scorei<aver) ( belowk=scorei; k+;) return k; ) 第2套 填空题 请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输出斐波 纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:0 1 1 2 3 5 8 13-. 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。 试题程序: Sinclude <stdio.h> int fun(int n); main() ( int i, n = 0;scanf (d,&n); for (i=0; i<n; i+) printf (z,%d ”, fun (i); ) int fun(int n) ( if (1) return 0;else if (_2_) return 1; else return 3;第1处填空:n=0或0=二n或! n 第2处填空:n=l或l=n第3 处填空:fun (n-1) +fun (n-2) s£fun (n-2) +fun (n-1)改错题下列给定程序中,函数FUN的功能是:逐个比较a、b两个字符串对应位置中的 字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH, b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgHo请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio. h>#include <string. h>void fun (char *p, char *q, char *c)(/*fotind*/int k = 1;/*found*/while (*p != *q)if (*p < *q)ck = *q;elseck = *p;if (*p)p+;if (*q)q+;k+;main()(char a10 = "aBCDeFgH", b10 = "ABcd", c80 = '0'fun (a, b, c);printf(zzThe string a:");puts(a);printf (zzThe string b:");puts (b);printf (z,The result:,z);put s (c);)第1处:int k=l应改为int k=0;第2 处:while(*p!二*q)应改为while(*p| *q)编程题请编写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同 时被7或11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:ttinclude <conio. h>Sinclude <stdio. h>void fun(int *a,int *n) main()(int aa1000, n, k;FILE *out;fun(aa, &n);out=fopen("out. dat", "w");for (k=0;k<n;k+) if (k+l)%10=0) (printf("%5dn", aak);fprintf(out, "%dn", aak);)elseprintf (/z%5d, ", aak);fprintf(out, "%d, ", aak);)fclose(out);)答案是:void fun(int *a,int *n)int i,j=0;for(i=2;i<1000;i+)if( (i%7=0 |i%ll=0)&&i%77!=0)aj+=i;*n=j;)第3套填空题请补充函数FUN (CHAR *S),该函数的功能是把字符串中的内容逆置.例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba. 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语 句。试题程序:Sinclude <string. h>#include <conio.h> ttinclude <stdio.h> ttdefine N 81 void fun(char *s) (int i, n = strlen(s)-l;char t;for (i=0; i<n; i+, 1)(t = si;2;3;) ) main() ( char aN;printf ("Enter a string:z/);gets (a);printf(z,The original string is:); puts (a);fun (a);printf('n);printf(Z/The string after modified:"); puts(a);)第1处填空:n-或-n或n-=l或n=nT第2 处填空:si=sn或*(s+i)=*(s+n)第3 处填空:sn=t或*(s+n)=t 改错题下列给定的程序中,函数fun的功能是:依次取出字符串中所以数字字符,形成 新的字符串,并取代 原字符串。请改正函数fun中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:ftinclude <stdio. h> #include <conio.h> void fun(char *s) int i, j;/*found*/for (i=0, j=0; si !=,0f ; i+)if (sj>= 0,&& si<='9')sj = si;/*found*/sj = "0")main()(char item80;printf (,znEnter a string ;gets(item);printf (zznnThe string is : %sn,item);fun (item);printf (,znnThe string of changing is : %sn”, item);)第 1 处:sj=si;应改为sj+=si第2 处:sj = "/0" ;应改为sji (r ;编程题请编写函数void fun(int x, int pp, int *n),它的功能是:求出能整除x且不是 偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回.例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:include <conio. h>Sinclude <stdio.h>void fun(int x, int pp, int *n) main()|int x, aa1000, n, i;FILE *out;printf (zznPlease enter an integer number: nz,);scanf &x);fun (x, aa, &n);for (i=0;i<n;i+)printf ("%d ”, aai);printf('n");fun (730, aa, &n);out = fopen ("out. dat,w");for (i = 0; i < n; i+)fprintf(out, "%dn”, aai);fclose (out);)答案是:void fun(int x, int pp口,int *n)(int i=l, j=0, k=0, *t=pp;for(i=0;i<=x;i+)if(i%2!=0)(j+;)for (i=0;i<j;i+)if(x%ti=0)(ppEk=ti;k+;)*n=k;)第4套填空题请补充函数FUN,它的功能是:计算并输出N (包括N)以内能被3或7整除的所 有自然数的倒数之和。例如,在主函数中从键盘给N输入30后,输出为:S=L 226323。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:#include <stdio. h>double fun(int n)(int i;double sum = 0. 0;for (i=l; 1; i+)if (i%3=0 2 i%7=0)sum +=3/i;return sum;)main()(int n;double s;printf (,znlnput n: ); scanf ("%d", &n);s = fun(n);printf (z,nns=%fnz/, s);)第1处填空:i二n或n>=i第2处填空:| |第3处填空:1.0或(double) 1改错题下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的 个数。例如,给字符串s输入:AaaaBBbl23CCccccd,则应输出结果:upper=6, lower=8 请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include <conio.h>#include <stdio.h>/*found*/void fun (char *s, int a, int b)(while (*s)(/*found*/ if (*s>='A' && *s<='Z') a+;/*found*/ if (*s>=,a && *s<='z') b+;s+;) main() | char s100; int upper = 0, lower = 0; printf("nPlease a string :"); gets(s);fun (s, &upper, &lower);printf ('n upper=%d lower=%dn, upper, lower);)第 1 处:void fun (char *s, int a, int b)应改为void fun (char *s, int *a, int *b)第2处:a+;应改为(*a)+;第3处:b+;应改为(*b)+;编程题请编写一个函数void fun(char*tt, int pp),统计在tt字符串中"a"到"z"26个字母各自出现的次数,并依次存放在PP所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:# include <conio. h># include <stdio. h>void fun(char *tt, int pp)()main()(char aa1000;int bb26, k;FILE *out;printf(z,nPlease enter a char string:");scanf aa);fun(aa, bb);for (k=0;k<26 ; k+)printfbbk);printf(n");fun(,za bosom friend afar brings a distant land near”, bb);out = fopen ("out. dat,w");for (k = 0; k < 26; k+)fprintf(out, "%dn", bb k);fclose(out);)答案是:void fun (char *tt, int pp)(int I;for(i=0;i<26;i+)ppi=o;while(*tt)switch(*tt)(case , a9 :pp0+;break;case ' b' :ppl+;break;case , c9 :pp2+;break;case ' d, :pp3+;break;case , e9 :pp4+;break;case , f' :pp5+;break;case ' g9 :pp6+;break;case ' h' :pp7+;break;case ' i9 :pp8+;break;case , j, :pp9+;break;case ' k' :pp10+;break;case ' 19 :pp11+;break;case , m, :pp12+;break;case , n* :pp13+;break;case , o9 :pp14+;break;case , p :pp15+;break;case , q, :pp16+;break;case ' r9 :pp17+;break;case , s9 :pp18+;break;case , t' :pp19+;break;case ' u' :pp20 +;break;case , n' :pp21+;break;case J w, :pp22+;break;case ' x' :pp23+;break;case ' y' :pp24+;break;case ' z' :pp25+;break;)tt+;)第5套填空题给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回 二分之一的圆面积(注:圆面积公式为:S二,凡 在程序中定义的变量名要与公式的变量相同)。例如,输入圆的半径值:19.527,输出为:S=598. 950017。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:ttinclude <stdio. h>double fun(double r)return 3. 14159*1/2. 0;)main() double x;printf("Enter x:");scanf("%lf", 2); printf(* s = %lfn ”, fun(3);) 第1处填空:r*r 第2处填空:&x 第3处填空:x 改错题假定整数数列中的数不重复,并存放在数组中。下列给顶程序中,函数fun的功 能是删除数列中值为x的元素,同时将其他元素前移。N中存放的是数列中元素的个数。 请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:include <stdio. h> #define N 20 fun(int *a, int n, int x) ( int p = 0, i; an = x;while (x != ap) P = p+1; if (p = n) ( return -1;) else ( /*fc)und*/ for (i=p; i<n; i+) ai+l = ai; return n-l;) ) main() ( int wN = -3, 0, 1, 5, 7, 99, 10, 15, 30, 90, x, n, i; n = 10;printf(z,The original data:n"); for (i=0; i<n; i+) printf("%5d", wi);printf("nlnput x (to delete):"); scanf&x);printf (zzDelete :%dn/,, x); n = fun (w, n, x); if (n = -1)printf (z,*Not be found! *nn);)else(printf("The data after delete :n);for (i=0; i<n; i+)printf C%5d", wi);printf (nn");第 1 处:ai+l=ai;应改为ai=ai+l编程题请编写一个函数void fun(int m, int k, int xx),该函数的功能是:将大于整 数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入:17, 5,则应输出:19, 23, 29, 31, 37。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:Sinclude <conio. h>Sinclude <stdio.h>void fun (int m, int k, int xx口) main()(int m, n, zz1000;FILE *out;printf (zznPlease enter two integers:z,);scanf (z,%d, %d, &m, &n);fun ( m, n, zz);for (m=0; m<n; m+)printf (,?%d ”, zzm);printf(n);fun (28, 20, zz);out = fopen ("out. dat,“w);for (m = 0; m < 20; m+)fprintf(out, "%dn, zzm);fclose(out);)答案是:void fun(int m, int k, int xx) int g=0,1, j, flag=l;for(i=m+l;i+) (for(j=2;j+)(if(i%j!=O)flag=l;else(flag=0;break;)if(flag=l&&j>=i)(if(k>=0)xxg+=I;k;)elsebreak;第6套填空题给定程序的功能是计算并输出下列级数的前N项之和初,直到s?V大于Q为止,Q的值通过形参传入。sN =N.N 1342312例如,若Q的值为50. 0,则函数值为50. 416687c请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:ttinclude <stdio. h>double fun(double q)(int n;double s;n = 2;s = 2. 0;while (s 1 q)(s = s + (double)(n+1)/n;2;)printf("n=%dn”,n);3:rmain()printf ("%fn”, fun(50);)第1处填空:<=第2处填空:n+或11+=1或11+1第3 处填空:return s或return (s)改错题下列给定程序中,函数fun的功能是:根据整型参m的值,计算如下公式的值 T=l-nff-m3*312*21例如,若m中的值为5,则应输出:0. 536389请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:ttinclude <conio. h>#include <stdio.h>double fun(int m)(double y = 1. 0;int i;/*found*/for (i=2; i<m; i+)/*found*/y -= l/(i*i);return(y);)main()(int n = 5;printf (zznThe result isfun (n);)第 1 处:for (i=2;i+)应改为for(i=2; i<=m; j+)第2 处:y-=l/(i*i);应改为y-=l. 0/(i*i)编程题请编写一个函数void fun (char a, char b, int n),其功能是:删除一个字符 串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。 例如,输入一个字符串World,然后输入3,则调用该函数后的结果为Word。 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入 所编写的若干语句。试题程序:# include <stdio. h># include <conio.h># define LEN 20void fun (char a , char b口,int n)()main()(char str1LEN, str2LEN;int n;FILE *out;printf ("Enter the string:n/z);gets(strl);printf (z,Enter the position of the string deleted:w);scanf (飞d”, &n);fun(strl, str2, n);printf(wThe new string is:%sn”, str2);fun (""Hello World! ", str2, 9);out = fopen("out. dat", "w");fprintf(out, "%s”, str2);fclose(out);)答案是:void fun (char a 口,char b, int n) int I,j=0; for(i=0;i<LEN;i+) if (i !=n) bj=ai;j+;)bj=, Of ;)第7套填空题函数fun的功能是:统计长整数n的各个位上出现数字1, 2, 3的次数,并通过外部(全局)变量cl,c2,c3返回主函数。例如,当=123114350时,结果应该为:cl=3, c2=l, c3=2.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所 编写的若干表达式或语句。试题程序如下:#include <stdio. h>int cl, c2, c3;void fun(long n)(cl = c2 = c3 = 0;while (n)switch(1)(case 1:cl+;2;case 2:c2+;3;case 3:c3+;)n /= 10;main()long n = 123114350L;fun(n);printf("nThe result :n"); printf("n=%ld cl=%d c2=%d c3=%dn”, n, cl, c2, c3);)第1处填空:n%10第2处填空:break第3处填空:break改错题下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的 顺序进行排序。请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:ttinclude <stdio. h>ttdefine N 20void fun(int a口, int n) (int i, j, t, p;for (j=0; j<n-l; j+) /*found*/P = jfor (i=j; i<n; i+) if(ai < ap) (/*found*/P = i;t = ap;ap = ai;ai = t;) main() (int aN = 9, 6, 8, 3, -1, i, m = 5;printf ("排序前");for (i=0; i<m; i+)printf (zz%d, zz, ai);printf('n");fun (a, m);printf ("排序06 £o");for (i=0; i<m; i+)printf ("%d, ", ai);printf('n");第1处:p = j应改为p=j; 第2处:p = i应改为p=j;编程题请编写一个函数int fun(int*s, int t, int*k),用来求出数组的最大元素在数组 中的下标并存放在k所指的存储单位中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6, 980o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:# include <conio. h># include <stdio. h>void fun(int *s, int t , int *k) main()int a10 = 876, 675, 896, 101, 301, 401, 980, 431, 451, 777, kFILE *out;fun (a, 10, &k);printf (zz%d, %dn,z, k, ak);out = fopen ("out. dat,w");fprintf(out, dn%d”, k, ak);fclose(out);)答案是:void fun (int *s, int t, int *k)(int I , max;max=s0;for(i=0;i<t:i+)if (si>max)(max=s i;*k=I;第8套填空题请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找 出最大的整数。当输入的整数为0时结束。例如,输入1 2 3 5 4 0时,最大的数为5。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:#include <stdio. h>#include <conio.h>ttdefine N 100main()(int numN;int i = -1;int max = 0;printf (,znlnput integer number: n");do(i+;printf (,znum%d=/z, i);scanf 1);max = 2 num i : max; while(3);printf (zzmax=%dnz,, max);)第1处填空:&numi或num+i第2 处填空:max<numi?或numi>max?第3 处填空:numi !=00!=numi改错题下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字 符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输 入:ABCDeFGH,调用后字符串中的内容为eABCDFGH请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:include <stdio. h>/*found*/void fun(char *p);char max, *q;int i = 0;max = pi;while (pi != 0)(if (max < pi)(/*found*/max = pi;P = q+i;)i 1 1 ;)while (q > p)(*q = *(q-l);q一;)p0 = max;)main()char str80;printf("Enter a string:");gets(str);printf("nThe original string:");puts(str);fun(str);printf("nThe string after moving:");puts(str);printf("nn");)第 1 处:void fun (char *p);应改为void fun (char *p)第2处:p=q+I;应改为q=p+i;