C语言上机改错题解.docx
- 文档编号:25725366
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:13
- 大小:16.98KB
C语言上机改错题解.docx
《C语言上机改错题解.docx》由会员分享,可在线阅读,更多相关《C语言上机改错题解.docx(13页珍藏版)》请在冰豆网上搜索。
C语言上机改错题解
一、fibonacci
1、已知fibonacci数列:
1,1,2,3,5,8,......,以下程序是求F(30),请修改程序中的错误:
(832040)
#include
#include
main()
{
doublef1,f2;
inti;
f1=1;f2=1;
for(i=1;i<=30;i++)**for(i=1;i<=14;i++)
{
f1=f1+f2;
f2=f2+f1;
}
clrscr();
printf("\nthenumberis:
%12.0lf",f1);}
**printf("\nthenumberis:
%12.0lf",f2);}
2、已知fibonacci数列:
1,1,2,3,5,8,...,以下程序是求F
(1)+F(3)+F(5)+...+F(49)的值,请修改程序中的错误:
(12586269025)
#include
#include
main()
{
doublef1,f2;
doublesum=2;**doublesum=1;
inti;
f1=2;f2=3;**f1=1;f2=1;
for(i=1;i<=19;i++)**for(i=1;i<=24;i++)
{
f1=f1+f2;
sum=sum+f1;
f2=f2+f1;
sum=sum+f2;**去掉此句
}
clrscr();
printf("\nthenumberis:
%12.0lf",sum);}
二、prime
1、下面的程序是求1000以内的最大的20个素数之和。
请修改程序中的错误:
(18580)
#include
#include
#include
intfun(inthigh)
{intsum=0,n=0,j,yes;
while((high>=2)||(n<10))
**while((high>=2)&&(n<20))
{yes=1;
for(j=2;j<=sqrt(high);j++)
if(high%j==0)
yes=0;break;**{yes=0;break;}
if(yes){sum+=high;n++;}
high--;
}
returnsum;
}
main()
{clrscr();
printf("%d\n",fun(1000));}
2、下面的程序是求[100,999]之间所有的素数的个数。
请修改程序中的错误:
(143)
#include
#include
#include
intprime(intn)
{intyes,i;
if(n<=1){return0;}
yes=0;**yes=1;
for(i=2;i<=sqrt(n);i++)
if(n%i!
=0){yes=0;break;}
**if(n%i==0){yes=0;break;}
returnyes;
}
main()
{intcount=0,i;
clrscr();
for(i=100;i<999;i++)
if(prime(i))count+=1;
printf("%d\n",count);}
3、下面的程序是求[2,500]之间的所有的素数之和。
请修改程序中的错误:
(21536)
#include
#include
#include
intprime(intn)
{intyes,i;
if(n<=1){return1;}**if(n<=1){return0;}
yes=1;
for(i=2;i<=sqrt(n);i++)
if(n%i==0){yes=0;break;}
return1;**returnyes;
}
main()
{intsum=0,i;
clrscr();
for(i=2;i<=500;i++)
if(prime(i))sum+=i;
printf("%d\n",sum);}
三、平方和、立方和
1、下面程序是求[20,400]之间的能被9整除的数的平方和。
请修改程序中的错误:
(2378565)(特别注意提示数据类型)
#include
#include
#include
main()
{
longsum;
inti;**longi;
sum=1;**sum=0;
for(i=20;i<=400;i++)
{
if(fmod(i,9)==0)
sum+=i*i;
}
clrscr();
printf("%d\n",sum);**printf("%ld\n",sum);
}
2、下面程序是求[2,60]之间的所有偶数的立方和。
请修改程序中的错误:
(1729800)
#include
#include
#include
main()
{
longsum;
inti;**longi;
sum=0;
for(i=2;i<=60;i++)
{
if(fmod(i,2)==0)
sum+=i*3;**sum+=i*i*i;
}
clrscr();
printf("%ld\n",sum);
}
四、整除求余:
1、下列程序中,函数fun的功能是:
计算并输出k以内的最大的10个能被13或17整除的自然数之和。
请改正程序中的错误,并运行正确的程序。
当从键盘输入500时,给出程序运行的正确结果。
(4622)
#include
#include
intfun(intk)
{intm=0,mc=0,j;
while((k>=2)||mc<10)**while((k>=2)&&mc<20)
{if((k%13==0)&&(k%17==0))
**{if((k%13==0)||(k%17==0))
{m=m+1;mc++;}**{m=m+k;mc++;}
k--;
}
returnm;}
main()
{intk;
clrscr();
printf("\n请输入整数:
");
scanf("%d",&k);
printf("\n结果是:
%d\n",fun(k));}
五、完数(6、28、496、8128)&&多因子完备数&&24因子
1、求10000以内的所有完全数的个数,请修改程序中的错误:
(4)
#include
#include
#include
main()
{
intcount,n,m,s,k;
count=0;
for(n=3;n<=10000;n++)
{
s=1;**s=0;
k=n/2+1;
for(m=1;m if(n%m==0) s+=1;**s+=m; if(s==n) { count+=1; } } printf("\nThecount=%d",count); } 2、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。 例如,28是多因子完备数。 因为: 1+2+4+7+14+28=56=28*2,下面程序求[1,700]间有多少个多因子完备数,请修改程序中的错误: (6) #include #include #include main() { inta,c,n,count=0; for(a=1;a<=700;a++) {b=0; for(c=2;c<=a;c++) if(a%c==0) b=b+1;**b+=c; if(b%a==0) { count+=a;**count++; } } printf("\ncount=%d",count); } 3、已知24有8个因子,而24正好被8整除。 下面程序求[1,100]之间有多少个整数能被其因子的个数整除,请修改程序中的错误: (16) #include #include #include main() { inta,b,c,n,count=0; for(a=1;a<=100;a++) { b=1**b=0; for(c=1;c<=a;c++) if(a%c==0) b=b+1; if(a%b==0) { count=count+b;**count++; } } printf("\ncount=%d",count); } 六、表达式计算: 1、下列程序是求分数序列的前30项之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误: (48.840601) #include #include main() {longa,b,c,k; doubles; clrscr(); s=0.0;a=2;b=1; for(k=1;k<=30;k++) s=s+a/b;**{s=s+(double)a/b; c=a;a=a+b;b=c;**c=a;a=a+b;b=c;} printf("\n结果: %lf\n",s);} 2、下面的程序是计算如下公式的A15值。 A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......请改正程序中的错误,并将结果按四舍五入保留10位小数: (0.6180344478) #include #include doublefun(intn) {intA=1.0;inti;**doubleA=1.0; for(i=2;i<=n;i++) A+=1.0/(1+A);**A=1.0/(1+A); returnA;} main() {clrscr(); printf("%12.10lf\n",fun(15));} 3、下面的程序中,函数fun的功能是: 根据形参m,计算下面公式的值T=1+1/(2*3)+1/(3*4)+......+1/(m*(m+1))。 请改正程序中的错误,并运行改正后的程序。 当从键盘输入50时,给出程序运行的正确结果(按四舍五入保留6位小数)。 (1.480392) #include #include doublefun(intm) {doublet=1.0; inti=2; for(i=2;i<=m;i++) t+=1/i*(i+1);**t+=1.0/(i*(i+1)); returnt;} main() {intm; clrscr(); printf("\n请输入一个整数: "); scanf("%d",m);**scanf("%d",&m); printf("\n结果是: %lf\n",fun(m));} 4、下面的程序是求表达式的值: 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位小数)。 (1.5707961494) #include #include #include doublefun(intn) {doubles,t;inti; s=0.0;t=1.0;**s=1.0; for(i=1;i<=n;I--)**for(i=1;i<=n;i++) {t=t*i/(2*i+1); s+=t; } returns;} main() {printf("\n%12.10lf",fun(20));} 5、下面的程序中,函数fun的功能是: 根据形参m,计算下面公式的值T=1/1! +1/2! +1/3! +......+1/m! 请改正程序中的错误,并运行改正后的程序。 当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。 (1.7182818011) #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;**for(j=1;j<=i;j++)fac=fac*j; t+=1.0/fac; } returnt;} main() {intm; clrscr(); printf("\n请输入整数: "); scanf("%d",&m); printf("\n结果是: %12.10lf\n",fun(m));} 6、下面的程序是求如下表达式的值S=sqrt(ln (1)+ln (2)+ln(3)+......+ln(n))。 请改正程序中的错误,并运行修改后的程序,当n=50时,给出程序运行结果(按四舍五入保留6位小数)。 (12.185145) #include #include #include intfun(intn)**doublefun(intn) {ints=0;inti;**doubles=0.0; for(i=1;i<=n;i++) s+=log(1.0*i); s=sqrt(s); returns;} main() {clrscr(); printf("%lf\n",fun(50));} 7、下面的程序是求下式的和: s=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+n)。 请改正程序中的错误,并运行修改后的程序,当n=90时,给出程序运行结果(按四舍五入保留6位小数)。 (1.978023) #include #include intfun(intn)**floatfun(intn) {inti; floats=0.0,t=1.0;**floats=1.0,t=1.0; for(i=2;i<=n;i--)**for(i=2;i<=n;i++) {t=t+i; s=s+1/t; } returns;} main() {printf("\n%f",fun(90));}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 改错 题解