C语言程序改错练习.docx
《C语言程序改错练习.docx》由会员分享,可在线阅读,更多相关《C语言程序改错练习.docx(23页珍藏版)》请在冰豆网上搜索。
C语言程序改错练习
C语言程序改错练习
共18题
第2题(4.0分)题号:
406难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
有1、2、3、4个数字,能组成多少个互不相同且无重复数
字的三位数?
都是多少?
------------------------------------------------------*/
#include
main()
{
inti,j,k;
/**********FOUND**********/
printf("\n")
/**********FOUND**********/
for(i=1;i<=5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
/**********FOUND**********/
if(i!
=k||i!
=j||j!
=k)
printf("%d,%d,%d\n",i,j,k);
}
}
答案:
=======(答案1)=======
printf("\n");
=======(答案2)=======
for(i=1;i<5;i++)
=========或=========
for(i=1;i<=4;i++)
=======(答案3)=======
if(i!
=k&&i!
=j&&j!
=k)
第9题(4.0分)题号:
443难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
企业发放的奖金根据利润提成。
利润(i)低于或等于10万元
时,奖金可提10%;利润高于10万元,低于20万元时,低于
10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;40万
到60万之间时高于40万元的部分,可提成3%;60万到100万
之间时,高于60万元的部分,可提成1.5%,高于100万元时,
超过100万元的部分按1%提成,从键盘输入当月利润i,求
应发放奖金总数?
------------------------------------------------------*/
#include
main()
{
longinti;
doublebonus1,bonus2,bonus4,bonus6,bonus10,bonus;
/**********FOUND**********/
scanf("%ld"&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
/**********FOUND**********/
if(i>100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bonus1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bonus2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bonus4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
/**********FOUND**********/
printf("bonus=%d",bonus)
}
答案:
=======(答案1)=======
scanf("%ld",&i);
=======(答案2)=======
if(i<=100000)
=======(答案3)=======
printf("bonus=%d",bonus);
第29题(4.0分)题号:
435难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
输入n,计算s=1+1+2+1+2+3+1+2+3+4+...+1+2+3+4+...+n
------------------------------------------------------*/
#include
voidmain()
{
/**********FOUND**********/
inti,s;p,n;
printf("Entern:
\n");
/**********FOUND**********/
scanf("%d",n);
/**********FOUND**********/
for(s=p=0,i=1;is+=p+=i;
printf("S=%d\n",s);
}
答案:
=======(答案1)=======
inti,s,p,n;
=======(答案2)=======
scanf("%d",&n);
=======(答案3)=======
for(s=p=0,i=1;i<=n;i++)
第30题(4.0分)题号:
556难度:
中第2章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
下列程序的功能为:
按下列公式计算并输出x的值。
其中a和b的值由键盘输入。
请纠正程序中存在的错误,使程序实现其功能。
公式:
x=2ab/(a+b)^2(平方)
-------------------------------------------------------*/
#include
main()
{
inta,b;
doublex;
/***********FOUND***********/
scanf("%d,%d",a,b);
/***********FOUND***********/
x=2ab/(a+b)(a+b);
/***********FOUND***********/
printf("x=%d\n",x);
}
答案:
=======(答案1)=======
scanf("%d,%d",&a,&b);
=======(答案2)=======
x=2.0*a*b/((a+b)*(a+b));
=======(答案3)=======
printf("x=%f\n",x);
第40题(4.0分)题号:
411难度:
难第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
一球从100米高度自由落下,每次落地后反跳回原高度的
一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
------------------------------------------------------*/
#include
main()
{
/**********FOUND**********/
floatsn=100.0;hn=sn/2;
intn;
/**********FOUND**********/
for(n=2;n<10;n++)
{
sn=sn+2*hn;
/**********FOUND**********/
hn=hn%2;
}
printf("thetotalofroadis%f\n",sn);
printf("thetenthis%fmeter\n",hn);
}
答案:
=======(答案1)=======
floatsn=100.0,hn=sn/2;
=======(答案2)=======
for(n=2;n<=10;n++)
=========或=========
for(n=2;n<11;n++)
=======(答案3)=======
hn=hn/2;
第42题(4.0分)题号:
446难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
功能:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
-------------------------------------------------------*/
#include
main(){
charc;
intletters=0,space=0,digit=0,others=0;
printf("pleaseinputsomecharacters\n");
/***********FOUND***********/
while((c=getchar())=='\n'){
/***********FOUND***********/
if(c>='a'&&c<='z'&&c>='A'&&c<='Z')
letters++;
/***********FOUND***********/
elseif(c=!
'')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("allinall:
char=%dspace=%ddigit=%dothers=%d\n",letters,
space,digit,others);
}
答案:
=======(答案1)=======
while((c=getchar())!
='\n')
=======(答案2)=======
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
=========或=========
if(c<='z'&&c>='a'||c>='A'&&c<='Z')
=========或=========
if(c<='z'&&c>='a'||c>='A'&&c<='Z')
=======(答案3)=======
elseif(c=='')
第49题(4.0分)题号:
433难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
学习使用按位或|。
------------------------------------------------------*/
#include
main()
{
/**********FOUND**********/
intab;
a=077;
b=a|3;
/**********FOUND**********/
printf("\40:
Thea&b(decimal)is%d\n",&b);
/**********FOUND**********/
b|=7
printf("\40:
Thea&b(decimal)is%d\n",b);
}
答案:
=======(答案1)=======
inta,b;
=======(答案2)=======
printf("\40:
Thea&b(decimal)is%d\n",b);
=======(答案3)=======
b|=7;
=========或=========
b=b|7;
第61题(4.0分)题号:
441难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
请输入星期几的第一个字母来判断一下是星期几,如果第一
个字母一样,则继续判断第二个字母。
------------------------------------------------------*/
#include"conio.h"
#include
voidmain()
{
charletter;
printf("pleaseinputthefirstletterofsomeday\n");
/**********FOUND**********/
while((letter=getch())='Y')
{
switch(letter)
{
case'S':
printf("pleaseinputsecondletter\n");
if((letter=getch())=='a')
printf("saturday\n");
elseif((letter=getch())=='u')
printf("sunday\n");
elseprintf("dataerror\n");
break;
case'F':
printf("friday\n");
break;
case'M':
printf("monday\n");
break;
case'T':
printf("pleaseinputsecondletter\n");
/**********FOUND**********/
if((letter=getch())!
='u')
printf("tuesday\n");
elseif((letter=getch())=='h')
printf("thursday\n");
else
printf("dataerror\n");
/**********FOUND**********/
break
case'W':
printf("wednesday\n");
break;
default:
printf("dataerror\n");
}
}
}
答案:
=======(答案1)=======
while((letter=getch())!
='Y')
=======(答案2)=======
if((letter=getch())=='u')
=======(答案3)=======
break;
第63题(4.0分)题号:
434难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的
最大的n。
------------------------------------------------------*/
#include
#include"string.h"
main()
{
intn,s;
/**********FOUND**********/
s==n=0;
/**********FOUND**********/
while(s>1000)
{
++n;
s+=n*n;
}
/**********FOUND**********/
printf("n=%d\n",&n-1);
}
答案:
=======(答案1)=======
s=n=0;
=======(答案2)=======
while(s<=1000)
=======(答案3)=======
printf("n=%d\n",n-1);
第64题(4.0分)题号:
4难度:
易第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
在一个已按升序排列的数组中插入一个数,插入后,数
组元素仍按升序排列。
------------------------------------------------------*/
#include
#defineN11
main()
{
inti,number,a[N]={1,2,4,6,8,9,12,15,149,156};
printf("pleaseenteranintegertoinsertinthearray:
\n");
/**********FOUND**********/
scanf("%d",&number)
printf("Theoriginalarray:
\n");
for(i=0;iprintf("%5d",a[i]);
printf("\n");
/**********FOUND**********/
for(i=N-1;i>=0;i--)
if(number<=a[i])
/**********FOUND**********/
a[i]=a[i-1];
else
{
a[i+1]=number;
/**********FOUND**********/
exit;
}
if(numberprintf("Theresultarray:
\n");
for(i=0;iprintf("%5d",a[i]);
printf("\n");
}
答案:
=======(答案1)=======
scanf("%d",&number);
=======(答案2)=======
for(i=N-2;i>=0;i--)
=========或=========
for(i=N-2;0<=i;i--)
=======(答案3)=======
a[i+1]=a[i];
=======(答案4)=======
break;
第70题(4.0分)题号:
408难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5
------------------------------------------------------*/
#include
main()
{
intn,i;
printf("\npleaseinputanumber:
\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
/**********FOUND**********/
while(n==i)
{
/**********FOUND**********/
if(n%i==1)
{
printf("%d*",i);
/**********FOUND**********/
n=n%i;
}
else
break;
}
}
printf("%d",n);
}
答案:
=======(答案1)=======
while(n!
=i)
=======(答案2)=======
if(n%i==0)
=========或=========
if(!
(n%i))
=======(答案3)=======
n=n/i;
第76题(4.0分)题号:
553难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
列程序的功能为:
已知圆锥半径r和高h,计算圆锥体积v。
请纠正程序中存在错误,
使程序实现其功能。
-------------------------------------------------------*/
#include
main()
{
/***********FOUND***********/
floatr=10,h=5;
/***********FOUND***********/
v=1/3*3.14159*r2*h;
/***********FOUND***********/
printf("v=%d\n",v);
}
答案:
=======(答案1)=======
doubler=10,h=5,v;
=========或=========
floatr=10,h=5,v;
=======(答案2)=======
v=1.0/3*3.14159*r*r*h;
=======(答案3)=======
printf("v=%f\n",v);
第79题(4.0分)题号:
551难度:
中第1章