原题链接:[编程入门]迭代法求平方根
解题思路以及注意事项:
迭代法迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。
大家要有灵活运用迭代法思维,本题就是先让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分
93 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#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; } 这个答案错误,请问有各位大佬看出是哪里错了吗#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,哪位大佬可以帮忙找错误吗