C语言迭代法

#include<math.h>#include<stdio.h>main(){floatx,t,c;inta;scanf("%d",&a);x=1;do{t=x;x=(... #include <math.h>
#include <stdio.h>
main()
{float x,t,c;
int a;
scanf("%d",&a);
x=1;
do
{
t=x;x=(1.0/2)*(x+a/x);c=x-t;
}while(fabs(c)/x>1e-5);
printf("%f",x);
getch();
}
这个可以 而为啥把while语句改一下就是不行呢?
#include <math.h>
#include <stdio.h>
main()
{float x,t,c;
int a;
scanf("%d",&a);
x=1;
while(fabs(c)/x>1e-5)
{
t=x;x=(1.0/2)*(x+a/x);c=x-t;
}
printf("%f",x);
getch();
}
为啥就是不行
展开
 我来答
weblanyu
推荐于2017-09-03 · TA获得超过177个赞
知道小有建树答主
回答量:363
采纳率:0%
帮助的人:283万
展开全部
while 和do while是不同地
第二个改成
#include <math.h>
#include <stdio.h>
main()
{float x,t,c;
int a;
scanf("%d",&a);
x=1;
t=x;x=(1.0/2)*(x+a/x);c=x-t;
while(fabs(c)/x>1e-5)
{
t=x;x=(1.0/2)*(x+a/x);c=x-t;
}
printf("%f",x);
getch();
}
才会等价于第一个程序
裴安祯遇国
2019-08-01 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:26%
帮助的人:599万
展开全部
迭代法就是让方程的解不断去逼近真实的解。这是一种数值计算方法。思路就是按上面的步骤,只设置两个x0,x1开始x0代表第一个值,x1代表第二值第一次迭代之后,让x0=x1,x1=新的值,这样x0代表第二个值,x1代表第三值以此类推。。。直到误差满足要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谌晨王天路
2019-08-28 · TA获得超过3744个赞
知道大有可为答主
回答量:3167
采纳率:30%
帮助的人:163万
展开全部
迭代法,是一种不断用变量的旧值递推新值的过程。 fun函数设置循环,当x0-x1的绝对值小于0.000001循环结束。 #include
<stdio.h>
#include
<math.h>
float
fun()
{float
x,n=0.0,Root;
while(Root>=0.000001||Root<=-0.000001)
{ x=n;
n=cos(x);
Root=x-n;} Root=n; return
Root
;

}
void
main()
{
float
f=fun();
printf("Root=%f\n",f);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enochwills
2010-06-23 · TA获得超过4793个赞
知道大有可为答主
回答量:2031
采纳率:96%
帮助的人:1609万
展开全部
这个其实很简单,假设有台电视,我让你猜价钱:
你说:4000,我说:高了(那么你把价钱降低一半报一次)
你说:2000,我说:低了(那么你把价钱升到4000和2000正中间)
你说:3000,我说:还低(那么你把价钱升到3000和4000正中间)
你说:3500,我说:高了(那么你把价钱降到3000和3500正中间)
你说:3250,我说:还高(那么你把价钱降到3000和3250正中间)
你说:3125,我说:低了(那么你把价钱升到3125和3250正中间)
你说:3200,我说:答对了!
这就是典型的迭代。当计算没有表达式的时候,你输入一个初始化的数据(比如4000),然后通过一个判断程序检验是否正确,如果不正确,就按照上两次之间的结果进行判断,以逐渐逼近的方式求得最终的数值,这就叫迭代

这个迭代有几个条件:第一:你有一个计算方式,从前面两步的一个值(比如前面的例子从最低的高值和最高的低值之间去中间值,就是一个计算方式)
第二,有一个判断程序,比如我心里知道的那个数,对你的报价进行比较
第三,有一个收敛条件(上面的例子是完全猜对,其实你也可以允许误差在100元内就算猜的正确)

相信聪明的你一定看的明白,要不然你去找范伟和赵本山要答案吧,哈哈哈!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AndrewJd
2009-06-11
知道答主
回答量:23
采纳率:100%
帮助的人:23.5万
展开全部
你说的不行是编译通不过吗?
还是运行上的结果错误?
从语法上上述两个程序都是正确的,只不过是前者回先执行循环体,后判断循环条件。如果你在输入时,造成的循环结果从一开始就不成立,那么两个程序的结果肯定是不同的
还有一点就是编译系统的差异造成的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式