C改错题例题_c改错练习题
C改错题例题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c改错练习题”。
类型A:素数
A1、下面的程序是求400以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。#include #include #include int prime(int n){ int yes, i;
if(n
yes=1;
/*原来的代码:
for(i=2;i
if(n%i==0){ yes=0;break;}
return yes;} main(){ int sum=0, i;
clrscr();
for(i=2;i
if(prime(i))sum+=i;
printf(“%dn”, sum);}
yes=0 */ /*原来的代码: yes=1 */
A2、下面的程序是求1000以内的最大的20个素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。18580 #include #include #include int fun(int high){ int sum=0, n=0, j, yes;
while((high>=2)&&(n
/*原来的代码: while((high>=2)||(n
{yes=1;
for(j=2;j
if(high%j==0)
{ yes=0;break;}
/*原来的代码: yes=0;break;忘了大括号 */
if(yes){sum+=high;n++;}
high--;
}
return sum;}
main(){ clrscr();
printf(“%d n”,fun(1000));}
类型B:完数,多因子完备数
B1、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[150,1000]间有多少个多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include #include #include main(){ int a,b,c,n,count=0;
/*原来的代码: b=0 写在此行,应该把它移到循环内.*/ for(a=150;a
{
b=0;
/*原来的代码: 移后的新位置
*/ for(c=1;c
if(a%c ==0)
b=b+c;
if(b%a==0)
{
count=count+1;
}
}
printf(“n count = %d”,count);
}
B2、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[1,700]间最大的多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include #include #include main(){ int a,b,c,n,big,count=0;
for(a=1;a
{
b=0;
for(c=1;c
/*原来的代码: c=2 */
if(a%c ==0)
b=b+c;
if(b%a==0)
{
big=a;
/*原来的代码: big=b */
}
}
printf(“%dn ”,big);
}
B3、以下程序求10000以内的所有完全数的个数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。”完全数”是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完全数。#include #include #include main(){
int count,n,m,s,k;count=0;for(n=3;n
s=0;
/*原来的代码: s=1 */
}
k=n/2+1;
for(m=1;m
} printf(“nThe count=%d”,count);if(n%m==0)s+=m;
/*原来的代码: s+=1 */ if(s==n){
count+=1;} 类型C:数字问题
C1、下面程序是求[10,650]之间同时满足除4余3或除5余4条件的数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。84544 #include #include #include main(){ long sum;/*原来的代码: int sum;*/ int i;sum=0;for(i=10;i
if(fmod(i,4)==3 || fmod(i,5)==4)
sum+=i;}
clrscr();printf(“%ldn”,sum);}
C2、下面程序是求[2,60]之间的所有偶数的立方和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。1729800 #include #include #include main(){ long sum;long i;/*原来的代码: int i */ sum=0;for(i=2;i
if(fmod(i,2)==0)
sum+=i*i*i;
/*原来的代码: sum+=i*3 */ }
clrscr();}
C3、下例程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13和17整除的自然数之和。请改正程序中的错误,并运行正确的程序。当从键盘输入2500时,给出程序运行的正确结果 14365 #include #include int fun(int k){ int m=0, mc=0, j;while((k>=2)&& mc
{ m=m+k;mc++;}
k--;} return m;
/*原来的代码:return;*/ } printf(“%ldn”,sum);main(){ int k;
clrscr();
printf(“n 请输入整数:”);
scanf(“%d”, &k);
printf(“n 结果是: %dn”,fun(k));}
类型D:数列
D1、下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。T=1/1!+1/2!+1/3!+......+1/m!请改正程序中的错误,并运行改正后的程序。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。#include #include double fun(int m){ double fac, t=0.0;int i=1, j;for(i=1;i
for(j=1;j
/*原来的代码: for(j=1;j
t+=1.0/fac;} return t;} main(){ int m;clrscr();printf(“n 请输入整数: ”);scanf(“%d”, &m);printf(“n 结果是: %12.10lf n”,fun(m));}
D2、下面的程序是计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30)的值。其中函数定义如下:
f(x)=(x+1)/(x-2)if x>1
f(x)=0
if x=0 or x=2 f(x)=(x-1)/(x-2)
if x #include #include double f(double x){ if(x==0 || x==2)
/*原来的代码: && */
return 0.0;
else if(x
return(x-1)/(x-2);
else
return(x+1)/(x-2);}
double fsum(int n){ int i;double s=0.0, y;
for(i=-n;i
{y=f(1.0*i);s+=y;}
return s;/*原来的代码: return y;} main(){ clrscr();printf(“%lfn”, fsum(30));}
D3、已知fibonacci数列:1,1,2,*/ 3,5,......,它可由下面公式表述: 8 F(1)=1
if n=1 F(2)= 1
if n=2 F(n)=F(n-1)+F(n-2)
if n>2
以下程序是求F(30),请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。832040 #include #include main(){ double f1,f2;
int i;
f1=1;f2=1;
for(i=1;i
/*原来的代码: i
{
f1=f1+f2;
f2=f2+f1;
}
clrscr();
printf(“n the number is :%12.0lf”,f2);
/*原来的代码: f1 */ }
D4、下面的程序是求表达式的值:
s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*....*n)/(3*5*7*.....(2*n+1))请修改程序中的错误,并运行修改后的程序。当n=30时,程序的运行结果(保留10位小数)。1.5707963267 #include #include #include double fun(int n){ double s, t;int i;
s=1.0;t=1.0;
for(i=1;i
{ t=t*i/(2*i+1);
/*原来的代码: t=t*n/(2*n+1);*/
s+=t;
/*原来的代码: s=t */
}
return s;} main(){printf(“n %12.10lf”, fun(30));}
D5、下面的程序是求如下表达式的值。S=sqrt(ln(1)+ln(2)+ln(3)+……+ln(n))请改正程序中的错误,并运行修改后的程序,当n=50时,给出程序运行结果(保留6位小数)。12.185145 #include #include #include double fun(int n)
/*原来的代码: int fun(int n)*/ { double s=0;int i;/*原来的代码: int s=0;*/ for(i=1;i
s+=log(1.0*i);
s=sqrt(s);
return s;} main(){clrscr();printf(“%lfn”,fun(50));}
D6、下列程序的功能是求出以下分数序列的前35之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。56.930771 #include #include main(){ long a,b,c,k;
double s;
clrscr();
s=0.0;a=2;b=1;
for(k=1;k
{ s=s+(double)a/b;/*原来的代码:(Double)a/b */
c=a;a=a+b;b=c;
/*原来的三条交换语句写错了:a=a+b;c=a;b=c;*/
}
printf(“n 结果: %lfn”, s);}
D7、下列程序的功能是求出以下分数序列的前25之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。40.750431 #include #include double fun(int n)
/*原来的代码: fun(n)*/ { long a,b,c;
int k;double s;
s=0.0;a=2;b=1;
for(k=1;k
{ s=s+(double)a/b;
c=a;a=a+b;b=c;
}
return s;} main(){ int n=25;
clrscr();
printf(“n result: %lfn”,fun(n));}
类型E:同构数
E1下面程序求[1,600]之间最大的同构数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。同构数是:一自然数平方的末几位与该数相同时,称此数为自构数,例如:5*5=25,则称5为自同构数。376 #include #include #include main(){ long n,m,s,k,big;
for(n=3;n
{
if(n
else
if(n
else k=1000;
s=n*n;
s=s-n;
if(s%k==0)
{
big=n;
/*原来的代码: big=s */
}
}
printf(“n The biggest = %ld”,big);/*原来的代码: %d */ }