首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言實現:輸出指定區間 [m, n] 內的斐波那契數

     編輯:程式設計疑難解答

題目需求

從鍵盤輸入兩個整數 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;
}

關鍵改進點

  1. 使用 while 替代空語句 for,邏輯更清晰。
  2. 循環條件加上 i < 100 防止數組越界。
  3. 輸出條件改為 <= n 滿足「包含右邊界」需求。

輸出示例

輸入:1 3 → 輸出:1 1 2 3
輸入:4 10 → 輸出:5 8

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved