You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C语言打印并计算调和级数Sn=1/n+1/(n-1)+…+1的总和

原参考代码的问题

  • 循环遍历顺序错误:需求是从1/n递减到1/1累加,原代码是从1/1递增到1/n,表达式输出顺序不符合要求
  • 求和计算逻辑错误:sum = sum + 1/i + 1/i-1属于完全错误的计算规则,而且1/i是整数除法,i大于1时结果恒为0,无法得到正确的浮点累加结果
  • 输出格式不规范:表达式结束的等号后没有直接输出结果,和需求的“打印完整表达式+输出总和”要求不符

正确实现代码

#include <stdio.h>

int main()
{
    int i, num;
    float sum = 0.0f;

    printf("Enter any number: ");
    scanf("%d", &num);

    // 从n倒序遍历到1
    for(i = num; i >= 1; i--)
    {
        // 累加:转浮点运算避免整数除法误差
        sum += 1.0f / i;
        // 打印表达式部分
        if(i == num) {
            if(i == 1) {
                // 输入为1的特殊场景处理
                printf("1 = ");
            } else {
                printf("1/%d", i);
            }
        } else if(i == 1) {
            // 末项为1,末尾加等号
            printf(" + 1 = ");
        } else {
            // 中间项格式
            printf(" + 1/%d", i);
        }
    }

    // 输出累加结果,示例保留4位小数,可按需调整精度
    printf("%.4f", sum);
    return 0;
}

功能验证说明

输入正整数n后,会完整输出1/n + 1/(n-1) + ... + 1 = 计算结果的规范表达式,累加结果精度可通过调整printf的格式化参数自定义,兼容所有正整数输入场景。

内容的提问来源于stack exchange,提问作者newton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:03