【问题标题】:Square root program in C without using sqrt function [closed]C中的平方根程序而不使用sqrt函数[关闭]
【发布时间】:2014-02-18 15:28:11
【问题描述】:

我正在尝试用 C 语言编写一个程序,以使用公式 NG = 0.5(LG + N/LG) 找到数字的近似平方根。到目前为止,我有:

#include <stdio.h> 
#include <math.h> 
int main(){
    double n;
    double LG=1;
    double NG;
    printf("Enter number");
    scanf_s("%lf",&n);
    do{
        NG=(.5*(LG+n/LG));
        LG=NG;
    }while((NG*NG-n)<.005);
    printf("The root is %lf",NG);
}

这种结构在 java 中运行良好,但循环似乎没有在 C 中执行。

感谢您的建议。

【问题讨论】:

  • 循环内的语句不应该是NG=(.5*(LG+n/LG));吗?
  • 你有没有把它放在调试器中,设置断点并单步执行代码?如果没有,为什么不呢?
  • 找到一个你得到错误答案的案例。写下在一张纸上你认为你的程序应该用这个数字做什么。现在单步调试调试器中的代码,并在您的程序每次执行您期望它执行的操作时进行检查。它做的第一件事是你不希望它做的,这就是错误所在
  • 这个问题似乎是题外话,因为 StackOverflow 不是调试错误代码的服务。
  • @Yu Hao printf()double 格式说明符可以使用"%f""%lf"l 对后面的 a, A, e, E, f, F, g, or G 转换说明符没有影响。

标签: c while-loop square-root


【解决方案1】:

您不想在 NG*NG-n 小于 0.005 时循环。当NG*NGn 的距离超出预期时,您想循环。

NG*NGn 之间的距离是fabs(NG*NG - n)

【讨论】:

  • 哦,哎呀,你是对的,谢谢。现在它正在返回一个值,但它是一个不正确的值。例如输入 49 返回 25,输入 36 返回 18.5。
  • @user3221816 判断可能是相反的。使用}while(fabs(NG*NG-n)&gt;.005);
  • @user3221816:不使用fabs 并不是唯一的错误。想想 while 部分。您正在循环 while 某事是真的。循环while数字太远,而不是数字太近。
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多