鱼C论坛

 找回密码
 立即注册
查看: 506|回复: 3

[已解决]C++程序

[复制链接]
回帖奖励 6 鱼币 回复本帖可获得 3 鱼币奖励! 每人限 1 次(中奖概率 30%)
发表于 2019-9-26 17:13:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 乔宽 于 2019-9-26 17:22 编辑

/*
  12.用于计算数字n的平方根的巴比伦算法如下:
    1) 先猜一个答案guess(可以将n/2作为第一个答案)
    2)计算r = n/guess
    3)令guess= (guess + r)/ 2
    4)如有必要返回第2步重复多次。 步骤2和步骤3的重复次数越多,guess就越接近n的平方根。
     写一个程序,输入整数作为n的值,重复执行巴比伦算法,直到guess与前一个guess的误差在1%范围内,将答案作为一个double输出
*/
#include <iostream>

using namespace std;

int main()
{
    char is_continue;//判断程序是否继续运行
    double n;
    double answer1;
    double answer2;
    double guess;
    double r;
    int count = 0;
    do
    {
        cout << "输入要计算平方根的数:" << endl;
        cin >> n;
        guess = n/2;

    do
    {
         answer1 = guess;
        r = n/guess;
        guess = (guess + r)/2;
        answer2 = guess;
        count++;
    }while((answer1 - answer2) > ( 0.01*answer1 ));

    cout << n << "平方根是" << guess << endl;
    cout << "总共循环了多少" << count << "次" << endl;
    cout << "继续吗(输入Y继续,输入其它字符退出) " << endl;
    cin >> is_continue;
    }while(is_continue == 'y'|| is_continue == 'Y');
    return 0;
}
题上不是说直到guess与前一个guess的误差在1%范围内吗?那为什么是while((answer1 - answer2) > (answer1 * 0.01));而不是<。而且用 > 计算了一下答案也不对,并且<也运行不了。
最佳答案
2019-9-26 17:26:55
本帖最后由 jackz007 于 2019-9-26 17:29 编辑
while ((answer1 - answer2) > (answer1 * 0.01)) ;
        这句的逻辑是说,如果 (answer1 - answer2) > (answer1 * 0.01) 为 true,那就继续循环,而到了结束循环的时候,自然就是这个条件不成立的时候,也就是说,是满足 (answer1 - answer2) <= (answer1 * 0.01) 条件的时候。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-26 17:26:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-9-26 17:29 编辑
while ((answer1 - answer2) > (answer1 * 0.01)) ;
        这句的逻辑是说,如果 (answer1 - answer2) > (answer1 * 0.01) 为 true,那就继续循环,而到了结束循环的时候,自然就是这个条件不成立的时候,也就是说,是满足 (answer1 - answer2) <= (answer1 * 0.01) 条件的时候。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-26 17:31:23 | 显示全部楼层
本帖最后由 superbe 于 2019-9-29 13:17 编辑

do while是先执行循环,然后判断如果条件成立继续循环,如果不成立则结束。求平方根的算法是只要误差比规定的大,就继续循环,所以应该用>啊。
把这行加个fabs取绝对值就正确了  while(fabs(answer2 - answer1) > (answer1 * 0.01));



,提交上去才发现大神已经回答过了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-3 15:56:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表