我创建了一个返回平方根的算法。为什么它不起作用?

我的代码是工作。我做了一个算法,取一个数字,求出这个数字的平方根的底和顶(例如,如果我想求出5的平方根,那么底是2,顶是5。这意味着5的平方根在这些数字之间。但是当我输入像5或5这样的数字时,我的代码会循环。为什么?

int-raiz_-inteira(int-valor)
{
int impar=1,cont=0;
while(英勇>=impar)
{
英勇=英勇-英帕尔;
cont++;
impar+=2;
}
返回控制;
}
浮动汇率(浮动汇率、整数基数、整数提托)
{
浮动介质=(基础+teto)/2.0;
浮动误差=介质*介质电压;
printf(“f\n”,媒体);
如果(错误<0)
{
误差*=-1;
}
else if(erro==0)
{
返回媒体;
}
而(误差大于0.1)
{
printf(“f”,媒体);
if(媒体*媒体>勇气)
{
teto=媒体;
}
其他的
{
基本=媒体;
}
媒体=(基本+teto)/2.0;
erro=媒体*媒体勇气;
如果(错误<0)
{
误差*=-1;
}
}
}
void main()
{
内特提托,基地,拉伊兹;
printf(“键入一个数字:\n”);
scanf(“d”和“raiz”);
基数=raiz_inteira(raiz);
teto=base+1;
莱兹埃克斯塔(莱兹,基地,泰托);
}

您的代码已清理,便于阅读:

#包括<stdio.h>
内特莱兹乌因特拉(内特瓦洛尔){
int impar=1,cont=0;
while(英勇>=impar){
英勇-=顽皮;
cont++;
impar+=2;
}
返回控制;
}
浮动汇率(浮动汇率、整数基数、整数提托){
浮动介质=(基础+teto)/2.0;
浮动误差=介质*介质-电压;
printf(“f\n”,媒体);
如果(错误<0){
误差*=-1;
}
else if(erro==0){
返回媒体;
}
而(误差大于0.1){
printf(“f”,媒体);
if(媒体*媒体>勇气){
teto=媒体;
}
否则{
基本=媒体;
}
媒体=(基本+teto)/2.0;
erro=媒体*媒体-勇气;
如果(错误<0){
误差*=-1;
}
}
}
void main(){
内特提托,基地,拉伊兹;
printf(“键入一个数字:\n”);
scanf(“d”和“raiz”);
基数=raiz_inteira(raiz);
//printf(“基:%d\n”,基);
teto=base+1;
//printf(“teto:%d\n”,teto);
莱兹埃克斯塔(莱兹,基地,泰托);
}

现在,让我们运行这个,输入5

当我们开始时,raiz是5,baseraiz_inteira(5),计算结果是2teto3

因此,我们使用raiz_exata(5.0,2,3)输入raize_exata

在这个函数中,media2.5erro2.5*2.5-5.0,它等于1.25请记住,浮动并不总是精确的值。

打印2.5

1.25既不小于0,也不等于0,因此跳过条件

进入while循环,我们再次打印2.5。因为2.5*2.5大于5.0teto设置为2,因为tetoint

然后,我们将媒体更新为base+teto/2.0,这也是2.5,因此没有更改。因为没有更改,错误没有更改。因为它不小于0,所以跳过条件

下一次在while循环中循环,没有任何变化,因此它将永远循环

恐怕语言障碍使我们很难提供如何实现这一点的细节,但至少我们可以理解为什么5的输入会给您带来无限循环

此输出似乎适用于大于2的任何数字。您可能需要调查从int到float的转换是如何影响您的数学的

发表评论