c - 基本C程序,巴比伦算法

标签 c algorithm math integer double

我是 C 语言的新手,正在尝试完成我们在大学获得的实验室教程。

我们被要求执行以下操作:

任务 1。 计算数字 n 的平方根的巴比伦算法如下: 1. 猜猜答案(您可以选择 n/2 作为您的初始猜测)。

  1. 计算 r = n/猜测
  2. 设置猜测=(猜测+r)/2
  3. 返回第 2 步进行必要的多次迭代。步骤 2 和 3 越多 重复,接近的猜测将成为 n 的平方根。

编写一个程序,输入一个整数 n,遍历巴比伦算法 五次,并将答案输出为小数点后两位。你的回答会 对于较小的 n 值最准确。

这是我写的:

#include <stdio.h>
#include <math.h>

int n;

main(void){
    printf("Enter a value for n: ");
    scanf("%d",&n);
    double guess = n / 2;
    for (int i = 0; i < 5; i++) {
        double r = n / guess;
        double guess = (guess + r) / 2;
    }
    printf("%d",guess);
}

我哪里做错了?它吐出荒谬的结果;例如,如果我输入“4”作为 n,答案应该在“2”左右,但每次都会给出不同的巨大结果。

最佳答案

另一个解决方案是:

guess = guess / 2.0; 

这将“强制”进行浮点运算。

并且变量 guess 已经在范围内。你不能重新声明它(就像你在循环中所做的那样)。您只能为其设置一个新值。

并且您还需要将 printf 更改为:

printf("%f",guess);

查看此链接以获取有关 printf 格式化程序的更多信息:

http://www.cplusplus.com/reference/cstdio/printf/

关于c - 基本C程序,巴比伦算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961868/

相关文章:

c - 如何读取未知文件中的数字、字母和符号?

c - 这个条件是否足以进行乘法溢出检查

c - 如何在 c 中构建查询字符串?

C++ - 通过 Boost 进行反向替换 - 错误的索引错误

algorithm - 最大最小距离感中的最佳子样本

python - 求和的指数

c++ - 交换链表中的相邻节点

algorithm - 在SSE/AVX中选择唯一/重复数据删除

从离散分布生成随机数的算法?

java - 计算矩阵平方行列式