【发布时间】:2021-12-03 23:42:59
【问题描述】:
我的代码可以正常工作。我做了一个算法,它需要一个数字,发现这个数字的平方根的底和屋顶(例如,如果我想发现 5 的平方根,那么底是 2,屋顶是 5。那表示 5 的平方根在这些数字之间。但是当我输入 5 或 5 之类的数字时,我的代码会进入循环。为什么?
int raiz_inteira(int valor)
{
int impar = 1, cont = 0;
while(valor >= impar)
{
valor = valor - impar;
cont ++;
impar+=2;
}
return cont;
}
float raiz_exata(float valor, int base, int teto)
{
float media = (base+teto)/2.0;
float erro = media*media-valor;
printf("%f\n",media);
if(erro < 0)
{
erro *=-1;
}
else if(erro == 0)
{
return media;
}
while(erro >0.1)
{
printf("%f",media);
if(media*media >valor)
{
teto = media;
}
else
{
base = media;
}
media = (base+teto)/2.0;
erro = media*media-valor;
if(erro < 0)
{
erro *=-1;
}
}
}
void main()
{
int teto, base, raiz;
printf("Type a number:\n");
scanf("%d",&raiz);
base = raiz_inteira(raiz);
teto = base+1;
raiz_exata(raiz,base,teto);
}
【问题讨论】:
-
遵循逻辑。当你输入 5 时你的程序会发生什么?
-
如果你把代码翻译成英文会更容易。我不知道 raiz_exata、teto 或 media 应该是什么意思。
-
“当我输入 5 或 5 之类的数字时” - 5 和 5 有什么区别?
-
@klutt 很可能 teto 是头部或上限,base 是最小界限,media 是平均值或平均值。
标签: c square-root