天天看點

浙大版《C語言程式設計(第3版)》題目集 習題6-4 使用函數輸出指定範圍内的Fibonacci數

習題6-4 使用函數輸出指定範圍内的Fibonacci數

本題要求實作一個計算Fibonacci數的簡單函數,并利用其實作另一個函數,輸出兩正整數m和n(0<m≤n≤10000)之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和(最開始兩項均定義為1)的數列。

函數接口定義:

int fib( int n );

void PrintFN( int m, int n );

其中函數fib須傳回第n項Fibonacci數;函數PrintFN要在一行中輸出給定範圍[m, n]内的所有Fibonacci數,相鄰數字間有一個空格,行末不得有多餘空格。如果給定區間内沒有Fibonacci數,則輸出一行“No Fibonacci number”。

裁判測試程式樣例:

#include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );
	
int main()
{
    int m, n, t;

    scanf("%d %d %d", &m, &n, &t);
    printf("fib(%d) = %d\n", t, fib(t));
    PrintFN(m, n);

    return 0;
}

/* 你的代碼将被嵌在這裡 */           

複制

輸入樣例1:

20 100 7

輸出樣例1:

fib(7) = 13

21 34 55 89

輸入樣例2:

2000 2500 8

輸出樣例2:

fib(8) = 21

No Fibonacci number

代碼:

int fib( int n )
{
    int a=1;
    int b=1;
    if(n==1||n==2) return 1;
    else
    {
       int c;
       int temp=2;
       while(1)
        {
          c=a+b;
          temp++;
          a=b;
          b=c;
          if(temp>=n) break;
        }
        return c;
    }

}
void PrintFN( int m, int n )
{
    int i;
    int arr[100];
    int tt=0;
    for(i=1;;i++)
    {
        int temp=fib(i);
        if(temp>=m&&temp<=n)
        {
           arr[tt++]=temp;
        }
        if(temp>n) break;
    }
    if(tt==0) printf("No Fibonacci number\n");
    else
    {
        for(i=0;i<tt;i++)
         {
            if(i==tt-1) printf("%d\n",arr[i]);
            else printf("%d ",arr[i]);
         }
    }
}           

複制