考试大论坛:2011年计算机二级C语言99套上机操作题及答案.docx
.第1套注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句.试题程序:#include <stdio.h> long fun(int n)(if (一1一)return (n*fun (2);return 3;main ()(printf(n10!=%ldn", fun(10);第1处填空:n>l或l<n第2处填空:n-1第3处填空:1或11或IL 改错题下列给定程序的功能是:读入一个整数K (2=K (=10000),打印它的所有因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。请改正程序中的错误,使程序能得出正确的结果.注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <conio.h>#include <stdio.h>/*found*/ 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 (nnplease enter an integer number between 2 and 10000:n);scanf("%dw,&k);printf ("nnThe prime factor (s) of %d is (are): H , k);for (j=2; j<k; j+)if (!(k% j)&&(IsPrime(j) printf(w %4d,w, j);printf("n");)第1处:Isprime(int n);应改为 Isprime(int n)第2处:if !(n%i)应该为 if(!(n%i)编程题M个人的成绩存放在score数组中,请编写函数fun,它的功能是:返回低于平均分的认输,并将低于平均分的分数放在below 所指的数组中。例如,当 score 数组中的数据为10、20、30、40、50、60、70、8()、填空题请补充FUN函数,FUN函数的功能是求10的阶乘。90时,函数返回的认输应该是4, below中的数据应我10,20、30、40 o注意:部分源程序给出如下。请勿改动主:函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。试题程序:#include <conio.h>#include <stdio.h>#include <string.h>int fun(int score,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(nout.datn, n w M);for(i=0;i<n;i+)printf("%d "/belowfi);fprintf(out, n%dn"z belowi);fclose(out);)答案是:int fun(int score, int m, int below)int I, k=0,aver=0;fbr(i=0;i<m;i+)aver+=scorei;aver/=m;fbr(i=0;i<m;i+)if(score|i<aver)(belowk=scorei;k+;)return k;)第2套填空题请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输出斐波纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:011235813.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <stdio.h>int fun (int n);main()int i, n =0;scanf("%d",&n);for (i=0; i<n; i+)printf(M%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(n1)+fun(n-2)或 fun(n-2)+fun(n-I)改错题卜列给定程序中,函数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)(/*found*Iint k =1;/found*/while (*p !=*q)(if (*p <*q)ck=*q;elseck=*p;if (*p)P+;if (*q)q+;k+;main ()(char a 10= MaBCDeFgH", b10="ABcd”,c 80='0';fun (a, b, c);printf("The string a:n);puts(a);printf("The string b:n);puts(b);printf("The result:n);put s (c);第1处:intk=l应改为int k=0;第2处:while(*p!=*q)应改为 while(*pll*q)编程题请编写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同时被7或11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。试题程序:#include <conio.h>#include <stdio.h> void fun(int *a,int *n)main ()int aa1000,n,k;FILE *out;fun(aa,&n);out=fopen("out.dat","w M);for(k=0;k<n;k+)if(k+1)%10=0)(printf(n%5dnM,aak);fprintf(out,"%dnw, aak);else(printf(M%5d,M,aak);fprintf(out,"%df n, aak);fclose(out);)答案是:void fun(int *a,int *n)(int i,j=0;for(i=2;i<1000;i+)if(i%7=0lli%ll=0)&&i%77!=0)a|j+=i;*n=j;第3套填空题请补充函数FUN(CHAR *S),该函数的功能是把字符串中的内容逆置.例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <string.h>#include <conio.h>#include <stdio.h>#define N 81 void fun(char *s)int iz n = strlen(s)-1;char t;for (i=0; i<n; i+,1)(t = s(i;一2一;_3;main()char a N;printf("Enter a string:n);gets(a);printf("The original string is:M);puts (a);fun(a);printf(nnM);printf("The string after modified:"); puts (a);)第处填空:n或或或n=n-l第2处填空:si=sn*(s+i)=*(s+n)第3处填空:sn=t 或*(s+n)=t改错题下列给定的程序中,函数fun的功能是:依次取出字符串中所以数字字符,形成新的字符串,并取代原字符串.请改正函数fun中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#include <conio.h> void fun(char *s)(int i, j;/*founci*/for (i=0, j=0; si!=101; i+)if (sj>=*0*&& si<='91) s j= s i;/*fourid*/ sj= w0"main ()(char item80;printf("nEnter a string :");gets(item);printf(wnnThe string is :%snn, item);fun(item);printf(nnnThe string of changing is :%snM, item);第1处:sj=si;应改为 sj+=si第2处:sj="/(r;应改为 sj='O'编程题请编写函数void fun(int x,int pp,int *n),它的功能是:求出能整除x FL不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回.例如,若x中的值为30厕有4个数符合要求,它们是1,3,5,15.注意:部分源程序给出如口请勿改动主:函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。试题程序:#include <conio.h>#include <stdio.h> void fun(int x, int pp, int *n)(main ()(int x, aa1000, n, i;FILE *out;printf (nnPlease enter an integer number:nn);scanf("%dwr &x);fun(x,aa,&n);for(i=0;i<n;i+)printf(",aa i);printf(nn");fun(730, aa,&n);out = fopen("out.dat", nwn);for (i =0; i < n; i+)fprintf (out,“当dn”,aai);fclose(out);答案是:void fun(int xjnt pp,int *n)int i=l,j=O,k=O,*t=pp; fdr(i=O;i<=x;i+)if(i%2!=0)(tU=i;j+;fbr(i=O;i<j;i+) if(x%ti=O)(ppk=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=02 i%7=0)sum +=3/i;return sum;)main()(int n;double s;printf("nlnput n: H);scanf (&n);s = fun(n);printf(wnns=%fnn, s);)第1处填空:iv=n或n>=i第2处填空:II第3处填空:1.0或(double)l改错题卜.列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AaaaBBbl23CCccccd,则应输出结果:upper=6,lower=8请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <conio.h>#include <stdio.h>void fun(char *s, int a, int b)(while (*s)s+;(/found*/ if (*s>=*A,&&*s<=Z) a+;/*found*/ if (*s>=fa'&&*s<=» z1) b+;)main ()(char s 100;int upper =0, lower =0;printf (wnPlease a string :'*);gets(s);fun(s,&upper, slower);printf(nn upper=%d lower=%dn", upper, lower);第1处:void fun (char *s,int ajnt 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后,程序的输出结果应该是:33322II(XXXX)(XXXXX)(X)(XMXX)O注意:部分源程序给出如下。请勿改动主:函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。试题程序:# include <conio. h># include <stdio.h>void fun(char tt, int pp)(main ()(char aa1000;int bb(26, k;FILE *out;printf(nnPlease enter a char string:n);scanf(n%sM,aa);fun(aa,bb);for(k=0;k<26; k+)printf("%dn,bbk);printf (wn");fun(Ha bosom friend afar brings a distant land near", bb);out = fopen("out.dat", nw");for (k -0; k <26; k+)fprintf(out,"%dn”, bbk);fclose(out);答案是:void fun(char *ttjnt pp)(int I;for(i=0;i<26;i+)PPi=O;while(*tt)switch(*tt)case 'a':ppO+;break;case 'b':ppl+;break;case *c*:pp2+;break;case 'd':pp3+;break;case "c9:pp4-H-;break;case 9f :pp5+;break;case,g':pp6+;break;case ,h,:pp7+;break: case ,i,:pp8+;break; case ,j,:pp9+;break; case ,kpp10+;break; case T :pp11+;break;case 'm':pp12+;break;case ,npp13+;break;case ,o,:pp14+;break;case 5ppp15+;break;case 'qpp16+;break;case T:pp17+;break;case ':pp18+;break;case 't':pp19+;break;case ,u':pp20+;break;case ,v,:pp21+;break;case ,w,:pp22+;break;case 'xpp23+;break; case ,y,:pp24+;break; case ,z,:pp25+;break;n+;第5套填空题给定程序的功能是求二分之的圆面积,函数通过形参得到圆的半径,函数返四二分之一的圆面积(注:圆面积公式为:S=成,在程序中定义的变量名要与公式的变量相同)。例如,输入圆的半径值:19.527,输出为:S=598.950017。请勿改动主:函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <stdio.h>double fun(double r)return 3.14159*1/2.0;)main()(double x;printf("Enter x:");scanf2);printf(n s =%lfn ”, fun(3);)第1处填空:r*r第2处填空:&x第3处填空:x改错题假定整数数列中的数不重复,并存放在数组中。卜列给顶程序中,函数fun的功能是删除数列中值为x的元素,同时将其他元素前移。N中存放的是数列中元素的个数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#define N 20fun(int *a, int n, int x)int p =0, i;a n= x;while (x != ap)P = P+1;if (p = n)return -1;else(/*found*/for (i=p; i<n; i+)ai+l= ai;return n-1;)main ()(int wN=-3,0,1,5,7,99,10,15,30,90), x, n, i;n =10;printf("The original data:nM);for (i=0; i<n; i+)printf("%5d", wi);printf(wnlnput x (to delete):n);scanf("%dn,&x);printf("Delete :%dn0, x);n = fun (w, n, x);if (n =-1)(printf("*Not be found!*nn");else(printf ("The data after delete :n");for (i=0; i<n; i+)printf(w%5dw, wi);printf(nnn");第1处:ai+ll=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 的花括号中填入所编写的若干语句。试题程序:tinclude <conio.h>#include <stdio.h>void fun(int m, int k, int xx)( main ()(int m,n,zz1000;FILE *out;printf(wnPlease enter two integers:M);scanf(”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(Mout.dat", nw");for (m =0; m <20; m+)fprintf(out, M%dnn, zzm);fclose(out);|答案是:void fun(int mjnt k,int xx)(int g=OJ,j,flag=l;for(i=m+l ;i<m*m;i+)for(j=2;j<I;j+)(if(i%j!=O) flag=l;else( flag=O; break;if(flag=l&&j>=i)(if(k>=0)(xxg+=I;else break;第6套填空题给定程序的功能是计算并输出下列级数的前N项之和$v ,宜到SN大于Q为止,Q的值通过形参传入。例如,若Q的值为50.0,则函数值为50.416687.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <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(nn=%dnn,n);3;)main()printffun(50);)第1处填空:<=第2处填空:n+或n+=l或n=n+l第3处填空:return s return (s)改错题下列给定程序中,函数ftm的功能是:根据整型参m的值,计算如下公式的值。例如,若m中的值为5,则应输出:0.536389请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <conio.h>#include <stdio.h>double fun(int m)(double y =1.0;int i;/*found*Ifor (i=2; i<m; i+)/found*/y -=1/(i*i);return (y);main ()(int n =5;printf(wnThe result is %lfnM, fun(n);第1处:for (i=2;ivm:i+)应改为 for(i=2;i<=m;j+)第2处:y-=l/(i*i);应改为 y-=1.0/(i*i)编程题清编写一个函数void fun(char a,char b,int 0,其功能是:删除一个字符串中指定下标的字符.其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串World,然后输入3,则调用该函数后的结果为Word.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。试题程序:# include <stdio. h># include <conio.h># define LEN 20void fun(char az char b, int n)( main ()char strlLEN, str2LEN;int n;FILE *out;printf(MEnter the string:nu);gets(strl);printf("Enter the position of the string deleted:n);scanf("%dw,&n);fun(strl, str2, n);printf("The new string is:%snn,str2);fun("Hello World!", str2r 9);out = fopen (Mout.dat",*'wn);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)(bU=ai;j+;IbU='O'填空题函数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+;case 4: /=10;)main ()long n =123114350L;fun (n);printf(nnThe result :nw);printf(wn=%ld cl=%d c2=%d c3=%dn", n, cl, c2, c3);第1处填空:n%10第2处填空:break第3处填空:break 改错题卜一列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使程序能得出正确的结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#define N 20void fun(int a, int n)int i, j, t, p;for (j=0; j<n-l; j+)(/*found*/P = j for (i=j; i<n; i+) if(ai< ap)(/*found*/P = i; t = a p; ap= ai; ai= t;main ()(int a N=9,6,8,3,-1 r i, m =5;printf(wAADdC°£OM);for (i=0; i<m; i+)printf("%d,", ai);printf(wn");fun(a, m);printf("AADd06£on);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所指的存储单位中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980<.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:# include <conio. h># include <stdio.h>void fun(int *s, int t , int *k) main ()(inta10=876,675,896,101,301,401,980,431,451,777), k ;FILE *out;fun(a,10,&k);printf("%d,%dn", k, ak);out = fopen(Mout.dat", nw");fprintf(out, w%dn%d", k, ak);fclose(out);答案是:void fun (int *s,int tjnt *k)(int I ,max;max=s0;for(i=0;i<t:i+)if(s|i>max)(max=si;k=I;第8套填空题请补充main函数,该函数的功能是:从犍盘输入组整数,使用条件表达式找出最大的整数。当输入的整数为0时结束。例如,输入123540时,最大的数为5。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <stdio.h>#include <conio.h>#def ine N 100main()(int numN;int i =-1;int max =0;printf("nlnput integer number:nn); do (i+;printf ("num%d=*', i);scanf(n%dnr 1);max =2 numi: max; while (3);printf("max=%dnn, max);)第1处填空:&numi或num+i第2处填空:maxvnumi?或 numi>max?第3处填空:numi!=0或0!=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+;while (q > p)(*q =*(q-1);q;)p0= max;)main ()char str80;printf("Enter a string:");gets (str);printf(MnThe original string: M);puts(str);fun(str);printf("nThe string after moving: n);puts(str);printf(wnnM);第1处:void fun(char *p);应改为 void fun(char *p)第2处:p=q+I;应改为q=p+i;编程题编写函数fun,函数功能是:根据以下公式计算s,计算结果作为函数值返回;n通过型参传入.111S=1+FF d1+21+2+31+2+3+.例如:若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio. h>#include<stdio.h>#include<string.h>float fun (int n)(main ()(int n;float s;FILE *out;printf(nnPlease enter N:w);scanf(”d”,&n);s=fun(n);printf(nThe result is:%fnnz s);s = fun (28);out = fopen("out.dat", n w M;fprintf(out,s);fclose(out);答案是:float fun(int n)(int i;float s=1.0,t=1.0;for(i=2;i<=n;i+)(t=t+i;s=s+l