int number = 1, value = 0, sign = 1;
while (number < 101) {
value += number;
number += 2;
sign = -sign;
number *= sign; // 關鍵錯誤行
}
printf("%d", value);
sign 在 1 和 -1 之間翻轉。number *= sign 導致 number 在正負值間跳躍:number 始終在 -3, -1, 1 之間循環,**永遠小於 101**,循環條件永真。數列規律:奇數項為正,偶數項為負,絕對值為等差數列 1,3,5...101。
int total = 1; // 首項
int num = 1;
while (num < 101) {
num += 2; // 3
total -= num; // -3
num += 2; // 5
total += num; // +5
// 循環直到 num >= 101
}
printf("%d", total);
int sum = 0;
for (int i = 1, sign = 1; i <= 101; i += 2, sign = -sign) {
sum += sign * i;
}
printf("%d", sum);
數列為等差數列分組:(1-3) + (5-7) + ... + (97-99) + 101
每組和為 -2,共 25 組(1 到 99 共 50 項),最後加 101:
sum = 25 * (-2) + 101 = 51
printf("num=%d, sign=%d, total=%d\n", number, sign, value);這道題精準暴露了初學者對循環控制變量管理的薄弱環節,修正後邏輯清晰且高效。