C语言计算连续自然数差值异常:1-2-3-4-5得-15却应为-13
问题排查与解决
你的代码问题出在初始值设置和循环逻辑上:
- 你把
disp初始化为0,相当于计算的是0-1-2-3-4-5,结果自然是-15,但实际需求是从第一个数开始做减法,即1-2-3-4-5。 - 循环里把第一个数也执行了
disp = disp - i操作,这相当于多减了一次第一个数。
正确解法
调整初始值和循环范围:
- 将
disp的初始值设为输入的最小数i,因为它是减法的起始被减数。 - 循环从
i+1开始遍历到j,每次用disp减去当前的数。 - 输出时先打印第一个数,再在循环里打印减号和后续数字。
修正后的代码:
#include <stdio.h> int main() { int i, j, disp; printf("Input smallest number: "); scanf("%d", &i); printf("Input highest number: "); scanf("%d", &j); disp = i; // 初始值设为第一个数 printf("%d", i); // 先打印第一个数 // 从第二个数开始遍历 for (int k = i + 1; k <= j; k++) { disp -= k; printf(" - %d", k); } printf(" = %d", disp); return 0; }
验证结果
输入最小数1,最大数5时,计算逻辑为1-2-3-4-5 = 1 - (2+3+4+5) = 1-14 = -13,符合预期结果。
内容的提问来源于stack exchange,提问作者account account
相关产品推荐
相关产品推荐

