我的平方根代码有什么问题?

时间:2015-11-20 17:09:06

标签: 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)>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);
    }
}

3 个答案:

答案 0 :(得分:1)

在C中,abs是一个整数函数 - 将float值传递给它将导致截断,因此小值&lt; +/- 1.0将变为0.您需要使用fabs作为浮点值。变化:

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

为:

while(fabs(b*b-a)>0.1){

并添加:

#include <math.h>

靠近源文件的顶部。

答案 1 :(得分:0)

很多事情都错了:

float a, b, c,min_value, max_value;

你不应该在主函数之外声明这些变量。

b=(max_value+min_value)/2;

max_valuemin_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;

}

可能无法定义max_valuemin_value。我可以继续

如果您正在尝试实施sqrt功能,也许您应该看看其他人的代码,因为很明显您缺乏C语言的知识。

答案 2 :(得分:0)

如需将来参考,请说明您的计划正在尝试完成的内容以及发生的错误。不要试图是卑鄙的或居高临下的;只是让您了解有关问题措辞的Stack Overflow策略。

那就是说,简单地说,我注意到你也没有定义&#34; max_value&#34;或&#34; min_value&#34;在第6行中使用它们之前(将值设置为&#34; b&#34;)。另外,在main函数之外声明变量会使它们成为全局变量,如果你的变量不会在另一个程序中使用,我建议避免使用它(通过&#34; #include&#34;)。