c语言 迭代法求正数的平方根
时间: 2024-05-29 22:11:55 浏览: 72
#include <stdio.h>
int main() {
double x, y, e = 0.00001; // e为误差,可以根据需要调整
printf("请输入一个正数:");
scanf("%lf", &x);
y = x; // 初始化y为x,作为迭代的起点
while (y * y - x > e || x - y * y > e) { // 当误差小于e时退出循环
y = (y + x / y) / 2; // 迭代公式
}
printf("%g的平方根是%g\n", x, y);
return 0;
}
相关问题
用c语言迭代法求平方根
在C语言中,可以使用牛顿迭代法来近似计算一个数的平方根。这种方法基于这样一个事实,即对于任意非负实数a,如果x_n是a的一个近似值,那么下一个更好的近似值x_{n+1}可以通过下面的公式得到:
x_{n+1} = (x_n + a / x_n) / 2
这个过程会一直迭代,直到满足精度要求为止,比如当x_{n+1} - x_n < ε(其中ε是一个很小的正数,通常取double类型的最小可表示差异)。以下是简单的C代码实现:
```c
#include <stdio.h>
#include <math.h> // 包含fabs函数用于计算绝对值
#include <stdbool.h>
double sqrt_iterative(double num, double epsilon) {
if (num < 0) {
printf("Error: Square root of negative number is undefined.\n");
return -1; // 或者抛出异常
}
double guess = num / 2; // 初始猜测值为数的一半
while (fabs(guess * guess - num) > epsilon) { // 检查是否达到精度
guess = (guess + num / guess) / 2;
}
return guess;
}
int main() {
double input_num;
printf("Enter a non-negative number for square root: ");
scanf("%lf", &input_num);
double result = sqrt_iterative(input_num, 1e-9); // 设置精度为双精度的千万分之一
if (result != -1) {
printf("Square root of %.2lf is %.2lf\n", input_num, result);
}
return 0;
}
```
在这个代码里,用户输入一个非负数,程序通过迭代求得其平方根并显示结果。如果输入的是负数,函数将返回错误信息。
迭代法求正数的平方根c语言
迭代法求解正数的平方根通常使用牛顿迭代公式,这种方法在C语言中可以这样实现:
```c
#include <stdio.h>
#include <math.h>
double sqrt_iterative(double x, double epsilon = 1e-6) {
double guess = x / 2; // 初始猜测值
while (fabs(guess * guess - x) > epsilon) { // 检查是否接近实际值
guess = (guess + x / guess) / 2; // 根据牛顿迭代公式更新猜测值
}
return guess;
}
int main() {
double number;
printf("请输入一个正数:");
scanf("%lf", &number);
if (number >= 0) {
double result = sqrt_iterative(number);
printf("该数的平方根约为 %.4f\n", result);
} else {
printf("输入的是负数,无法计算平方根。\n");
}
return 0;
}
```
在这个程序中,`sqrt_iterative`函数通过不断逼近的方式计算给定正数的平方根,直到两次迭代结果之间的差小于预设的精度值(epsilon)。`main`函数中用户输入一个数,然后调用这个函数并打印结果。
阅读全文