改错.docx
《改错.docx》由会员分享,可在线阅读,更多相关《改错.docx(17页珍藏版)》请在冰点文库上搜索。
改错
已知fibonacci数列:
1,1,2,3,5,8,......,它可由下面公式表述:
F
(1)=1ifn=1
F
(2)=1ifn=2
F(n)=F(n-1)+F(n-2)ifn>2
以下程序是求F(35),请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
#include
#include
main()
{
doublef1,f2;
inti;
f1=1;f2=1;
for(i=1;i<=35;i++)
{
f1=f1+f2;
f2=f2+f1;
}
clrscr();
printf("\nthenumberis:
%12.0lf",f1);
}
/*REF:
9227465:
REF*/
若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。
例如,28是多因子完备数。
因为:
1+2+4+7+14+28=56=28*2,下面程序求[10,600]间最大的多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
如果算有多少个因子完备数,如何修改程序?
#include
#include
#include
main()
{
inta,b,c,n,big,count=0;
for(a=10;a<=600;a++)
{
b=0;
for(c=1;c<=a;c++)
if(a%c==0)
b++;
if(b%a==0)
{big=a;
}
}
printf("big=%d",big);
/*REF:
496:
REF*/
已知24有8个因子,而24正好被8整除。
下面程序求[100,300]之间有多少个整数能被其因子的个数整除,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
如果求最大数,怎么修改程序
#include
#include
#include
main()
{
inta,b,c,n,count=0;
b=0
for(a=100;a<=300;a++)
{
for(c=2;c<=a;c++)
if(a%c==0)
b+=1;
if(a%b==0)
{
count++;
}
}
pri/*REF:
19:
REF*/
下面程序求[2,600]之间同构数之和,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
同构数是:
一自然数平方的末几位与该数相同时,称此数为自构数,例如:
5*5=25,则称5为自同构数。
#include
#include
#include
main()
{
longsum,n,m,s,k;
sum=0;
for(n=2;n<=600;n++)
{
if(n<10)k=10;
else
if(n<100)k=100;
elsek=1000;
s=n*n;
s=s-n;
if(s%k==0)
/*REF:
488:
REF*/
下面程序是求[1,550]之间同时满足除3余2和除5余3条件的数之和。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
#include
#include
#include
main()
{
intsum;
inti;
sum=0;
for(i=1;i<=550;i++)
{
if(fmod(i,3)==2&&fmod(i,5)==3)
sum+=1;
}
clrscr();
printf("%ld\n",su/*REF:
10286:
REF*/
下面的程序中,函数fun的功能是:
根据形参m,计算下面公式的值。
T=1/1!
+1/2!
+1/3!
+......+1/m!
请改正程序中的错误,并运行改正后的程序。
当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。
#include
#include
doublefun(intm)
{doublefac,t=0.0;
inti=1,j;
for(i=1;i<=m;i++)
{fac=1.0;
for(j=1;j<=m;j++)fac=fac*i;
t+=1.0/fac;
}
returnt;
}
main()
{intm;
clrscr();
printf("\n请输入整数:
");
scanf("%d",&m);
printf("/*REF:
1.7182818011:
REF*/
下面的程序中,函数fun的功能是:
根据形参m,计算下面公式的值。
T=1+1/(2*3)+1/(3*4)+......+1/(m*(m+1))
请改正程序中的错误,并运行改正后的程序。
当从键盘输入50时,给出程序运行的正确结果(按四舍五入保留6位小数)。
#include
#include
doublefun(intm)
{doublet=1.0;
inti=2;
for(i=2;i<=m;i++)
t+=1/(i*(i+1));
returnt;
}
main()
{intm;
clrscr();
printf("\n请输入一个整数:
");
scanf("%d",m);
printf("\n结果是:
%lf\n",fun(m));
}
/*REF:
1.480392:
REF*/
下面的程序是求500以内的所有的素数的个数。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
#include
#include
#include
intprime(intn)
{intyes,i;
if(n<=1){return1;}
yes=1;
for(i=2;i<=sqrt(n);i++)
if(n%i==0){yes=0;break;}
returnyes;
}
main()
{intcount=0,i;
clrscr();
for(i=2;i<=500;i++)
/*REF:
95:
REF*/
下面的程序是求如下表达式的值。
S=sqrt(ln
(1)+ln
(2)+ln(3)+……+ln(n))
请改正程序中的错误,并运行修改后的程序,当n=20时,给出程序运行结果(按四舍五入保留6位小数)。
#include
#include
#include
intfun(intn)
{doubles=0.0;inti;
for(i=1;i<=n;i++)
s+=log(1.0*i);
s=sqrt(s);
returns;
}
main()
{clrscr();
printf("%ld\n",fun(20));
}
/*REF:
6.506383:
REF*/
下面的程序是求下式的和:
s=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+n)
请改正程序中的错误,并运行修改后的程序,当n=80时,给出程序运行结果(按四舍五入保留6位小数)。
#include
#include
floatfun(intn)
{inti;
floats=1.0,t=1.0;
for(i=2;i<=n;i--)
{t=t+i;
s+=s+1/t;
}
returns;
}
main()
{printf("\n%f",fun(80));
}
/*REF:
1.975309:
REF*/
下面的程序中,函数fun的功能是:
根据形参m,计算下面公式的值。
T=1+1/(2*3)+1/(3*4)+......+1/(m*(m+1))
请改正程序中的错误,并运行改正后的程序。
当从键盘输入50时,给出程序运行的正确结果(按四舍五入保留6位小数)。
#include
#include
doublefun(intm)
{doublet=1.0;
inti=2;
for(i=2;i<=m;i++)
t+=1/(i*(i+1));
returnt;
}
main()
{intm;
clrscr();
printf("\n请输入一个整数:
");
scanf("%d",m);
printf("\n结果是:
%lf\n",fun(m));
}
/*REF:
1.480392:
REF*/
下面的程序是求1000以内的最大的20个素数之和。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果。
#include
#include
#include
intfun(inthigh)
{intsum=0,n=0,j,yes;
while((high>=2)||(n<10))
{yes=1;
for(j=2;j<=sqrt(high);j++)
if(high%j==0)
yes=0;break;
if(yes){sum+=high;n++;}
high--/*REF:
3675:
REF*/
下面的程序是计算如下公式的A25值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......
请改正程序中的错误,并给出程序运行的正确结果(按四舍五入保留10位小数)。
#include
#include
doublefun(intn)
{doubleA=1.0;inti;
for(i=2;i<=n;i++)
A+=1.0/(1+A);
returnA;
}
main()
{clrscr();
printf("%12.10ld\n",fun(25));
}
/*REF:
0.6180339888:
REF*/
下面的程序是求[100,999]之间所有的素数的个数。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
#include
#include
#include
intprime(intn)
{intyes,i;
if(n<=1){return0;}
yes=1;
for(i=2;i<=sqrt(n);i++)
if(n%i!
=0){yes=0;break;}
returnyes;
}
main()
{intcount=0,i;
clrscr();
for(i=100;i<999;i++)/*REF:
143:
REF*/
以下程序求10000以内最大的完全数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
"完全数"是指:
一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:
6=1+2+3,则6就是一个完全数。
#include
#include
#include
main()
{
intn,m,s,k,big;
s=1;
for(n=3;n<=10000;n++)
{
k=n/2+1;
for(m=1;mif(n%m==0)
s+=m;
if/*REF:
8128:
REF*/
下面的程序是求表达式的值:
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=20时,程序的运行结果(按四舍五入保留10位小数)。
#include
#include
#include
doublefun(intn)
{doubles,t;inti;
s=0.0;t=1.0;
for(i=1;i<=n;i--)
{t=t*i/(2*i+1);
s+=t;
}
returns;
}
main()
{printf("\n%12.10lf",fun(20));
}
/*REF:
1.5707961494:
REF*/
下面程序是求[1,100]之间的所有整数的立方和。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
#include
#include
#include
main()
{
intsum;
inti;
sum=0;
for(i=1;i<100;i++)
{
sum+=i*i*i;
}
clrscr();
printf("%ld\n",sum);
}
/*REF:
25502500:
REF*/
下面的程序是计算:
s=f(-28)+f(-27)+......+f(-1)+f(0)+f
(1)+......+f(28)
的值。
其中函数定义如下:
f(x)=(x+1)/(x-2)ifx>1
f(x)=0ifx=0orx=2
f(x)=(x-1)/(x-2)ifx<0
请改正程序中的错误,并给出正确程序的运行结果(按四舍五入保留6位小数)。
#include
#include
#include
doublef(doublex)
{if(x==0||x==2)
return0.0;
elseif(x<0.0)
return(x+1)/(x-2);
else
return(x-1)/(x-2);
}
doublefsum(intn)
{inti;doubles=0.0,y;
for(i=-n;i<=n;i--)
{y=f(1.0*/*REF:
61.068272:
REF*/
下面的程序是求[10,1500]之间能被7整除的奇数的个数。
请改正程序中的错误,并运行修改后的程序,给出正确结果。
#include
#include
main()
{
inti,count=0;
for(i=10;i<=1500;i++)
{
if(i%2!
=0&&i%7==0)
{
count+=i;
}
}
printf("\nthenumberis%d",count);
}
/*REF:
106:
REF*/
下列程序的功能是求出以下分数序列的前28项之和,
2/1,3/2,5/3,8/5,13/8,21/13,......
请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。
#include
#include
fun(intn)
{longa,b,c;
intk;doubles;
s=0.0;a=2;b=1;
for(k=1;k<=n;k++)
{s=s+(double)a/b;
c=a;a=a+b;b=c;
}
returns;
}
main()
{intn=28;
clrscr();
printf("\nresult:
%ld\n",fun(n));
}
/*REF:
45.604533:
REF*/
下面的程序是求1000以内的最大的20个素数之和。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果。
#include
#include
#include
intfun(inthigh)
{intsum=0,n=0,j,yes;
while((high>=2)||(n<10))
{yes=1;
for(j=2;j<=sqrt(high);j++)
if(high%j==0)
yes=0;break;
if(yes){sum+=high;n++;}
high--/*REF:
18580:
REF*/
下面的程序是求如下表达式的值。
S=sqrt(ln
(1)+ln
(2)+ln(3)+......+ln(n))
请改正程序中的错误,并运行修改后的程序,当n=20时,给出程序运行结果(保留6位小数)。
#include
#include
#include
intfun(intn)
{doubles=0.0;inti;
for(i=1;i<=n;i++)
s+=log(1.0*i);
s=sqrt(s);
returns;
}
main()
{clrscr();
printf("%ld\n",fun(20));
}
/*REF:
6.506383:
REF*/
例程序中,函数fun的功能是:
计算并输出k以内的最大的10个能被13和17整除的自然数之和。
请改正程序中的错误,并运行正确的程序。
当从键盘输入2500时,给出程序运行的正确结果
#include
#include
intfun(intk)
{intm=0,mc=0,j;
while((k>=2)&&mc<10)
{if((k%13==0)||(k%17==0))
{m=m+k;mc++;}
k--;
}
return;
}
main()
{intk;
clrscr();
printf("\n请输入整数:
");
scanf("%d",&k);
printf("\n结果/*REF:
14365:
REF*/