
C语言必看改错题.pdf
74页第 01套给定程序MODI1.C中函数fun的功能是:求出s 所指字符串中最后一次出现的t 所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULLo例如,当字符串中的内容为:abcdabfabcdx,t 中的内容为:“ab”时,输出结果应是:abcdxo当字符串中的内容为:abcdabfabcdx,t 中的内容为:“abd”时,则程序输出未找到信息:not be foundlo请改正程序中的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include include char*fun(char*s,char*t)(char*p,*r,*a;/*fou nd*/a=Null;改为:a=NULL;while(*s)p=s;r=t;while(*r)/*fc11c 7*/if(r=p)改为:if(*r=*p)r+;p+;else break;if(*r=0)a=s;s+;)return a;)main()(chars100,t100,*p;printf(nPlease enter string S scanf(%s,s);printf(nPlease enter substring tscanf(%s,t);P =fun(s,t);if(p)printf(nThe result is:%sn,p);else printf(nNot found!n);)解题思路:第一处:指向空指针错误,Null应NULL。
第二处:比较指针位置的值是否相等,所以应改为:if(*r=*p)o第02套:给定程序 M O D I1.C 中 函 数 f u n 的 功 能 是,讨 算 并 输 出 下 列 级 数 的 前 N 项之 和SN,直 到SN*I大 于 q 为 止,q 的值通过形参传入.S w=2+3 +3 +.+H 1 21 2 3 N例如,若q的值为:50.0,则函数值为:49.394948请改正程序中的错误,使程序能输出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include double fun(double q)int n;double s,t;n=2;s=2.0;while(s=q)t=s;/*fou nd*/s=s+(n+1)/n;改为:s=s+(n+1.0)/n;n+;)printf(n=%dn,n);/*fou nd*Ireturn s;改为:return t;)main()pnntf(%fn,fun(50);)解题思路:第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以应改为:s=s+(n+1.0)/n;o第二处:返回结果错误,应改为:return t;。
第 03套给定程序MODI1.C中函数fu n 的功能是:用冒泡法对6 个字符串按由小到大的顺序进行排序请改正程序中的错误,使它能得出正确的结果注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#define MAXLINE 20fun(char*pstr6)in ti.j;char*p;for(i=0;i 5;i+)/*fou nd*/for(j=i+1,j 6,j+)改为:for(j=i+1;j 0)p=*(pstr+i);/*fou nd*/*(pstr+i)=pstr+j;改为:*(pstr+i)=*(pstr+j);*(pstr+j)=p;)main()int i;char*pstr6,str6MAXLINE;for(i=0;i 6;i+)pstri=stri;printf(nEnter 6 string(1 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循环语句中缺少分号。
第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为:*(pstr+i)=*(pstr+j);0第 04套给定程序M0DI1.C中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x y)+(z+y)/(z y)的值其中x 和 y 的值不等,z 和 y 的值不等例如,当x 的值为9、y 的值为11、z 的值为15时,函数值为-3.50o请改正程序中的错误,使它能得出正确结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构给定源程序:#include include#include/*fou nd*/#define FU(m,n)(m/n)改为:#define FU(m,n)(m)/(n)float fun(float a,float b,float c)float value;value=FU(a+b,a-b)+FU(c+b,c-b);/*fou nd*/Return(Value);改为:return(value);)main()float x,y,z,sum;printf(lnput x y z:);scanf(%f%f%f,&x,&y,&z);printf(x=%f,y=%f,z=%fn,x,y,z);if(x=y|y=z)printf(Data error!n);exit(0);sum=fun(x,y,z);printf(The result is:%5.2fn,sum);)解题思路:第 一 处:define 定义错误,所以应改为:#define FU(m,n)(m)/(n)o第二处:return错写成Return,变量value错写成Value。
第 05套给定程序MODI1.C中函数fu n 的功能是:用下面的公式求IT的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:T T 111-.-+-+.4 3 5 7例如,程序运行后,输入0.0001,则程序输出3.1414请改正程序中的错误,使它能输出正确的结果注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include float fun(float num)int s;float n,t,p i;t=1;p i=0;n =1;s =1;/*found*/while(t=num)改为:while(fabs=num)(pi=pi+t;n=n+2;s=-s;/*fou nd*/t=s%n;改为:t=s/n;)pi=pi*4;return pi;)main()float n1,n2;printf(Enter a float number:);scanf(%f,&n1);n2=fun(n1);printf(%6.4fn,n2);)解题思路:第一处:要判断t 的最后一项绝对小于指定的数,由于t 是实数,那么应改为 while(fabs(t)=num)o第二处:t是s除以n的值,而不是取余数,所以应改1=$/。
第06套给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容例如,若字符串为a b e d,则应输出:dcba0请改正程序中的错误,使它能计算出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:include/*fou nd*/fun(char a)改为:fun(char*a)if(*a)fun(a+1);/*fou nd*/printf(%c*a);改为:printf(%c,*a);)main()chars10=abcd;printf(处理前字符串二%sn处理后字符串二 ,s);fun(s);printf(n);)解题思路:第一处:形参a 应定义为字符串指针第二处:语句中缺少逗号第07套例如,若给m输 入-100,给n输入9 0,则函数求得的一个根值为2.000请改正程序中的错误,使它能得出正确结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构给定源程序:#include include double funx(double x)return(2*x*x*x-4*x*x+3*x-6);double fun(double m,double n)(/*fou nd*/int r;改为:double r;r=(m+n)/2;/*fou nd*/while(fabs(n-m)0.001)if(funx(r)*funx(n)0.001)o第 08套给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t 中。
高位仍在高位,低位仍在低位例如,当s 中的数为:7654321时,t 中的数为:642o请改正程序中的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:include/*fc11c 7*/void fun(long s,long t)改为:void fun(long s,long*t)long sl=10;s/=10;*t=s%10;/*found*/while(s 0)s=s/100;*t=s%10*sl+*t;si=si*10;)main()long s,t;printf(nPlease enter s:);scanf(%ld,&s);fun(s,&t);printf(The result is:%ldn,t);)解题思路:第一处:在函数fun体中,t 是一个指针型变量,因此定义形参时也应定义指针第二处:条件应该s 0,所以应改为:while(s0)o第 09套给定程序MODI1.C中 函 数 fu n 的功能是:计 算 n!例如,给 n 输 入 5,则输出120.000000请改正程序中的错误,使程序能输出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include double fun(int n)double result=1.0;/*fou nd*/if n=0改为:if(n=0)return 1.0;while(n 1&n 170)/*fou nd*/result*=n-改为:result*=n-;return result;)main()int n;printf(lnput N:);scanf(%d,&n);printf(nn%d!=%lfnn,n,fun(n);)解题思路:第一处:条件语句书写格式错误,应改为:if(n=0)o第二处:语句后缺少分号。
第 10套给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s 中奇数位上的数,依次构成一个新数放在t 中高位仍在高位,低位仍在低位例如,当s 中的数为:7654321时,t 中的数为:7531请改正程序中的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/*fou nd*/void fun(long s,long t)改为:void fun(long sjong*t)long sl=10;*t=s%10;while(s 0)s=s/100;*t=s%10*si+*t;/*fou nd*/si=sl*100;改为:sl=sl*10;)main()long s,t;printf(nPlease enter s:);scanf(%ld,&s);fun(s,&t);printf(The result is:%ldn,t);)解题思路:第一处:在函数fun中使用了*3 但在函数定义时没有使用*t,所以应改为:void fun(long s,long*t)第二处:每循环一次,s i的值就乘以1 0,所以应改。












