程序改错题答案.docx
《程序改错题答案.docx》由会员分享,可在线阅读,更多相关《程序改错题答案.docx(25页珍藏版)》请在冰豆网上搜索。
程序改错题答案
1.程序调试题1(X_2_1.C)
调试要求:
下列程序不能得到正确的结果,它包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括X_2_1.C文件和X_2_1.EXE文件)保存到目录C:
\KS\中。
功能说明:
计算半径为1~n的圆的面积,仅打印超过50的圆面积。
如输入:
6
则输出:
r=4,square=50.265488
r=5,square=78.539825
r=6,square=113.097351
带错误原程序:
#include
main()
{
intr,n;
floatarea;
scanf("%d",&n);
for(r=1,r<=n;r++)
{
area=3.141593*r*r;
if(area<50.0)continue;
printf("r=%d,square=%d\n",r,area);
}
getch();
}
答案
#include
main()
{
intr,n;
floatarea;
scanf("%d",&n);
for(r=1;r<=n;r++)/*modified*/
{
area=3.141593*r*r;
if(area<50.0)continue;
printf("r=%d,square=%f\n",r,area);/*modified*/
}
getch();
}
2.程序调试题2(X_2_2.C)
调试要求:
下列程序不能得到正确的结果,它包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括X_2_2.C文件和X_2_2.EXE文件)保存到目录C:
\KS\中。
功能说明:
将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符串形式输出。
如输入:
79则输出:
4F
又输入:
1234则输出:
4D2
带错误原程序(见C:
\KS\X_2_2.C):
#include
intDtoH(intn,char*str)
{
inti,d;
for(i=0;n!
=0,i++)
{
d=n%16;
if(d>=10)
str[i]='0'+d;
else
str[i]='A'+d-10;
n/=16;
}
returni;
}
main()
{
inti,k,n;
charstr[80];
scanf("%d",&n);
k=DtoH(n,str);
for(i=k-1;i>=0;i--)
printf("%c",str(i));
getch();
}
答案
#include
intDtoH(intn,char*str)
{
inti,d;
for(i=0;n!
=0;i++)/*modified*/
{
d=n%16;
if(d<10)/*modified*/
str[i]='0'+d;
else
str[i]='A'+d-10;
n/=16;
}
returni;
}
main()
{
inti,k,n;
charstr[80];
scanf("%d",&n);
k=DtoH(n,str);
for(i=k-1;i>=0;i--)
printf("%c",str[i]);/*modified*/
getch();
}
3.程序调试题3(X_2_3.C)
调试要求:
下列程序不能得到正确的结果,它包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括X_2_3.C文件和X_2_3.EXE文件)保存到目录C:
\KS\中。
功能说明:
函数fun分别统计字符串中大写字母和小写字母的个数,main()函数完成字符串的输入和统计数的输出。
如输入:
AAaaBBb123CCccccd
则输出:
upper=6,lower=8
带错误原程序(见C:
\KS\X_2_3.C):
#include
voidfun(char*s,int*a,int*b)
{
while(*s=='\0')
{
if(*s>='A'&&*s<='Z')
(*a)++;
if(*s>='a'||*s<='z')
(*b)++;
s++;
}
}
main()
{
chars[100];
intupper=0,lower=0;
gets(s);
fun(s,&upper,&lower);
printf("\nupper=%d,lower=%d\n",upper,&lower);
getch();
}
答案
#include
voidfun(char*s,int*a,int*b)
{
while(*s!
='\0')/*modified*/
{
if(*s>='A'&&*s<='Z')
(*a)++;
if(*s>='a'&&*s<='z')/*modified*/
(*b)++;
s++;
}
}
main()
{
chars[100];
intupper=0,lower=0;
gets(s);
fun(s,&upper,&lower);
printf("\nupper=%d,lower=%d\n",upper,lower);/*modified*/
getch();
}
4.程序调试题1(D_3_1.C)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括D_3_1.c文件和D_3_1.exe文件)保存到指定目录中。
功能说明:
以下程序计算并输出等差数列的累加和,数列的首项为a0,公差为d,项数为n。
如输入:
-354
则输出:
sumx=18
例示说明:
-3为首项,5为公差,4为项数,前4项之和为18
原程序(见\D_3_1.C):
#include
intsumx(inta0,d,n)
{
inti,k,s=0;
k=a0;
for(i=0;is+=k;
k+=d;
returns;
}
voidmain()
{
inta0,d,n;
scanf("%d%d%d",&a0,&d,&n);
printf("sumx=%d\n",sumx(a0,d,n));
}
答案
#include
intsumx(inta0,intd,intn)/*modified*/
{
inti,k,s=0;
k=a0;
for(i=0;i{s+=k;
k+=d;}
returns;
}
voidmain()
{
inta0,d,n;
scanf("%d%d%d",&a0,&d,&n);
printf("sumx=%d\n",sumx(a0,d,n));
}
5.程序调试题2(D_3_2.C)
调试要求:
下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括D_3_2.c文件和D_3_2.exe文件)保存到指定目录中。
功能说明:
以下函数length返回字符串中字母A到字母Z所包含字符的长度。
主程序输入一行字符串,调用length函数输出该字符串中大写字母A到Z的子串长度。
如输入:
Z2009-AShanghaiZ
则输出:
Length=8
例示说明:
从A到Z的子串为Shanghai,其长度为8
原程序(见\D_3_2.C):
#include
intlength(char*p)
{
char*q,*r;
for(q=p;*q!
='\0'||*q!
='A';q++)
;
for(r=q;*r!
='\0'&&*r!
='Z';r++)
;
returnr-q;
}
voidmain()
{
charstr[81];
intn;
gets(str[0]);
n=length(str);
printf("Length=%d\n",n);
}
答案
#include
intlength(char*p)
{
char*q,*r;
for(q=p;*q!
='\0'&&*q!
='A';q++)/*modified*/
;
for(r=q;*r!
='\0'&&*r!
='Z';r++)
;
returnr-q-1;/*modified*/
}
voidmain()
{
charstr[81];
intn;
gets(str);/*modified*/
n=length(str);
printf("Length=%d\n",n);
}
6.程序调试题1(E_3_1.c)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到指定目录中。
功能说明:
统计一字符串中各个字母出现的次数,该字符串从键盘输入,统计时不区分大小写。
对数字、空格及其他字符都不予统计。
最后在屏幕上显示统计结果。
例如字符串:
“abcdefgh23ABCDEFabc”的统计结果与输出格式为:
abcdefghijklmnopqrstuvwxyz出现的次数为:
;
33322211000000000000000000
#include
#include
voidmain()
{
inti,a[26];
charch,str[80],*p=str;
gets(&str);/*获取字符串*/
for(i=0;i<26;i++)a[i]=0;/*初始化字符个数*/
while(*p){
ch=(*p)++;/*移动指针统计不同字符出现的次数*/
ch=ch>=’A’&&ch<=’Z’?
ch+’a’-‘A’:
ch;
/*大小写字符转换*/
if(’a’<=ch<=’z’)a[ch-‘a’]++;
}
for(i=0;i<26;i++)printf(“%2c”,’a’+i);/*输出26个字母*/
printf(“出现的次数为:
\n”);
for(i=0;i<26;i++)printf(“%2d”,a[i]);
/*输出各字母出现次数*/
printf(“\n”);
}
答案
#include
#include
voidmain()
{
inti,a[26];
charch,str[80],*p=str;
gets(str);/*modified*/
for(i=0;i<26;i++)a[i]=0;/*初始化字符个数*/
while(*p){
ch=*p++;/*modified*/
ch=ch>=’A’&&ch<=’Z’?
ch+’a’-‘A’:
ch;
/*大小写字符转换*/
if(’a’<=ch)&&(ch<=’z’)a[ch-‘a’]++;/*modified*/
}
for(i=0;i<26;i++)printf(“%2c”,’a’+i);/*输出26个字母*/
printf(“出现的次数为:
\n”);
for(i=0;i<26;i++)printf(“%2d”,a[i]);
/*输出各字母出现次数*/
printf(“\n”);
}
7.程序调试题2(E_3_2.C)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到指定目录中。
功能说明:
递归算法求xn,即xn=x*xn-1,其中x为实数,n≥0。
原程序(见\E_3_2.c)
voidmain(){
floatx,y;
intn;
scanf("%f%d",&x,&n);
y=xn(x,n);
printf("x^n=%f\n",y);
}
floatxn(floatx,intn){
floadz;
if(n<0){
printf("nisawrongnumber!
\n");
exit(0);
}
if(n!
=0)z=1;
elsez=xn(x,n);
returnz;
}
答案
voidmain(){
floatx,y,xn(float,int);/*modified*/
intn;
scanf("%f%d",&x,&n);
y=xn(x,n);
printf("x^n=%f\n",y);
}
floatxn(floatx,intn){
floadz;
if(n<0){
printf("nisawrongnumber!
\n");
exit(0);
}
if(n==0)z=1;/*modified*/
elsez=x*xn(x,n-1);/*modified*/
returnz;
}
8.程序调试题1
调试要求:
下列程序包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括B_2_1.C文件和B_2_1.EXE文件)保存到指定目录中。
功能说明:
利用格里高利公式π/4=1-1/3+1/5-1/7+......求前n.项的π值。
如输入:
5则输出:
pi=3.339683
又输入:
10000则输出:
pi=3.141498
带错误原程序(见\B_2_1.C):
#include
main()
{
floatpi=0,n,i;
intsign=1;
scanf("%f",n);
for(i=1;i<=n;i++)
{
pi+=sign/(2*i-1);
sign=-sign;
}
pi=4*pi
printf("pi=%f\n",pi);
getchar();/*本句无错;暂停程序,按任意键继续*/
}
答案
#include
voidmain()
{
intn,i;
scanf("%d",&n);
printf("%d=1",n);
for(i=2;i<=n;)
{
if(n%i==-0)/*modified*/
{
printf("*%d",i);
n=n/i;/*modified*/
}
else
i++;
}
}
9.程序调试题2
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括B_2_2.C文件和B_2_2.EXE文件)保存到指定目录中。
功能说明:
从键盘输入一个非负十进制整数n(n<32768),转化成二进制存入数组a,输出二进制结果。
如输入:
23则输出:
10111
又输入:
1234则输出:
10011010010
带错误原程序(见\B_2_2.C):
#include
main()
{
inta[16],n;
scanf("%d",&n);
for(i=0;n<0;i++)
{
a(i)=n%2;
n/=2;
}
while(i>0)
printf("%d",a[--i]);
getchar();/*本句无错;暂停程序,按任意键继续*/
}
答案
#include
voidstr_to_upper(char*s)
{
while(*s!
='\0')/*modified*/
{
if(*s>='a'&&*s<='z')/*modified*/
*s=*s+'A'-'a';/*modified*/
s++;
}
}
voidmain()
{
charstr[80];
gets(str);
str_to_upper(str);
puts(str);
}
10.程序调试题3
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括B_2_3.C文件和B_2_3.EXE文件)保存到指定目录中。
功能说明:
程序从键盘输入一行字符串,所有字符依次向右循环移动m个位置并输出,移出的字符循环到最左边。
如输入:
123456789
3
则输出:
789123456
带错误原程序(见\B_2_3.C):
#include
#include
voidshift_s(chara[],intn,intm)/*a数组的n个字符右移m个位置*/
{
inti,j,t;
for(i=1;i{
for(j=n;j>0;j--)
a[j]=a[j+1];/*移位并复制*/
a[0]=a[n];
}
a[n]='\0';
}
main()
{
charstra[80];
inti,n,m;
gets(stra);
n=strlen(stra);
scanf("%d",&m);
shift_s(stra,n,m);/*函数调用参数*/
puts(*stra);
getchar();/*本句无错;暂停程序,按任意键继续*/
}
答案
#include
#include
voidshift_s(chara[],intn,intm)/*a数组的n个字符右移m个位置*/
{
inti,j,t;
for(i=0;i{
for(j=n;j>0;j--)
a[j]=a[j-1];/*modified*/
a[0]=a[n];
}
a[n]='\0';
}
main()
{
charstra[80];
inti,n,m;
gets(stra);
n=strlen(stra);
scanf("%d",&m);
shift_s(stra,n,m);/*函数调用参数*/
puts(stra);/*modified*/
getchar();/*本句无错;暂停程序,按任意键继续*/
}
11.程序调试题1
调试要求:
下列程序包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_2_1.C文件和C_2_1.EXE文件)保存到指定目录中。
功能说明:
利用公式e=1+1/1!
+1/2!
+…+1/n!
+…求前n项的e值。
如输入:
4则输出:
2.708333
又输入:
10则输出:
2.718282
带错误原程序(见\C_2_1.C):
#include
main()
{
intn,i;
floate,a;
scan("%d",&n);
e=a=1.0;
for(i=1;i<=n;i++)
{
a*=i;
e+=1\a;
}
printf("%f\n",e);
getchar();/*本句没错,程序暂停,按任意键继续*/
}
答案
#include
main()
{
intn,i;
floate,a;
scanf("%d",&n);/*modified*/
e=a=1.0;
for(i=1;i<=n;i++)
{
a*=i;
e+=1/a;/*modified*/
}
printf("%f\n",e);
getchar();/*本句没错,程序暂停,按任意键继续*/
}
12.程序调试题2
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_2_2.C文件和C_2_2.EXE文件)保存到指定目录中。
功能说明:
程序从键盘输入一行16进制字符串(字母必须大写),调用hexvalue函数转换为10进制,并输出转换结果。
如输入:
1A则输出:
26
又输入:
1AF8则输出:
6904
带错误原程序(见\C_2_2.C):
#include
longhexvalue(char*str)
{
longdata=0;
intn,i;
for(i=0;str[i]!
='\0',i++)
{
if(str[i]>='0'&&str[i]<='9')
n=str[i]-'0';
elseif(str[i]>='A'||str[i]<='F')
n=str[i]-