c++高手进

问两个题目
1.求菲波那契数列前40个数
数列是这样的 首项和第二项是1 从第三项开始
每一项等于前两项的和
我用vc++编译如下

#include<iostream.h>
#include<math.h>
void main()
{
int i=0,a=0,b=1,c;
for(i=1;i<=39;i=i+1)
{
c=a+b;
a=b;
b=c;
}
cout<<"这四十个数为"<<","<<c<<endl;
}
结果却只有一个数102334155 为什么会是这样?????

问题二
求所有满足下列情况的三位数
各位数字的立方和等于该数本身。
语言如下

#include<iostream.h>
#include<math.h>
void main()
{

int a,b,c;
for(a=1;a<10;a++);
for(b=0;b<10;b++);
for(c=0;c<10;c++);
if(pow(a,3.0)+pow(b,3.0)+pow(c,3.0)==100*a+10*b+c)
cout<<"水仙花数为"<<100*a+10*b+c<<endl;
else
cout<<"这不是水仙花数"<<endl;
}
结果只有“这不是水仙花数” 怎么会这样?

另外 学程序感觉很艰难 请有识之士给予建议

最后希望各位大侠能给详细的解答!!先谢谢了!!!!!!!

第1个回答  2008-10-30
问题一(cout语句位置不对,要放在循环里面;还是,你落了第一个数“1”)下面是正确的程序:
#include<iostream.h>
#include<math.h>
void main()
{
int i=0,a=0,b=1,c;
cout<<"这四十个数为:\n"<<"1";
for(i=1;i<=39;i=i+1)
{
c=a+b;
a=b;
b=c;
cout<<","<<c;
}
cout<<endl;
}
提醒你注意排版,方便读程序,对别人对你自己都好!

问题二(并不是结果只有“这不是水仙花数”,而是因为屏幕显示有限,后面大量的“这不是水仙花数”要显示,所以水仙花数的显示被覆盖,解决办法只有去掉else语句,而且此句也无意义。你的for语句学的不够,好看书!)下面是正常的程序:
#include<iostream.h>
#include<math.h>
void main()
{
int a,b,c;
for(a=0;a<10;a++)
{
for(b=0;b<10;b++)
{
for(c=0;c<10;c++)
{
if((pow(a,3.0)+pow(b,3.0)+pow(c,3.0))==(100*a+10*b+c)&&a+b+c!=0)
cout<<"水仙花数为"<<100*a+10*b+c<<endl;
}
}
}
}
学C++不是很难的,多看书,多读程序,看看别人对问题的描述方法和解决方法,多写程序,从不断的训练中你就会学到很多!祝你成功!
第2个回答  2008-10-30
楼上的说地不对吧,循环是肯定39次了!
1。你得到的不是1-39个数之和而是Fibnacci数中的第41个数。 如果想得到前39个数之和应该为:
应该为:
#include<iostream.h>
#include<math.h>
void main()
{
long s=1;
int i=0,a=0,b=1,c;
for(i=1;i<=39;i=i+1)
{
c=a+b;
a=b;
b=c;
s=s+c;

}
cout<<"这四十个数为"<<","<<s<<endl;
}

2。#include<iostream.h>
#include<math.h>
void main()
{

int a,b,c;
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
if(pow(a,3.0)+pow(b,3.0)+pow(c,3.0)==100*a+10*b+c)
cout<<"水仙花数为"<<100*a+10*b+c<<endl;

}
你把“;”去掉,加上就不执行了!!!
另外你把
“else
cout<<"这不是水仙花数"<<endl; ”
写上就看不到水仙花数了,因为数字太多了,分成好几屏!!!
第3个回答  2008-10-30
第一题:
你的语句cout<<"这四十个数为"<<","<<c<<endl; 在循环外面只执行1次,所以只有1个输出,正确的做法是把这个句子放到循环里面:
#include<iostream.h>
#include<math.h>
void main()
{
int i=0,a=0,b=1,c;
for(i=1;i<=39;i=i+1)
{
c=a+b;
a=b;
b=c;
cout<<"这四十个数为"<<","<<c<<endl;
}
}

第二题:
你的三个循环语句都是空循环,后面不应该加分号,另外,不应该有那个不是水仙花数的输出,因为大量的这个输出会把屏幕刷掉。正确的如下:

#include<iostream.h>
#include<math.h>
void main()
{

int a,b,c;
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
if(pow(a,3.0)+pow(b,3.0)+pow(c,3.0)==100*a+10*b+c)
cout<<"水仙花数为"<<100*a+10*b+c<<endl;
//else
//cout<<"这不是水仙花数"<<endl;
}

学程序感到难,每个初学者都会有这种感觉,多试验,多练习,慢慢就好了
第4个回答  2008-10-30
都循环完只剩c了,输出当然是一个数。
#include<iostream.h>
#include<math.h>
void main()
{
cout<<"这四十个数为";//这里
int i=0,a=0,b=1,c;
for(i=0;i<=39;i++)//这里
{
c=a+b;
a=b;
b=c;
cout<<c<<","<<endl; //这里
}
}

第二题三个for循环都是空语句,执行后a=b=c=9,当然不合题意。
这个改的只是个大概意思,你看看后自己再变一下。
#include<iostream.h>
#include<math.h>
void main()
{

int a,b,c;
for(a=1;a<10;a++)
{
for(b=0;b<10;b++)
{
for(c=0;c<10;c++)
{
if(pow(a,3.0)+pow(b,3.0)+pow(c,3.0)==100*a+10*b+c)
cout<<"水仙花数为"<<100*a+10*b+c<<endl;
else
cout<<"这不是水仙花数"<<endl;
}
}}}本回答被提问者采纳
第5个回答  2008-10-30
每道题目拿到手后先分析下,例如第一题:
求菲波那契数列前40个数
我们设两个变量a,b用来保存当前的2个数,并且他们初始都是1
然后定义一个变量c=a+b 输出a, b, c后让a=b b=c再计算新的c然后输出c直到输出40个数
知道方法了着手编程序:

#include<iostream.h>

void main()
{
int a, b, c, i;
a=b=1;
c=a+b;
cout<<a<<"\t"<<b<<"\t"<<c<<"\t";
for (i=0; i<37; i++)
{
a=b; b=c; c=a+b;
cout<<c<<"\t";
}
cout<<endl;
}

第二题:
求水仙花数
我们可以先定义一个数组,把0~9的三次方都先算出来(这样可以节省后面计算3次方的时间)
然后根据要求找出水仙花数。
程序如下:

#include<iostream.h>

void main()
{
int a[10], i, j, k;
for (i=0; i<10; i++) a[i]=i*i*i;

for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
if (a[i]+a[j]+a[k]==i*100+j*10+k)
cout<<i<<j<<k<<"\t";
}
相似回答