漫长梦 2022-04-04 22:55 采纳率: 89.5%
浏览 51
已结题

c语言while循环语句

编程:s=1/1-1/(1+2)+1/(1+2+3)-1/(1+2+3+4)……+1/(1+2+……+n),循环直到某一项的值小于1.0e-6。
这个程序应该怎么写,求高人指点,谢谢!!!

  • 写回答

3条回答 默认 最新

  • lcg_magic 2022-04-05 00:13
    关注

    这道题,其实就是观察规律。
    每一项有两点:符号和分数。
    符号:

    项数符号
    第 1 项+
    第 2 项-
    第 3 项+
    第 4 项-
    第 5 项+
    …………

    所以符号是正(+)、负(-)交替。只需要设置一个变量 sign,初始值为 -1,然后每次加法求和之前,都乘以 -1,那么第 1 项就是 +1,第 2 项就是 -1,如此。

    每一项是一个分数,分子永远为 1,那么就看分母了。
    观察分母:

    项数分母
    第 1 项1
    第 2 项1+ 2
    第 3 项1 + 2 + 3
    第 4 项1+ 2 + 3 + 4
    …………

    分母是 1+2+...+当前项的编号,也就是说分母为 (1+2+...+i)求和,如果是第 i 项的话。

    停止条件为这个分数小于 1.0e-6 就行。

    #include <iostream>
    using namespace std;
    
    int main() {
        
        // 符号
        int sign = -1;
        // 退出循环标准
        float epsilon = 1.0e-6;
        // 所有项的和
        float sum = 0.0;
        // 循环次数
        int i = 1;
        // 当前项
        float current = 1.0;
        
        // 如果当前项小于设置的 epsilon,则跳出循环
        while(current > epsilon)
        {
            // 每次加之前,需要确定符号,第一项为 “+”,第二项为 “-”,循环往复
            sign *= -1;
            // 累加和
            sum += sign * current;
            // 下一项
            ++i;
            current = 1.0 / ((1 + i) * i / 2);
        }
        cout  << current << endl;
        cout  << sum << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 修改了问题 4月4日
  • 创建了问题 4月4日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失