首页 > 试题广场 >

使用函数输出指定范围内的Fibonacci数:输人两个正整数

[问答题]

使用函数输出指定范围内的Fibonacci数:输人两个正整数m和n(1≤m,n≤10 000),输出m~n之间所有的Fibonacci数。Fibonacci序列(第1项起):1 1 2 3 5 8 13 21……要求定义并调用函数fib(n),它它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。试编写相应程序。

#include<stdio.h>
int fib(int n);
int main(){
    int m,n,j=1,fib_j,cnt=0;    //fib_j为第j项Fibonacci数

    printf("input m and n: ");
    scanf("%d %d",&m,&n);

    if(m>=1&&n<=10000){
        fib_j = fib(j);
        while(m>fib_j){     //找到m~n范围内的第一个Fibonacci数,因为m不一定是1
            j++;
            fib_j = fib(j);
        }
        while(fib_j<=n){
            cnt++;
            printf("%6d",fib_j);    //将m~n内的Fibonacci数输出
            if(cnt%10 == 0)
                printf("\n");

            j++;
            fib_j = fib(j);     //更新m~n内的Fibonacci数
        }
    }else{
        printf("invalid value\n");
    }

    return 0;
}

//返回第n项Fibonacci数
int fib(int n){
    int x1=1,x2=1,x3,cnt=2; //计算产生的第一个数是Fibonacci的第三项,所以计数从2开始
    //Fibonacci数列前两项为1,从第三项起每一项是前两项的和

    if(n==1||n==2)
        return 1;       //Fibonacci数列前两项为1
    if(n>2){
        while(cnt<n){
            x3 = x1+x2; //从第三项起每一项是前两项的和
            x1 = x2;    //更新x1 x2的值
            x2 = x3;

            cnt++;
        }
        return x3;
    }
}

发表于 2022-01-19 12:18:59 回复(0)

#include<stdio.h>

int fibonacci(int n)

{

    int i,a=1,b=1,c=1,ri;

    for (i = 1; i <= n - 2; i++)

    {

         c = a + b;

         a = b;

         b = c;

    }

    ri = c;

    return ri;

}

int main(void)

{

    int m, n,i;

    printf("please input m,n(1mn10 000");

    scanf("%d,%d", &m, &n);

    for (i = m; i <= n; i++)

         if (fibonacci(i) <= n)

             printf("%d,", fibonacci(i));

         else break;

    return 0;

}

发表于 2018-11-04 22:01:19 回复(1)