| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:三中循环求解结果为何不同
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:3 
三中循环求解结果为何不同
# include <iostream.h> //求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
#include <math.h>

double Dowhile( double X) //do while类型求解过程 //求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
{
double sum=1,sn=X,n=X,d=1.0,i=1.0;
do {
sum+=sn;
n*=-X;
i++;
d*=i;
sn=n/d;
}while(fabs(sn=(n/d))>=0.0000001);
return sum;
}

double While(double X) // while类型求解过程 //求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
{
double sum=1,sn=X,n=X,d=1.0,i=1.0;
while(fabs(sn=(n/d))>=0.0000001)
{
sum+=sn;
n*=-X;
i++;
d*=i;
sn=n/d;
}
return sum;
}

double For(double X) // for类型求解过//求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
{
double sum=1,sn=X,n=X,d=1.0;
for(int i=1; fabs(sn=(n/d))>=0.0000001;i++)
{
sum+=sn;
n*=-X;
d*=i;
sn=n/d;
}
return sum;
}


void main()
{
double x,s1,s2,s3;
cout<<"please input x:\n";
cin>>x;
s1=Dowhile(x);
s2=While(x);
s3=For(x);

cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;

}
我输入1则显示 1.632..
1.632....
1.367
...
我分析了好厂时间分析不出来,大家给指点为何for循环与其他的结果不一样!


[此贴子已经被作者于2006-7-15 17:05:31编辑过]

搜索更多相关主题的帖子: 求解 结果 
2006-07-15 16:59
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

while和for 循环原理上没有什么不同,原因在于你的 double For(double X)函数有问题

double For(double X)  // for类型求解过程        //求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
{
double sum=1,sn=X,n=X,d=1.0;
for(int i=1; fabs(sn=(n/d))>=0.0000001;)
{
sum+=sn;
n*=-X;
d*=++i;//问题应该在这里,明白了吧
sn=n/d;
}
return sum;
}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-07-15 17:31
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 

谢谢你的帮助!
程序代码:

double For(double X) // for类型求解过程 //求1+x1/1!-x2/2!+x/33!-x4/4!+x5/5!-.........
{
double sum=1,sn=X,n=X,d=1.0;
for(int i=1; fabs(sn=(n/d))>=0.0000001;)
{
sum+=sn;
n*=-X;
d*=++i;//问题应该在这里,明白了吧
sn=n/d;
}
return sum;
}

但是我的原来的程序for(int i=1; fabs(sn=(n/d))>=0.0000001;i++)有一个i++的;你所直的是我应该把这个括号里的i+挪到
for(int i=1; fabs(sn=(n/d))>=0.0000001;)
{
sum+=sn;
n*=-X;
/ 这个地方/ d*=++i;//问题应该在这里,明白了吧
我还是不大名明白

[此贴子已经被作者于2006-7-15 18:10:38编辑过]

2006-07-15 18:09
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

看看表达式 1+x1/1!-x2/2!+x3/3!-x4/4!+x5/5!-.........
你sum的初始值是1所以循环是从第一个加号后开始的,即:
第一次循环的sum+=sn;意思是1+x1/1!,此时i=1因为是1的阶乘
下一次循环的sum+=sn;意思是1+x1/1!-x2/2!,此时i=2因为是2的阶乘...

然后看你的函数
double For(double X)
{
double sum=1,sn=X,n=X,d=1.0;
for(int i=1; fabs(sn=(n/d))>=0.0000001;i++)
{
sum+=sn;//i的值为1
n*=-X;
d*=i;//此时的i应该是给下一次循环做准备的,所以应该+1
sn=n/d;
}
return sum;
}

整个for循环就意味着i少乘了一次,那么d*=i在第一次循环里就没有意义了就不是为了实现分母的阶乘变化了
那么表达式应该变化为 1+x1/1!-x2/1!+x3/2!-x4/3!+x5/4!-.........

okay?

[此贴子已经被作者于2006-7-15 19:02:27编辑过]


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-07-15 19:00
快速回复:三中循环求解结果为何不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018059 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved