C 我的平方根代码怎么了?
这个代码有什么问题?我正在同时学习Python和C。Python上类似的代码可以很好地工作,但我不明白为什么这里不工作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)>
#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>