一只超大的甲鱼 发表于 2022-12-23 17:03:59

C语言作业求助

(4)使用函数输出指定范围内的 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。】


输入输出示例(括号内为说明文字)
20      ( m= 20)
100   ( n = 100)

21   34   55   89         (20到100之间的Fibonacci数)

jackz007 发表于 2022-12-23 19:18:15

本帖最后由 jackz007 于 2022-12-23 19:20 编辑

#include <stdio.h>

int fib(int n)
{
      int a , b , c , i            ;
      for(i = 3 , a = b = 1 ; i < n + 1 ; i ++) {
                c = a + b            ;
                a = b                  ;
                b = c                  ;
      }
      return b                     ;
}

int main(void)
{
      int c , i , m , n , x          ;
      scanf("%d%d" , & m , & n)      ;
      for(i = 1 ; fib(i) < m ; i ++) ;
      for(c = 0 ; (x = fib(i)) < n + 1 ; i ++) {
                if(c) printf(" ")      ;   
                printf("%d" , x)       ;
                c ++                   ;
      }
      printf("\n")                   ;
}
      编译运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
20 100
21 34 55 89

D:\\C>

jhq999 发表于 2022-12-23 19:46:18

本帖最后由 jhq999 于 2022-12-23 20:10 编辑

#include <stdio.h>
#include <math.h>
int fib(int n )
{

    double s=sqrt(5);

    return (int)((pow(1.0+s,n)-pow(1.0-s,n)))/(s*pow(2,n))+1;//过19就溢出完蛋了
int main()
{
    int i=0,a,m,n;
    scanf("%d%d",&m,&n);
    i=1;
    while((a=fib(i++))<=n)
          if(a>=m)printf("%d",a);
    return 0;
}
页: [1]
查看完整版本: C语言作业求助