解题思路以及注意事项:
迭代法迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。
大家要有灵活运用迭代法思维,本题就是先让x=(1+4/1)/2=2.5;然后第二次x=(2.5+4/2.5)/2=2.05。。。如此下去就会越来越接近2是不是!就跟开方一样。直到最后进度满足了就退出循环。
实例代码:
#include"stdio.h" #include"math.h" //包含fabs()函数的头文件,别忘了加 int main() { int a; double x=1.0,x1; printf("请输入需要计算的数\n"); scanf("%d",&a); do { x1=x; x=(x1+a/x1)/2; } while(fabs(x-x1)>1E-5); //fabs()绝对值函数 printf("%lf",x); return 0; }
大家还有什么不懂的就在下面评论区留言
0.0分
116 人评分
想问一下,为什么是fabs(x-x1)>1E-5,这表达的不是前后两数之差大于0.00001的意思吗,但按题意应该用<的,但情况是必须用>才正确,所以能帮忙解惑一下吗
#include<stdio.h> int main(){ double a,xn1,xn2,xn; scanf("%lf",&a); xn1 = a;xn2 = a + 1; while((xn1 - xn2 >= 0.00001) || (xn2 - xn1 >= 0.00001)){ if(xn1 == 0){ xn2 = 0; break; } xn = xn2; xn2 = (xn1 + a / xn1) / 2; xn1 = xn; } printf("%.3lf",xn2); } //答案50%错误,哪里有问题啊?
梦魔 2021-10-28 10:44:33 |
变量太多了容易出错,
1E-5是什么?
#include<stdio.h> #include<math.h> int main() { int x; double r[2],k; scanf("%d",&x); k=1; do{ r[0]=k; r[1]=(r[0]+x/r[0])/2; printf("%f %f\n",r[0],r[1]); k=r[1]; }while(fabs(r[1]-r[0])>1E-5); printf("%.3f",r[1]); return 0; } 这个答案错误,请问有各位大佬看出是哪里错了吗
你好,double x=1.0 这个x必须是1.0吗?1.0什么意思?望回复谢谢你
故卿 2019-11-22 09:22:00 |
1.0就是浮点数嘛,double就是双精度浮点型,就是初始化为1.0,乘除的一般初始化为1.0,加减的一般初始化为0.0
#include<stdio.h> int main(void) { int a; double b = 2.0; scanf_s("%d", &a); do { b = (b + a / b) / 2.0; } while (b>2.001); printf("%.3lf", b); return 0; } 超时50%,有大佬能解释下不
/*假设a。欲求a的平方根,首先猜测一个值X1=a/2, 然后根据迭代公式X(n+1)=(Xn+a/Xn)/2,算出X2, 再将X2代公式的右边算出X3等等, 直到连续两次算出的Xn和X(n+1)的差的绝对值 小于某个值,即认为找到了精确的平方根 公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值 少于0.00001。 输出保留3位小数 */ #include<stdio.h> int main() { // 获取a值 double a,x,y; scanf("%lf",&a); x=a/2;//x1的值 while(1) { y=x; x=(y+a/y)/2; if (x-y<0.00001 || y-x<0.00001) //第一次成立, { y=x; x=(y+a/y)/2; if (x-y<0.00001 || y-x<0.00001) printf("%0.3lf",x); break; } } return 0; } 错误百分之50,哪位大佬可以帮忙找错误吗
题目还是不太理解,有大佬可以跟我说下题目中的那个公式究竟啥意思吗?
C杯 2019-08-12 11:20:54 |
假设a。欲求a的平方根,首先猜测一个值X1=a/2, 然后根据迭代公式X(n+1)=(Xn+a/Xn)/2,算出X2, 再将X2代公式的右边算出X3等等, 直到连续两次算出的Xn和X(n+1)的差的绝对值 小于某个值,即认为找到了精确的平方根
printf基础练习2 (C语言代码)浏览:603 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:537 |
C语言程序设计教程(第三版)课后习题9.4 (Java代码)浏览:1440 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:563 |
字符串比较 (C语言代码)答案错误????浏览:629 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:507 |
WU-陶陶摘苹果2 (C++代码)浏览:1011 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:890 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:608 |
1162答案错误,为什么浏览:696 |
【——】 2020-02-25 02:07:53 |
懂了懂了,这是下次循环的条件所以是>,感谢作者的分享
星辰 2020-04-12 11:21:53 |
是do....while循环。
古倪啷虚宇 2021-06-17 12:14:57 |
这跟是不是do while 循环没关系啊,循环结束的标志是他们两个的差<=1E-5,也是是说只要差>1E-5就循环,所以循环条件是fabs(x-x1)>1E-5