用c语言打码打出来并且头文件要包含math,使用scanf和float不使用sqrt函数
时间: 2024-12-09 15:16:25 浏览: 15
如果你想在C语言中使用`scanf`输入数值并进行浮点数计算,但又不想直接使用`sqrt`函数,你可以先通过公式 `(b * b - 4 * a * c) >= 0` 判断判别式是否非负,然后利用牛顿迭代法(Newton-Raphson method)近似计算平方根。以下是代码示例:
```c
#include <stdio.h>
#include <math.h> // 不使用此行,因为我们不直接使用sqrt
// 使用牛顿迭代法计算近似的平方根
float sqrt_newton(float num, float guess, int max_iter, float epsilon) {
for (int i = 0; i < max_iter && abs(num - guess * guess) > epsilon; ++i) {
guess = (guess + num / guess) / 2;
}
return guess;
}
int main() {
float a, b, c;
printf("请输入系数a, b, 和 c: ");
scanf("%f %f %f", &a, &b, &c);
float discriminant = b * b - 4 * a * c;
if (discriminant < 0) {
printf("方程无实根。\n");
} else if (discriminant == 0) { // 只有一个实根
float root = -b / (2 * a);
printf("方程有唯一实根: %.2f\n", root);
} else { // 有两个实根
float root1 = (-b + sqrt_newton(discriminant, discriminant, 50, 1e-6)) / (2 * a); // 注意这里的sqrt替换为迭代求得的值
float root2 = (-b - sqrt_newton(discriminant, discriminant, 50, 1e-6)) / (2 * a);
printf("方程有两个实根: %.2f 和 %.2f\n", root1, root2);
}
return 0;
}
```
阅读全文