《二级C语言题库-改错题.docx》由会员分享,可在线阅读,更多相关《二级C语言题库-改错题.docx(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和。和值通过函数 值返回.例如,若n = 5 ,则应输出8.391667.请改正程序中的错误,使其得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include void fun ( int n ) int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k = n; k+ ) /*nd * Is = s + (Double)a / b;c = a; a = a + b; b = c;return s;main() i
2、nt n = 5;printf( nThe value of function is: %lfn, fun ( n );【参考答案】(l)double fun(int n)(2)s=s+(double)a/b;2 .下列给定程序中函数fun的功能是:统计substr所指的子符串在str所指的字符串中 出现的次数。例如,若字符串为aaas Ikaaas ,子字符串为as ,则应输出2.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include int fun (char * str,char *substr) int
3、 i,j,k,num=O;/*nd * Ifor(i = 0, stri, i+)for(j=i,k=0;substrk=strj;k+,j+) /* fo und*IIf(substrk+l=0) num+;break;return num;main()char str80,substr80;printf(Input a string:);gets(str);printf(Input a substring:);gets(substr);printf(%dn,fun(str,substr);【参考答案】(l)for(i=0;stri;i+)(2)if(substrk+l= 0)3 .下列给定
4、程序中函数fun的功能是:实现两个变量值的交换,规定不允许增加语句和 表达式。例如,变量a中的值原为8 , b中的值原为3 ,程序运行后a中的值为3 , b中的值为8。请改正程序中的错误,使它得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include int fun(int *x,int y)intt;return(y);main()(int a = 3, b = 8 ;printf(%d %dn, a, b);b = fun(&a, b);printf(%d %dn, a, b);【参考答案】(l)t = *x ; *x = y ;(2)r
5、eturn(t);或 return t;4 .下列给定程序中函数fun的功能是:求两个非零正整数的最大公约数,并作为函数值 返回。例如,若numl和num2分别为49和21,则输出的最大公约数为7 ;若numl和num2 分别为27和81 ,则输出的最大公约数为270请改正程序中的错误,使它能得出正确结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构。 #include int fun(int a,int b) int r,t;if(ab) /*found*/ t=a; b=a; a=t;r=a%b;while(r!=0) a=b; b=r; r=a%b; re
6、turn(a); main() int numl, num2,a;printf(Input numl num2: ); scanf(%d%d,&numl,&num2);printf(numl= %d num2= %dnn,numl,num2);a=fun(numl,num2);printf(The maximun common divisor is %dnn,a);【参考答案】(1) t=a;a=b;b=t;(2) return(b);或 return b;5.下列给定程序中函数fun的功能是:将长整型数中各位上为奇数的数依次取出,构成 一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s
7、中的数为87653142时,t中的数为7531。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include void fun (long s, long *t) int d;long sl=l;/*found*jt = 0;while ( s 0) d = s%10;/* *found*:if (d%2 = 0) *t = d * si + *t;si *= 10;s /= 10;main() long s, t;printf(nPlease enter s:); scanf(%ld, &s);第5页第5页fun
8、&t);printf(The result is: %ldn, t);【参考答案】(l)*t=O;(2)if(d%2!=0)或 if(d%2=l)6.下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从 第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21 例如,若给n输入7 ,则该项的斐波拉契数值为13。请改正程序中的错误,使它能得出正确结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构。#include long fun(int g)/* *found* * /switch(g); case 0: return 0;/*fou
9、nd* Icase 1 ;case 2 : return 1 ;return( fun(g-l)+fun(g-2);main() long fib; int n;printf(Input n: ); scanf(%d,&n); printf(n = %dn,n);fib=fun(n);printf(fib = %dnn,fib);【参考答案】(1)去掉分号(2) case l:case 2: return 1;7.下列给定程序中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求 每复制三个字符之后插入一个空格。例如,若给a输入字符串:ABCDEFGKHIJK ,调用函数后,字符数组
10、b中的内容为:ABCDEF GHI JKO请改正程序中的错误,使它能得出正确结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构。#include void fun(char *p, char *b) int i, k=0;while(*p) i=l;while( i=3 & *p ) /*found* /bk=p;k+; p+; i+;if(*P)/*found* /bk+=bk=O;main()char a80,b80;printf(Enter a string:); gets(a);printf(The original string: ); puts(a)
11、;fun(a,b);printf(nThe string after insert space: ); puts(b); printf(nn);【参考答案】(1) bk=*p;(2) bk= ,;k+;8 .下列给定程序中函数fun的功能是:将tt所指字符串中的小写字母全部改为对应的大 写字母,其它字符不变。例如,若输入Ab , CD,则输出AB , CD.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include #include char* fun( char tt)int i;/*nd * Iif( ,a=tt
12、i)|(tti=a)&( tti = N)(2)tti-=32;9 .下列给定程序中函数fun的功能是:用冒泡法对6个字符串进行升序排列。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include #include #define MAXLINE 20 fun ( char *pstr6) int i, j;char *p;for (i = 0 ; i 5 ; i+ ) for(j = i + l,j 0)p = *(pstr + i);*(pstr + i) = pstr + j;*(pstr + j) = p ;
13、main() int i;char *pstr6, str6MAXLINE;for(i = 0; i 6 ; i+) pstri = stri;printf( nEnter 6 string(l string at each line): n);for(i = 0 ; i 6 ; i+) scanf(%s, pstri);fun(pstr);printf(The strings after sorting:n);for(i = 0 ; i 6 ; i+) printf(%sn, pstri);【参考答案】for (j = i + 1; j 6; j+)(2)*(pstr + i) = *(ps
14、tr + j);10 .下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252 ,则输出应该是20。若输入202 ,则输出应该是0。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include long fun (long num)/*nd * I第10页第10页long k;do k*=num%10;/*found*Inum=10 ; while(num);return (k);main() long n ;printf(nPlease enter a number:); scanf(
15、%ld,&n);printf(n%ldn,fun(n);【参考答案】(l)long k=l;(2)num /=10;11 .下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放在a 中,中间的数放在b中,最小的数放在c中。例如,若输入的数为:55 12 34 ,输出的结果应当是:a = 55.0 , b = 34.0 , c= 12.0.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1,C中,不要改动main函数,不得增行或删行,也不得 更改程序的结构。#include void fun(float *a,float *b,float *c)/* *
16、fou nd* jfloat *k;if( *a*c) k=*c; *c=*a; *a=k; if( *b*c) k=*b; *b=*c; *c=k; main() float a,b,c;printf(Input a b c: ); scanf(%f%f%f,&a,&b,&c);printf(a = %4.1f, b = %4.1f, c = %4.1fnn,a,b,c);fun(&a,&b,&c);printf(a = %4.1f, b = %4,1f, c = %4.1fnn,a,b,c);【参考答案】(l)float k ;(2)if(*a *c)12 .下列给定程序中函数fun的功能
17、是:逐个I:匕较p、q所指两个字符串对应位置上的字 符,并把ASCH值大或相等的字符依次存放到c所指的数组中,形成一个新的字符串。例如,若主函数中a字符串为aBCDeFgH , b字符串为ABcd ,则c中的字符串应为 aBcdeFgH.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include #include void fun(char *p ,char *q, char *c)int k = 1;while( *p != *q ) if( *p*q ) ck=*q;else ck=*p;if(*p) p+;i
18、f(*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 : ); puts(c);【参考答案】 int k=0;(2)while (*p|*q)13 .下列给定程序中fun函数的功能是:求表达式s = aa. aa -. - aaa - aa - a(此处aa. aa表示n个a , a和n的值在1至9之间)例如,a = 3,n = 6,则以上表达式为:s =
19、 333333 - 33333 - 3333 - 333 - 33 -3其值是296298.a和n是fun函数的形参,表达式的值作为函数值传回main函数。请改正程序中的错误,使它能计算出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include long fun (int a, int n)/*nd * Ilong s = 0, t = 1 ;for (j = 0 ; j n ; j+)=t;for (j = 1 ; j n ; j+) /*nd * It = t % 10 ;return(s);main() int a, n ;printf(
20、 nPlease enter a and n:);scanf( %d%d, &a, &n );printf( The value of function is: %ldn, fun ( a, n );【参考答案】(l)long s=0, t=0;出1 = 10;14.下列给定程序中函数fun的功能是:从整数1到55之间,查找能被3整除且有一位 上的数值是5的数,把这些数放在b所指的数组中,这些数的个数作为函数值返回。规 定函数中al放个位数,a2放十位数。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include
21、int fun( int *b ) int k,al,a2,i=0;for(k=10; k=55; k+) /*nd * /a2=k/10;al=k-a2*10;jf(k%3=0 & a2=5)|(k%3=0 & al=5) bi=k; i+; )/*nd * /return k;)main() int a100,k,m;m=fun( a );printf(The result is :n);for(k=0; km; k+) printf(%4d,ak); printf(n);【参考答案】a2 = k/10 ;(2)return i;15 .下列给定程序中函数fun的功能是:将字符串中的字符逆
22、序输出,但不改变字符串 中的内容。例如,若字符串为abed ,则应输出:deba.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include /*nd * /void fun (char a) if ( *a ) fun(a+l);printf(%c *a);main() char s10=abcd;printf(处理前字符串=%sn处理后字符串=,s);fun(s); printf(n);【参考答案】(l)void fun(char *a)(2)printf(%c ,*a);16 .下列给定程序中函数fun的功能是
23、:将一个由,曲制数字字符组成的字符串转换成 与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。例如,若输入77777 ,则输出32767。请改正程序中的错误,使它能得出正确结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构.#include int fun( char *p ) int n;/*found* IP+;while( *p!=0 ) /* fo und* In=n*8+*P-o;P+;return n;main() char s6; int i; int n;printf(Enter a string (Ocatal digi
24、ts): ); gets(s);if(strlen(s)5) printf(Error: String too longer !nn);exit(0); for(i=0; si; i+)if(si7) printf(Error: %c not is ocatal digits!nn,si);exit(O); printf(The original string: ); puts(s);n=fun(s);printf(n%s is convened to integer number: %dnn,s,n);【参考答案】(2)n=n*8+*p-O;17 .下列给定程序中函数fun的功能是:将长整型
25、数中各位上为偶数的数依次取出,构 成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数:8642.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改程序的结构!#include void fun (long s, long *t) int d;long sl=l;*t = 0;while ( s 0) d = s%10;/*nd * Iif (d%2=0) *t=d* sl+ *t;si *= 10;s= 10;main() long s, t;printf(nPlease enter s:);
26、 scanf(%ld, &s);fun(s, &t);printf(The result is: %ldn, t);【参考答案】(l)if(d%2=0)(2)s/=10;18.下列给定程序中函数fun的功能是:计算并输出high以内最大的10个素数的和。 high的值由主函数传给fun函数。例如,若high的值为100 ,则函数的值为732。请改正程序中的错误,使程序能输出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!#indude #include int fun( int high ) int sum = 0, n=0, j, yes;/*fou
27、nd*/while (high = 2) & (n 10) yes = 1;for (j=2; j=2) & (n10) (2)yes=0; break;19 .下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构!#include void fun( char *s ) int i,j;for(i=j=0; si!=0; i+)/*nd * /*nd * Isi=0;main() char s80;printf(Enter a string:);gets(s
28、);printf(The original string: ); puts(s);fun(s);printf(The string after deleted : ); puts(s);printf(nn);【参考答案】(l)sj+=si;或sj=si;j+; (2)sj= 0;20 .下列下列给定程序中,函数fun的功能是:从低位开始依次取出长整型变量s中奇 数位上的数,构成一个新数存放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为7654321时,t中的数为7531.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结
29、构!#include /*found*/void fun (long s, long t) long sl=10;*t = s % 10;while ( s 0) s = s/100;*t = s%10 * si + *t;si = sl*100;main() long s, t;printf(nPlease enter s:); scanf(%ld, &s);fun(s, &t);printf(The result is: %ldn, t);【参考答案】(l)void fun(long s , long *t) (2)sl=sl*10;21 .下列给定程序中函数fun的功能是计算S = f(
30、 - n) + f( - n + 1) +. + f(O) + f(l) + f(2) + f(n)的值。例如,当n的值为5时,函数值应为10.407143.f(x)函数定义如下:f(x) = (x + l)/(x - 2) x0 且 XW2f(x) 0x = 0 或 x = 2(x - l)/(x - 2)x0请改正程序中的错误,使程序能输出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!#include #include #include #include /*found */f(double x)if(x=0.0|x=2.0)return 0.0
31、;else if(x0.0)return(x-l)/(x-2);elsereturn(x+l)/(x-2);double fun(int n)int i; double s=0.0,y;for(i=-n; i=n;i+) y=f(1.0*i); s+=y;/* *found*: return svoid main() system(CI_S);printf(%fn, fun(5);【参考答案】(l)double f(double x)(2)return s ;22 .下列给定程序中函数fun的功能是:求三个数的最小公倍数。例如,若给主函数中的变量xL x2、x3分别输入15 11 2 ,则输出
32、结果应当是330。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构!#include fun(int x, y, z ) int j,t ,n ,m;j = 1 ;t=j%x;m=j%y;n=j%z;while(t!=0|m!=0|n!=0) j = j+1;t=j%x;m=j%y;n=j%z;)/*found*/return i;main() int xl,x2,x3,j;printf(Input xl x2 x3: ); scanf(%d%d%d,&xl,&x2,&x3);printf(xl=%d, x2=%d, x3
33、=%d n,xl,x2,x3);j=fun(xl,x2,x3);printf(The minimal common multiple is : %dn,j);【参考答案】(l)fun(int x , int y, int z)或 int fun(int x , int y , int z)(2)return j;23 .下列给定程序中函数fun的功能是:将s所指字符串中出现的与tl所指字符串相同 的子串全部替换为t2所指字符串,所形成的新串放在w所指的数组中。要求tl和t2 所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfab, tl所指子串中的内容为ab, t2所指 子串中
34、的内容为99时,在w所指的数组中的内容应为99cd99f99.请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!#include #include void fun (char *s, char *tl, char *t2 , char *w)char *p , *r, *a;strcpy( w, s);while ( *w) p = w;/*nd * Iwhile (r)if ( *r = *p ) r+; p+; else break;if(*r=O)a = w; r = t2;while ( *r) /*found*/
35、*a = *r; a+; r+w += strlen(t2);else w+;main()char s100, tl100, t2100, w100;printf(nPlease enter string S:); scanf(%s, s);printf(nPlease enter substring tl:); scanf(%s, tl); printf(nPlease enter substring t2:); scanf(%s, t2); if (strlen(tl)=strien(t2) fun( s, tl, t2, w);printf(nThe result is : %sn, w
36、);else printf(Error: strlen(tl) != strlen(t2)n);【参考答案】(l)while( *r)(2) *a=*r;a+;r+;24 .下列给定程序中函数fun的功能是:从N个字符串中找出最长的串,并将其地址作 为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件M0DI1.C中,不得增行或删行,也不得更改的程序的结构!#include #include #defineN5#defineM81 /*found* * I int i; char *sp;sp=sq0;for(i=0;i
37、N;i+)if(strlen( sp)strlen(sqi)sp=sqi; /*found* /return sq;main() char strNM, *longest; int i;printf(Enter %d lines :n,N);for(i=0; iN; i+) gets(stri);printf(nThe N string :n,N);for(i=0; iN; i+) puts(stri);longest=fun(str);printf(nThe longest string :n); puts(longest);【参考答案】(l)char *fun(char (*sq)M)(2
38、)return sp ;25 .由N个有序整数组成的数列已放在一维数组中,下列给定程序中函数fun的功能是: 利用折半查找法查找整数m在数组中的位置。若找至!1,返回其下标值;否则,返回-1.折半查找的基本算法是:每次查找前先确定数组中待查的范围low和high(lowhigh ,查找结束。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。#include #define N 10/*nd * Ivoid fun(int a, int m ) int low=0,high=N-l,mid;while(low=high) mid=(low+high)/2;if(m amid)low=mid+l;else return(mid);)return(-l);main() int