程序改错题.docx
《程序改错题.docx》由会员分享,可在线阅读,更多相关《程序改错题.docx(22页珍藏版)》请在冰豆网上搜索。
![程序改错题.docx](https://file1.bdocx.com/fileroot1/2023-7/23/caa063a3-a2db-4564-9ba8-62404fa2eec5/caa063a3-a2db-4564-9ba8-62404fa2eec51.gif)
程序改错题
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.程序调试题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;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));
}
答案
#include
intsumx(inta0,intd,intn)/*modified*/
{
inti,k,s=0;
k=a0;
for(i=0;i{s+=k;
k+=d;}/*modified*/
returns;
}
voidmain()
{
inta0,d,n;
scanf("%d%d%d",&a0,&d,&n);
printf("sumx=%d\n",sumx(a0,d,n));
}
4.程序调试题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];/*modify*/
gets(str);/*modify*/
for(i=0;i<26;i++)a[i]=0;
i=0;
while(str[i++]!
=’\0’)/*modify*/
{
ch=str[i];
ch=ch>=’A’&&ch<=’Z’?
ch+’a’-‘A’:
ch;
if(’a’<=ch&&ch<=’z’)a[ch-‘a’]++;/*modify*/
}
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”);
}
5.程序调试题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);/*modify*/
for(i=1;i<=n;i++)
{
pi+=sign/(2*i-1);
sign=-sign;
}
pi=4*pi;
printf("pi=%f\n",pi);/*modify*/
getchar();/*本句无错;暂停程序,按任意键继续*/
}
6.程序调试题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,i;/*modify*/
scanf("%d",&n);
for(i=0;n>0;i++)/*modify*/
{
a[i]=n%2;/*modify*/
n/=2;
}
while(i>0)
printf("%d",a[--i]);
getchar();/*本句无错;暂停程序,按任意键继续*/
}
7.程序调试:
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果
程序功能:
输入字符串,将其中所有的大写字母转为小写字母,然后输出。
#include
voidstr_to_upper(chars[])
{inti;/*modify*/
while(s[i]!
='\0')
{
if(s[i]>='A'&&s[i]<='Z')
s[i]=s[i]–('A'-'a');/*modified*/
i++;
}
}
voidmain()
{
charstr[80];
gets(str);
str_to_upper(str);/*modify*/
puts(str);
}
8.程序调试题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();/*本句无错;暂停程序,按任意键继续*/
}
9.程序调试题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();/*本句没错,程序暂停,按任意键继续*/
}
10.程序调试题2
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_2_2.C文件和C_2_2.EXE文件)保存到指定目录中。
功能说明:
程序从键盘输入一行16进制字符串(字母必须大写),调用hexvalue函数转换为10进制,并输出转换结果。
如输入:
1A则输出:
26
又输入:
1AF8则输出:
6904
带错误原程序(见\C_2_2.C):
#include
longhexvalue(charstr[])
{
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]-'A'+10;
else
break;
data=data*10+n;
}
returndata;
}
main()
{
chars[80];
scanf("%s",s);
printf("%ld",hexvalue(s));
getchar();/*本句没错,程序暂停,按任意键继续*/
}
答案
#include
longhexvalue(charstr[])
{
longdata=0;
intn,i;
for(i=0;str[i]!
='\0';i++)/*modified*/
{
if(str[i]>='0'&&str[i]<='9')
n=str[i]-'0';
elseif(str[i]>='A'&&str[i]<='F')/*modified*/
n=str[i]-'A'+10;
else
break;
data=data*16+n;/*modified*/
}
returndata;
}
main()
{
chars[80];
scanf("%s",s);
printf("%ld",hexvalue(s));
getchar();/*本句没错,程序暂停,按任意键继续*/
}
11.程序调试题3
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_2_3.C文件和C_2_3.EXE文件)保存到指定目录中。
功能说明:
程序从键盘输入一个整数n,将数组a的11个元素向左循环n次后输出。
如输入:
3
则输出:
345678910012
带错误原程序(见\C_2_3.C):
#include
main()
{
inta[10]={0,1,2,3,4,5,6,7,8,9,10},n,i,j,p;
scanf("%d",&n);
for(i=1;i{
p=a[0];
j=0;
while(j<10)
{
a[j]=a[j+1];
j++;
}
a[10]=p;
}
for(i=0;i<=10;i++)
printf("%d",a(i));
getchar();/*本句没错,程序暂停,按任意键继续*/
}
答案
#include
main()
{
inta[11]={0,1,2,3,4,5,6,7,8,9,10},i,j,n,p;/*modified*/
scanf("%d",&n);
for(i=0;i{
p=a[0];
j=0;
while(j<10)
{
a[j]=a[j+1];
j++;
}
a[10]=p;
}
for(i=0;i<=10;i++)
printf("%d",a[i]);/*modified*/
getchar();/*本句没错,程序暂停,按任意键继续*/
}
12.程序调试题1
调试要求:
下列程序包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括D_2_1.C文件和D_2_1.EXE文件)保存到指定目录中。
功能说明:
打印从1~1000能同时被3和5整除的前n个数。
如输入:
3则输出:
153045
带错误原程序(见C:
\KS\D_2_1.C):
#include
main()
{
intk;
scanf("%d",&n);
for(k=1;k<=1000;k++)
if(k%3==0&&k%5==0)
{
print("%d",k);
n--;
if(n==0)break;
}
getchar();/*本句没错,暂停程序,按任意键继续*/
}
答案
#include
main()
{
intk,n;/*modified*/
scanf("%d",&n);
for(k=1;k<=1000;k++)
if(k%3==0&&k%5==0)
{
printf("%d",k);/*modified*/
n--;
if(n==0)break;
}
getchar();/*本句没错,暂停程序,按任意键继续*/
}
13.程序调试题3
调试要求:
下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括D_2_3.C文件和D_2_3.EXE文件)保存到指定目录中。
功能说明:
函数myStrupr将字符串str中的小写字母转换为大写,并返回转换的小写字母数。
程序输入一个长度小于80的字符串,调用myStrupr函数将小写字母转换为大写,如果输入串没有小写字母,则输出提示信息。
如输入:
Hello,Everybody.则输出:
HELLO,EVERYBODY.
又输入:
IAMBIG.?
!
@#$%则输出:
nolowercase
带错误原程序(见C:
\KS\D_2_3.C):
#include
intmyStrupr(charstr[])
{
inti,ct=0;
for(i=0;Str[i]!
='\0';i++)
if(str[i]>='a'||str[i]<='z')
{
str[i]=str[i]-32;
ct++;
}
returnct;
}
main()
{
charstr[80];
gets(str);
if(myStrupr(str)==0)
puts(str);
else
printf("nolowercase\n");
getchar();/*本句没错,暂停程序,按任意键继续*/
}
答案
#include
intmyStrupr(charstr[])
{
inti,ct=0;
for(i=0;str[i]!
='\0';i++)/*modified*/
if(str[i]>='a'&&str[i]<='z')/*modified*/
{
str[i]=str[i]-32;
ct++;
}
returnct;
}
main()
{
charstr[80];
gets(str);
if(myStrupr(str)!
=0)/*modified*/
puts(str);
else
printf("nolowercase\n");
getchar();/*本句没错,暂停程序,按任意键继续*/
}