收藏 分销(赏)

计算机二级C语言99套上机操作题及答案.doc

上传人:ha****ot 文档编号:30513 上传时间:2020-11-23 格式:DOC 页数:226 大小:1.68MB 下载积分:0.5 金币
下载 相关 举报
计算机二级C语言99套上机操作题及答案.doc_第1页
第1页 / 共226页
计算机二级C语言99套上机操作题及答案.doc_第2页
第2页 / 共226页


点击查看更多>>
资源描述
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!=%ld\n", 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("\n\nThe 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,below[9]; int score[9]={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 ",below[i]); fprintf(out, "%d\n", below[i]); } fclose(out); } 答案是: int fun(int score[], int m, int below[]) { int I, k=0,aver=0; for(i=0;i<m;i++) aver+=score[i]; aver/=m; for(i=0;i<m;i++) if(score[i]<aver) { below[k]=score[i]; 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; else return ___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) c[k] = *q; else c[k] = *p; if (*p) p++; if (*q) q++; k++; } } main() { char a[10] = "aBCDeFgH", b[10] = "ABcd", c[80] = {\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 aa[1000],n,k; FILE *out; fun(aa,&n); out=fopen("out.dat", "w"); for(k=0;k<n;k++) if((k+1)%10==0) { printf("%5d\n",aa[k]); fprintf(out, "%d\n", aa[k]); } else { printf("%5d,",aa[k]); fprintf(out, "%d,", aa[k]); } 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) 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 i, 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:"); 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处填空:s[i]=s[n]或*(s+i)=*(s+n) 第3处填空:s[n]=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; s[i]!=\0; i++) if (s[j]>=0 && s[i]<=9) s[j] = s[i]; /********found********/ s[j] = "\0"; } main() { char item[80]; printf("\nEnter a string :"); gets(item); printf("\n\nThe string is : %s\n", item); fun(item); printf("\n\nThe string of changing is : %s\n", item); } 第1处:s[j]=s[i];应改为s[j++]=s[i] 第2处:s[j]=”/0”;应改为s[j]=’\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, aa[1000], 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 ", aa[i]); printf("\n"); fun(730, aa, &n); out = fopen("out.dat", "w"); for (i = 0; i < n; i++) fprintf(out, "%d\n", aa[i]); 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) { t[j]=i; j++; } for(i=0;i<j;i++) if(x%t[i]==0) { pp[k]=t[i]; 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("\n\ns=%f\n", 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 s[100]; int upper = 0, lower = 0; printf("\nPlease a string : "); gets(s); fun(s, &upper, &lower); printf("\n upper=%d lower=%d\n", 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 aa[1000]; int bb[26], k; FILE *out; printf("\nPlease enter a char string:"); scanf("%s",aa); fun(aa,bb); for(k=0;k<26 ; k++) printf("%d",bb[k]); 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, "%d\n", bb[k]); fclose(out); } 答案是: void fun(char *tt,int pp[]) { int I; for(i=0;i<26;i++) pp[i]=0; while(*tt) {switch(*tt) { case ’a’:pp[0]++;break; case ’b’:pp[1]++;break; case ’c’:pp[2]++;break; case ’d’:pp[3]++;break; case ’e’:pp[4]++;break; case ’f’:pp[5]++;break; case ’g’:pp[6]++;break; case ’h’:pp[7]++;break; case ’i’:pp[8]++;break; case ’j’:pp[9]++;break; case ’k’:pp[10]++;break; case ’l’:pp[11]++;break; case ’m’:pp[12]++;break; case ’n’:pp[13]++;break; case ’o’:pp[14]++;break; case ’p’:pp[15]++;break; case ’q’:pp[16]++;break; case ’r’:pp[17]++;break; case ’s’:pp[18]++;break; case ’t’:pp[19]++;break; case ’u’:pp[20]++;break; case ’v’:pp[21]++;break; case ’w’:pp[22]++;break; case ’x’:pp[23]++;break; case ’y’:pp[24]++;break; case ’z’:pp[25]++;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 = %lf\n ", 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; a[n] = x; while (x != a[p]) p = p+1; if (p == n) { return -1; } else { /********found********/ for (i=p; i<n; i++) a[i+1] = a[i]; return n-1; } } main() { int w[N] = {-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", w[i]); printf("\nInput x (to delete):"); scanf("%d", &x); printf("Delete :%d\n", x); n = fun(w, n, x); if (n == -1) { printf("***Not be found!***\n\n"); } else { printf("The data after delete :\n"); for (i=0; i<n; i++) printf("%5d", w[i]); printf("\n\n"); } } 第1处:a[i+1]=a[i];应改为a[i]=a[i+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,zz[1000]; FILE *out; printf("\nPlease enter two integers:"); scanf("%d,%d",&m,&n); fun( m,n,zz); for(m=0; m<n; m++) printf("%d ", zz[m]); printf("\n"); fun(28, 20, zz); out = fopen("out.dat", "w"); for (m = 0; m < 20; m++) fprintf(out, "%d\n", zz[m]); 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) { xx[g++]=I; k--; } else break; } } } 第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=%d\n",n); ___3___; } main() { printf("%f\n", 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 %1f\n", 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 20 void fun(char a[], char b[], int n) { } main() { char str1[LEN],str2[LEN]; 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:%s\n",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) { b[j]=a[i]; j++; } b[j]=’\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=%d\n", n, c1, c2, c3); } 第1处填空:n%10 第2处填空:break 第3处填空:break 改错题 下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include <stdio.h> #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j=0; j<n-1; j++) { /********found********/ p = j for (i=j; i<n; i++) if(a[i] < 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(""); for (i=0; i<m; i++) printf("%d,", a[i]); printf("\n"); fun(a, m); printf(""); for (i=0; i<m; i++) printf("%d,", a[i]); 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,980。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: # include <conio.h> # include <stdio.h> void fun(int *s, int t , int *k) { } main( ) { int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; FILE *out; fun(a,10,&k); printf("%d, %d\n", k, a[k]); out = fopen("out.dat", "w"); fprintf(out, "%d\n%d", k, a[k]); fclose(out); } 答案是: void fun (int *s,int t,int *k) { int I ,max; max=s[0]; for(i=0;i<t:i++) if(s[i]>max) { max=s[i]; *k=I; } } 第8套 填空题 请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为0时结束。 例如,输入1 2 3 5 4 0时,最大的数为5。 请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。 试题程序: #include <stdio.h> #include <conio.h> #define N 100 main() { int num[N]; int i = -1; int max = 0; printf("\nInput integer number: \n"); do { i++; printf("num[%d]=", i); scanf("%d", ___1___); max = ___2___ num[i] : max; } while(___3___); printf("max=%d\n", max); } 第1处填空:&num[i]或num+i 第2处填空:max<num[i]?或num[i]>max? 第3处填空:num[i]!=0或0!=num[i] 改错题 下列给定程序中,函数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 计算机应用

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服