C语言迭代法

#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();
}
为啥就是不行

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();
}
才会等价于第一个程序
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-01
迭代法就是让方程的解不断去逼近真实的解。这是一种数值计算方法。思路就是按上面的步骤,只设置两个x0,x1开始x0代表第一个值,x1代表第二值第一次迭代之后,让x0=x1,x1=新的值,这样x0代表第二个值,x1代表第三值以此类推。。。直到误差满足要求
第2个回答  2019-08-28
迭代法,是一种不断用变量的旧值递推新值的过程。 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);
}
第3个回答  2010-06-23
这个其实很简单,假设有台电视,我让你猜价钱:
你说:4000,我说:高了(那么你把价钱降低一半报一次)
你说:2000,我说:低了(那么你把价钱升到4000和2000正中间)
你说:3000,我说:还低(那么你把价钱升到3000和4000正中间)
你说:3500,我说:高了(那么你把价钱降到3000和3500正中间)
你说:3250,我说:还高(那么你把价钱降到3000和3250正中间)
你说:3125,我说:低了(那么你把价钱升到3125和3250正中间)
你说:3200,我说:答对了!
这就是典型的迭代。当计算没有表达式的时候,你输入一个初始化的数据(比如4000),然后通过一个判断程序检验是否正确,如果不正确,就按照上两次之间的结果进行判断,以逐渐逼近的方式求得最终的数值,这就叫迭代

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

相信聪明的你一定看的明白,要不然你去找范伟和赵本山要答案吧,哈哈哈!
第4个回答  2009-06-11
你说的不行是编译通不过吗?
还是运行上的结果错误?
从语法上上述两个程序都是正确的,只不过是前者回先执行循环体,后判断循环条件。如果你在输入时,造成的循环结果从一开始就不成立,那么两个程序的结果肯定是不同的
还有一点就是编译系统的差异造成的
相似回答