C 我的平方根代码怎么了?

C 我的平方根代码怎么了?,c,C,这个代码有什么问题?我正在同时学习Python和C。Python上类似的代码可以很好地工作,但我不明白为什么这里不工作 #include <stdio.h> float a, b, c,min_value, max_value; int main(){ printf("Enter a number here:"); scanf("%f",&a); b=(max_value+min_value)/2; while(abs(b*b-a)>

这个代码有什么问题?我正在同时学习Python和C。Python上类似的代码可以很好地工作,但我不明白为什么这里不工作

#include <stdio.h>

float a, b, c,min_value, max_value;

int main(){
    printf("Enter a number here:");
    scanf("%f",&a);
    b=(max_value+min_value)/2;
    while(abs(b*b-a)>0.1){
        if (b*b>a){
            max_value=b;
            b=(max_value+min_value)/2;
        }
        else if(b*b<a){
            min_value=a;
            b=(max_value+min_value)/2;
        }
        printf("the square root of the number is %f",b);
    }
}
#包括
浮动a、b、c、最小值、最大值;
int main(){
printf(“在此处输入一个数字:”);
scanf(“%f”、&a);
b=(最大值+最小值)/2;
而(abs(b*b-a)>0.1){
如果(b*b>a){
最大值=b;
b=(最大值+最小值)/2;
}

否则,如果(b*b很多事情都错了:

float a, b, c,min_value, max_value;
您不应该在main函数之外声明这些变量

b=(max_value+min_value)/2;
max\u value
min\u value
未定义,您希望在这里看到什么

if (b*b>a){
    max_value=b;
    b=(max_value+min_value)/2;
}
else if(b*b<a){
        min_value=a;
        b=(max_value+min_value)/2;

}
if(b*b>a){
最大值=b;
b=(最大值+最小值)/2;
}

否则,如果(b*b在C中,
abs
是一个整数函数,则将
float
值传递给它将导致截断,因此较小的值<+/-1.0将变为0。您需要对浮点值使用
fabs
。更改:

while(abs(b*b-a)>0.1){
致:

并加上:

#include <math.h>
#包括

在源文件顶部附近。

对于将来的参考,请说明您的程序正在尝试完成什么以及发生了什么错误。不要试图卑鄙或居高临下;只需在问题措辞上向您提供堆栈溢出策略的提示


也就是说,简单地看一下,我确实注意到,在第6行中使用“max_value”或“min_value”之前,您也没有定义它们(您将值设置为“b”)。此外,在main函数之外声明变量会使它们成为全局变量,如果您的变量不打算在其他程序中使用,我建议避免使用这些变量(通过“#include”)。

由于调试帮助而投票关闭。“它不工作”不是错误描述。您期望什么?会发生什么?您需要将最小值和最大值初始化为某个值(零除外).OP还需要包含相应的头文件。全局文件被初始化为0,因此最小值和最大值被初始化。我同意,此变量不应与“…在使用它们之前不定义“最大值”或“最小值”一致…”在代码中定义的是
浮点a、b、c、min_值、max_值;
。作为全局变量,它们在程序运行时被初始化。啊,是的,捕捉得很好。如果我记得它们的初始化值确实为NULL。我想它们是用零位模式初始化的。在大多数机器上,对于
浮点
0.0f
e> 。我会使用
min\u value=0.0;max\u value=FLT\u max;“
#include <math.h>