全国计算机二级-C语言99套上机操作题及答案.docx
C语言上机操作题.第1套 填空题请补充FUN函数,FUN函数的功能是求10的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include <stdio.h> long fun (int n) if (1)return (n*fun (2);return 3;main () printf(n10!=%ldnn z fun (10);第1处填空:n>l或l<n第2处填空:n-1第3处填空:1或11或IL改错题下列给定程序的功能是:读入一个整数K (2 <=K=10000),打印它的所 有因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、 7、Ho请改正程序中的错误,使程序能得出正确的结果。注意:不要改动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 r k;printf(nnplease enter an integer number between 2 and 10000: n);scanf(n%dn, &k);printf (nnnThe prime factor (s) of %d is (are) :n, k);for (j=2; j<k; j + + )if (!(k%j) && (IsPrime(j)printf ( n %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(nnBelow the average score are :n);out=fopen(nout.dat", n w n);for(i=0;i<n;i+)printf(n%d n z belowi);fprintf (out, n%dnn, belowi);)fclose (out);答案是:int fun(int scored, int m, int belowf)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) (below k=score i; k+;return k;第2套填空题请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输 出斐波纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和, 如:0 1 1 235 8 13.请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所 编写的若干表达式或语句。试题程序:#include <stdio.h>int fun (int n);main ()int iz n = 0;scanf(n%dn, &n);for (i=0; i<n; i+)printf(n%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=l或l=n第 3 处填空:fun(n-l)+fun(n-2)或 fun(n-2)+fun(n-l)改错题下列给定程序中,函数FUN的功能是:逐个比较a、b两个字符串对应位置 中的字符,把ASCH值大或相等的字符依次存放到c数组中,形成一个新的字符 串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字 符串应为:aBcdeFgHo请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include <stdio . h>include <string.h> void fun (char *pz char *qz char *c) (Ifound*/ int k = 1;/夫夫found夫夫夫夫/ while (*p != *q) (if (*p < *q)ck = *q; elseck = *p;if (*p)P+ + ; if (*q) q+; k + + ;main ()char a10 = naBCDeFgHn , b10 = "ABcd”,c80 = 101; fun (a, b, c);printf ( nThe string a:n;puts (a);printf(nThe string b:n);puts (b);printf ( "The result:n); put s (c);第1处:int k=l应改为int k=0;第 2 处:while(*p!=*q)应改为 while(*pll*q)编程题请编写函数fun,它的功能是:求出1至U 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 (aaz &n);out = fopen("out.dat ”, nwn);for (k=0;k<n;k+)if ( (k+1)%10=0)printf(n%5dnn,aak);fprintf (out, “告dn”,aa k);)elseprintf(”5d,",aa k);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=0lli% 1 l=0)&&i%77!=0)aj+l=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(nEnter a string:n);gets (a);printf(nThe original string is:"); puts (a);fun (a);printf("n");printf(nThe string after modified:n); puts (a);第1处填空:n-或-n或n-=l或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 iz j;/found*/for (i=0z j=0; si!=101; i+) if (sj>=f 0 f && si<=* 9f)s j = s i;/found/ s j = M0"main () (char item80;printf(nnEnter a string :n );gets (item);printf (nnnThe string is : %snn, item);fun(item);printf(HnnThe string of changing is : %sn”, item);第 1 处:sj=si;应改为 sj+=si 第 2 处:sj='7O''应改为 sj='O'编程题请编写函数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> main()void fun (int x, intPP/ int *n)int xz aa1000z nz i;FILE *out;printf(nnPlease enter an integer number:nn);scanf(n%dnz &x);fun(xz aaz &n);for(i=0;i<n;i+)printf(n%d ”, aa i);printf ( ”n");fun (730z aaz &n);out = fopen(nout.datn, n w n;for (i = 0; i < n; i+)fprintf (out, H%dnn, aai);fclose (out);答案是:void fun(int x,int pp,int *n) (int i=l,j=O,k=O,*t=pp;for(i=0;i<=x;i+)if(i%2!=0)(tj=>j+;)for(i=0;i<j;i+) if(x%ti=O)ppk=ti; k+;*n=k;1第4套 填空题请补充函数FUN,它的功能是:计算并输出N (包括N)以内能被3或7 整除的所有自然数的倒数之和。例如,在主函数中从键盘给N输入30后,输出为:S=l.226323c请勿改动主函数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(nnlnput n: scanf("%d", &n);s = fun (n);printf(nnns=%fnnz s); 第1处填空:iv=n或n>=i第2处填空:II第3处填空:1.0或(double) 1改错题下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的 个数。例如,给字符串s输入:AaaaBBbl23CCccccd,则应输出结果:upper=6,lower=8请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include <conio.h>include <stdio.h> /found*/void fun (char *sz int a, int b)while (*s)/found/if (*s>= * A1 && *s<= * Z *) a+ + ;/found夫Is+;main ()char s 100;int upper = 0, lower = 0;printf(nnPlease a string : n);gets(s);fun (sz Supper, Slower);printf ( nn upper=%d lower=%dnn r 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(l),统计在tt字符串中"a"到"z" 26个字母各自出现的次数,并依次存放在pp所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中 填入所编写的若干语句。试题程序:# include <conio. h># include <stdio.h>void fun(char *ttz int pp) main ()(char aa 1000;int bb 26, k;FILE *out;printf (nnPlease enter a char string:n);scanf("%s”,aa);fun(aaz bb);for(k=0;k<26 ; k+)printf(n%dnzbbk);printf ( nnH);fun (na bosom friend afar brings a distant land nearn, bb);out = fopen(nout.datn, n w n);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 'a':ppO+;break;case ,b,:ppl+;break;case yc*: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 ,r:ppll+;break;case 'm5 :pp 12+;break;case 9n9 :pp 13+;break;case 'o':pp14+;break;case 'p':pp15+;break;case 'q':pp16+;break;case T: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+;填空题给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数 返回二分之一的圆面积(注:圆面积公式为: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 *az int n, int x) (int p = 0, i;a n = x;while (x != a p)return -1;elsefound*/for (i=p; i<n; i+)ai + 1 = a i;return n-1;)main ()(int wN = -3, 0, 1, 5, 7, 99, 10, 15z 30, 90r x, n, i;n = 10;printf(nThe original data:nn);for (i=0; i<n; i+)printf(n%5dnz wi);printf(nnlnput x (to delete):n);scanf(”d”, &x);printf (nDelete :%dnn, x);n = fun (w, n, x);if (n = -1)(printf(n*Not be found!*nnn);elseprintf ( "The data after delete :nn);for (i=0; i<n; i+)printf (,%5d, wi);printf ( "nnn);第 1 处:ai+l=ai;应改为 ai=ai+l编程题请编写一个函数voidfun(intm,intk,intxx),该函数的功能是:将大于整数 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 (MnPlease enter two integers:n); scanf("%d,%d",&n);fun( m,n,zz);for(m=0; m<n; m+)printf(n%d ", zzm);printf ( "n");fun (28, 20, zz);out = fopen(nout.datn, "w");for (m = 0; m < 20; m+)fprintf (out, n%dnH, zzm);fclose (out);答案是:void fun(int m.int k,int xx1)int g=O,I,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;k-;elsebreak;)第6套填空题给定程序的功能是计算并输出下列级数的前N项之和直到Sn大于Q 为止,Q的值通过形参传入。例如,若Q的值为50.0,则函数值为50.416687o请勿改动主函数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 ()print f ( n%fnT, fun (50); )第1处填空:<=第2处填空:n+或n+=l或n=n+l第 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 (r, nThe result is %lfn" , 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 n),其功能是:删除一个字符串中 指定下标的字符。其中,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(nEnter the string:nn);gets (strl);printf ("Enter the position of the string deleted:n);scanf("%d",&n);fun (strl, str2z n);printf(nThe new string is:%snn,str2);fun("Hell。 World!n, str2z 9);out = fopen(nout.datn, n w n);fprintf (out, "%sn, 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+;1bj='O';填空题函数fun的功能是:统计长整数n的各个位上出现数字1, 2, 3的次数,并通 过外部(全局)变量cl,c2,c3返回主函数。例如,当=123114350 时,结果应该为:cl=3,c2=l,c3=2.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入 所编写的若干表达式或语句。试题程序如下:#include <stdio . h>int cl, c2 r 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(nnThe result :nn);printf(nn=%ld cl=%d c2=%d c3=%dnn, n, cl, c2, c3);)第1处填空:n%10第2处填空:break第3处填空:break改错题下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到 大的顺序进行排序。请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include <stdio . h>#define N 20 void fun (int a z int n) int i, jz t, p;for (j=0; j<n-l; j+) Ifound*/P = j for (i=j; i<n; i+) if(ai < a p) /*found*/P = i; t = a p; a p = a i; a i = t;)main ()int a N = 9, 6, 8, 3, -1, i, m = 5; printf(nAADdQ°£on); for (i=0; i<m; i+)printf(n%dz ai);printf(”n");fun (a, m);printf(nAADd°6£° ”);for (i=0; i<m; i+) printf("%d,", a i);printf ( nnH);第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 *sz int t , int *k) main () int a10=876z675,896z101,301,401z980,431,451,777, k ;FILE *out;fun(az10,&k);printf(n%d, %dnn, k, a k);out = fopen("out.datn, n w n);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 23 540时,最大的数为5。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所 编写的若干表达式或语句。试题程序:#include <stdio. h>#include <conio.h>#define N 100main () int numN;int i = -1;int max = 0;printf(nnlnput integer number: nn); doprintf("num%d=", i);scanf("%d", 1);max = 2 numi : max; while (3);printf(Mmax=%dnn, max);)第1处填空:&numi或num+i第 2 处填空:maxvnumi?或 numfi>max?第 3 处填空:numi!=O 或 O!=numi改错题下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字 符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用 fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH 请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>/found*/void fun(char *p);(char max, *q;int i = 0;max = p i;while (pi != 0)if (max < pi)(/工 oundImax = p i;p = q+i;i + + ;while (q > p)*q = *(q-1);q一;p0 = max;main ()char str 80;printf(HEnter a string:gets(str);printf(nnThe original string:n );puts (str);fun (str);printf(nnThe string after moving: n );puts (str);printf ( "nn");第 1 处:void fun(char *p);应改为 void fun(char *p) 第2处:p=q+I;应改为q=p+i;编程题编写函数fun,函数功能是:根据以下公式计算s,计算结果作为函数值返回;n 通过型参传入。s=i+!+5+.+1 + 2 1 + 2 + 31 + 2 4 3 + .m例如:若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入 所编写的若干语句。试题程序:#inclu