月计算机二级c语言上机题库.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流月计算机二级c语言上机题库.精品文档.2012年3月计算机二级c语言上机题库.第1套填空题请补充FUN函数,FUN函数的功能是求10的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序: #include <stdio.h>long fun(int n)if (_1_)return (n*fun(_2_);return _3_;main()printf("10!=%ldn", fun(10);第1处填空:n>1或1<n第2处填空:n-1第3处填空:1或11或1L改错题下列给定程序的功能是:读入一个整数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("nplease enter an integer number between 2 and 10000:");scanf("%d", &k);printf("nnThe prime factor(s) of %d is(are):", k);for (j=2; j<k; j+)if (!(k%j) && (IsPrime(j)printf(" %4d,", 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、80、90时,函数返回的认输应该是4,below中的数据应我10、20、30、40。注意:部分源程序给出如下。请勿改动主函数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("out.dat", "w");for(i=0;i<n;i+) printf("%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;i<m;i+)if(scorei<aver) belowk=scorei; k+;return k;第2套填空题请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输出斐波纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:0 1 1 2 3 5 8 13.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <stdio.h>int fun(int n);main()int i, n = 0;scanf("%d", &n);for (i=0; i<n; i+)printf("%d ", fun(i);int fun(int n)if (_1_)return 0;else if (_2_)return 1;elsereturn _3_;第1处填空:n=0或0=n或!n第2处填空:n=1或1=n第3处填空:fun(n-1)+fun(n-2)或fun(n-2)+fun(n-1)改错题下列给定程序中,函数FUN的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序: #include <stdio.h>#include <string.h>void fun(char *p, char *q, char *c)/*found*/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("The string a:");puts(a);printf("The string b:");puts(b);printf("The result:");put s(c);第1处:int k=1应改为int k=0;第2处:while(*p!=*q)应改为while(*p|*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");for(k=0;k<n;k+)if(k+1)%10=0)printf("%5dn",aak);fprintf(out, "%dn", aak);elseprintf("%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%11=0)&&i%77!=0)aj+=i;*n=j;第3套填空题请补充函数FUN(CHAR *S),该函数的功能是把字符串中的内容逆置.例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <string.h>#include <conio.h>#include <stdio.h>#define N 81void fun(char *s)int i, n = strlen(s)-1;char t;for (i=0; i<n; i+, _1_)t = si;_2_;_3_;main()char aN;printf("Enter a string:");gets(a);printf("The original string is:");puts(a);fun(a);printf("n");printf("The string after modified:");puts(a);第1处填空:n-或-n或n-=1或n=n-1第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;/*found*/for (i=0, j=0; si!='0' i+)if (sj>='0' && si<='9')sj = si;/*found*/sj = "0"main()char item80;printf("nEnter a string :");gets(item);printf("nnThe string is : %sn", item);fun(item);printf("nnThe string of changing is : %sn", item);第1处:sj=si;应改为sj+=si第2处:sj=”/0”;应改为sj=0;编程题请编写函数void fun(int x,int pp,int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在 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("nPlease enter an integer number:n"); scanf("%d",&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=1,j=0,k=0,*t=pp; for(i=0;i<=x;i+)if(i%2!=0) tj=i; j+;for(i=0;i<j;i+)if(x%ti=0) ppk=ti;k+;*n=k;第4套填空题请补充函数FUN,它的功能是:计算并输出N(包括N)以内能被3或7整除的所有自然数的倒数之和。例如,在主函数中从键盘给N输入30后,输出为:S=1.226323。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序: #include <stdio.h>double fun(int n)int i;double sum = 0.0;for (i=1; _1_; i+)if (i%3=0 _2_ i%7=0)sum += _3_/i;return sum;main()int n;double s;printf("nInput n: ");scanf("%d", &n);s = fun(n);printf("nns=%fn", s);第1处填空:i<=n或n>=i第2处填空:|第3处填空:1.0或(double)1改错题下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AaaaBBb123CCccccd,则应输出结果: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("nPlease enter a char string:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26 ; k+)printf("%d",bbk);printf("n");fun("a bosom friend afar brings a distant land near", bb);out = fopen("out.dat", "w");for (k = 0; k < 26; k+)fprintf(out, "%dn", bbk);fclose(out);答案是:void fun(char *tt,int pp) int I;for(i=0;i<26;i+)ppi=0;while(*tt)switch(*tt) case a:pp0+;break; case b:pp1+;break; case c:pp2+;break; case d:pp3+;break; case e:pp4+;break; case f:pp5+;break; case g:pp6+;break; case h:pp7+;break; case i:pp8+;break; case j:pp9+;break; case k:pp10+;break; case l:pp11+;break; case m:pp12+;break; case n:pp13+;break; case o:pp14+;break; case p:pp15+;break; case q:pp16+;break; case r:pp17+;break; case s:pp18+;break; case t:pp19+;break; case u:pp20+;break; case v:pp21+;break; case 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函数的横线上填入所编写的若干表达式或语句。试题程序:#include <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 20fun(int *a, int n, int x)int p = 0, i;an = x;while (x != ap)p = p+1;if (p = n)return -1;else/*found*/for (i=p; i<n; i+)ai+1 = 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:n");for (i=0; i<n; i+)printf("%5d", wi);printf("nInput x (to delete):");scanf("%d", &x);printf("Delete :%dn", x);n = fun(w, n, x);if (n = -1)printf("*Not be found!*nn");elseprintf("The data after delete :n");for (i=0; i<n; i+)printf("%5d", wi);printf("nn");第1处:ai+1=ai;应改为ai=ai+1编程题请编写一个函数void fun(int m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入:17,5,则应输出:19,23,29,31,37。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序: #include <conio.h>#include <stdio.h>void fun(int m, int k, int xx)main() int m,n,zz1000; FILE *out;printf("nPlease enter two integers:");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("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,I,j,flag=1; for(i=m+1;i<m*m;i+) for(j=2;j<I;j+) if(i%j!=0)flag=1;else flag=0;break;if(flag=1&&j>=i)if(k>=0) xxg+=I;k-;elsebreak;第6套填空题给定程序的功能是计算并输出下列级数的前N项之和 ,直到 大于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("n=%dn",n);_3_;main()printf("%fn", fun(50);第1处填空:<=第2处填空:n+或n+=1或n=n+1第3处填空:return s或return (s)改错题下列给定程序中,函数fun的功能是:根据整型参m的值,计算如下公式的值。例如,若m中的值为5,则应输出:0.536389请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序: #include <conio.h>#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);main()int n = 5;printf("nThe result is %1fn", fun(n);第1处:for (i=2;i<m;i+)应改为for(i=2;i<=m;j+)第2处:y-=1/(i*i);应改为y-=1.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");gets(str1);printf("Enter the position of the string deleted:");scanf("%d",&n);fun(str1, str2, n);printf("The 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=0;第7套填空题函数fun的功能是:统计长整数n 的各个位上出现数字1,2,3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如,当=123114350时,结果应该为:c1=3,c2=1,c3=2.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序如下: #include <stdio.h>int c1, c2, c3;void fun(long n)c1 = c2 = c3 = 0;while (n)switch(_1_)case 1:c1+;_2_;case 2:c2+;_3_;case 3:c3+;n /= 10;main()long n = 123114350L;fun(n);printf("nThe result :n");printf("n=%ld c1=%d c2=%d c3=%dn", n, c1, 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-1; 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("?Dò?°o");for (i=0; i<m; i+) printf("%d,", ai);printf("n");fun(a, m);printf("?Dòoó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所指的存储单位中。例如,输入如下整数:876675 896 101 301 401 980 431 451 777则输出结果为:6,980。注意:部分源程序给出如下。请勿改动主函数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, k ;FILE *out;fun(a,10,&k);printf("%d, %dn", 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=si;*k=I;第8套填空题请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为0时结束。例如,输入1 2 3 5 4 0时,最大的数为5。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序: #include <stdio.h>#include <conio.h>#define N 100main()int numN;int i = -1;int max = 0;printf("nInput integer number: n");doi+;printf("num%d=", i);scanf("%d", _1_);max = _2_ numi : max; while(_3_);printf("max=%dn", max); 第1处填空:&numi或num+i第2处填空:max<numi?或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("nThe original string: ");puts(str);fun(str);p