從鍵盤輸入兩個整數 m 和 n,輸出斐波那契數列中落在閉區間 [m, n] 內的所有數值。斐波那契數列定義為:F(1)=1, F(2)=1, F(k)=F(k-1)+F(k-2) (k>2)。
原代碼預先生成前 100 項,再用兩個 for 循環定位區間:
for (i = 0; f[i] < m; i++); // 找到第一個 >= m 的下標
for (; f[i] < n; i++) printf("%d ", f[i]); // 輸出小於 n 的項
疑問 1:若輸入 m=1, n=3,第一個循環條件 f[0] < 1 不成立(因 f[0]=1),循環體不執行,i 保持 0,直接進入第二個循環,正常輸出 1 1 2。
疑問 2:若需包含邊界值 n(如輸出 1 1 2 3),只需將第二個循環條件改為 f[i] <= n。
#include <stdio.h>
int main() {
int f[100] = {1, 1};
for (int i = 2; i < 100; i++) f[i] = f[i-1] + f[i-2];
int m, n;
scanf("%d %d", &m, &n);
int i = 0;
while (i < 100 && f[i] < m) i++; // 定位起始位置
for (; i < 100 && f[i] <= n; i++) { // 輸出區間內數值
printf("%d ", f[i]);
}
return 0;
}
while 替代空語句 for,邏輯更清晰。i < 100 防止數組越界。<= n 滿足「包含右邊界」需求。輸入:1 3 → 輸出:1 1 2 3
輸入:4 10 → 輸出:5 8