如何使用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
相关产品推荐
相关产品推荐

