《二级C语言上机试题汇编.docx》由会员分享,可在线阅读,更多相关《二级C语言上机试题汇编.docx(249页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全国计算机等级考试二级C语言上机试题汇编2011年版第1套填空题请补充FUN函数,FUN函数的功能是求10的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:Sinclude long fun(int n) (if (_1)return (n*fun(2);return 3;)main()(printf(10!=%ldn”, fun(10);)第1处填空:nl或ln第2处填空:n-1第3处填空:1或11或1L改错题下列给定程序的功能是:读入一个整数K (2=K (=10000),打印它的所有因子 (即所有
2、为素数的因子)。例如,若输入整数2310,则应输出:2, 3、5、7, llo 请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:Sinclude Sinclude /*fourid*/ IsPrime(int n);(int i, m;m = 1;/*found*/for (i=2; in; i+) if !(n%i)(m = 0;break;return(m);main()(int j, k;printf(zznplease enter an integer number between 2 and 1OOOO:);sc
3、anf (d,&k);printf (zznnThe prime factor (s) of %d is (are):,z, k);for (j=2; jk; 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、4
4、0、50、60、70、80、90时,函数返回的认输应该是4, below中的数据应我10、20、30、40o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:Sinclude Sinclude Sinclude 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(
5、nBelow the average score are :out=fopen(,zout. dat,“w);for (i=0;in;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;im;i+) aver+=scorei; aver/=m;for (i=0;im;i+) if (scoreiaver) ( belowk=scorei; k+;) return k; )
6、第2套 填空题 请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输出斐波 纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:0 1 1 2 3 5 8 13-. 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。 试题程序: Sinclude int fun(int n); main() ( int i, n = 0;scanf (d,&n); for (i=0; in; i+) printf (z,%d ”, fun (i); ) int fun(int n) ( if (1) return 0;else i
7、f (_2_) return 1; else return 3;第1处填空:n=0或0=二n或! n 第2处填空:n=l或l=n第3 处填空:fun (n-1) +fun (n-2) sfun (n-2) +fun (n-1)改错题下列给定程序中,函数FUN的功能是:逐个比较a、b两个字符串对应位置中的 字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH, b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgHo请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题
8、程序:#include #include 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 re
9、sult:,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 Sinclude void fun(int *a,int *n) main()(int aa1000, n, k;FILE *out;f
10、un(aa, &n);out=fopen(out. dat, w);for (k=0;kn;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;i1000;i+)if( (i%7=0 |i%ll=0)&i%77!=0)aj+=i;*n=j;)第3套填空题请补充函数FUN (CHAR *S),该函数的功能是把字
11、符串中的内容逆置.例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba. 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语 句。试题程序:Sinclude #include ttinclude ttdefine N 81 void fun(char *s) (int i, n = strlen(s)-l;char t;for (i=0; in; i+, 1)(t = si;2;3;) ) main() ( char aN;printf (Enter a string:z/);gets (a);printf(z,The o
12、riginal 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 #include
13、 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
14、 ;应改为sji (r ;编程题请编写函数void fun(int x, int pp, int *n),它的功能是:求出能整除x且不是 偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回.例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:include Sinclude void fun(int x, int pp, int *n) main()|int x, aa1000, n, i;FILE *out;prin
15、tf (zznPlease enter an integer number: nz,);scanf &x);fun (x, aa, &n);for (i=0;in;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
16、)(j+;)for (i=0;ij;i+)if(x%ti=0)(ppEk=ti;k+;)*n=k;)第4套填空题请补充函数FUN,它的功能是:计算并输出N (包括N)以内能被3或7整除的所 有自然数的倒数之和。例如,在主函数中从键盘给N输入30后,输出为:S=L 226323。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:#include 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;
17、)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函数,不得增行或删行,也不得更改程序的结构! 试题程序:#inc
18、lude #include /*found*/void fun (char *s, int a, int b)(while (*s)(/*found*/ if (*s=A & *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)应
19、改为void fun (char *s, int *a, int *b)第2处:a+;应改为(*a)+;第3处:b+;应改为(*b)+;编程题请编写一个函数void fun(char*tt, int pp),统计在tt字符串中a到z26个字母各自出现的次数,并依次存放在PP所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:# include # include void fun(
20、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;k26 ; 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)
21、;)答案是:void fun (char *tt, int pp)(int I;for(i=0;i26;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 :pp
22、10+;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;cas
23、e y :pp24+;break;case z :pp25+;break;)tt+;)第5套填空题给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回 二分之一的圆面积(注:圆面积公式为:S二,凡 在程序中定义的变量名要与公式的变量相同)。例如,输入圆的半径值:19.527,输出为:S=598. 950017。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:ttinclude double fun(double r)return 3. 14159*1/2. 0;)main() double x;printf(Ent
24、er x:);scanf(%lf, 2); printf(* s = %lfn ”, fun(3);) 第1处填空:r*r 第2处填空:&x 第3处填空:x 改错题假定整数数列中的数不重复,并存放在数组中。下列给顶程序中,函数fun的功 能是删除数列中值为x的元素,同时将其他元素前移。N中存放的是数列中元素的个数。 请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:include #define N 20 fun(int *a, int n, int x) ( int p = 0, i; an = x;while (x !=
25、 ap) P = p+1; if (p = n) ( return -1;) else ( /*fc)und*/ for (i=p; in; 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; in; i+) printf(%5d, wi);printf(nlnput x (to delete):); scanf&x);printf (zzDelete :%dn/,,
26、 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; in; 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。注意:部分源程序给出如下。
27、请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:Sinclude Sinclude 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; mn; m+)printf (,?%d ”, zzm);printf(n);fun (28, 20, zz);out = fopen (out.
28、 dat,“w);for (m = 0; m =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 double fun(double q)(int n;double s;n = 2;s = 2. 0;while (s 1 q)(s = s + (double)(n+
29、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 #include double fun(int m)(double y = 1.
30、 0;int i;/*found*/for (i=2; im; 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中存放指定的下标。 例如,输入一个
31、字符串World,然后输入3,则调用该函数后的结果为Word。 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入 所编写的若干语句。试题程序:# include # include # 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 dele
32、ted: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;iLEN;i+) if (i !=n) bj=ai;j+;)bj=, Of ;)第7套填空题函数fun的功能是:统计长整数n的各个位上出现数字1
33、, 2, 3的次数,并通过外部(全局)变量cl,c2,c3返回主函数。例如,当=123114350时,结果应该为:cl=3, c2=l, c3=2.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所 编写的若干表达式或语句。试题程序如下:#include 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);
34、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 ttdefine N 20void fun(int a口, int n) (int i, j, t, p;for (j=0; jn-l; j+) /*fo
35、und*/P = jfor (i=j; in; 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; im; i+)printf (zz%d, zz, ai);printf(n);fun (a, m);printf (排序06 o);for (i=0; im; i+)printf (%d, , ai);printf(n);第1处:p = j应改为p=j; 第2处:p = i应改为p=j;编程题请编写一个函数int
36、 fun(int*s, int t, int*k),用来求出数组的最大元素在数组 中的下标并存放在k所指的存储单位中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6, 980o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所 编写的若干语句。试题程序:# include # include void fun(int *s, int t , int *k) main()int a10 = 876, 675, 896, 101, 301, 401, 980, 431, 451,
37、 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;imax)(max=s i;*k=I;第8套填空题请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找 出最大的整数。当输入的整数为0时结束。例如,输入1 2 3 5 4 0时,最大的数为5。请勿改动
38、主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编 写的若干表达式或语句。试题程序:#include #include 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 处填空:maxmax?第3 处填空:numi !=00
39、!=numi改错题下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字 符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输 入:ABCDeFGH,调用后字符串中的内容为eABCDFGH请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:include /*found*/void fun(char *p);char max, *q;int i = 0;max = pi;while (pi != 0)(if (max 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;
限制150内