折折星 发表于 2022-9-28 22:33:29

请大佬帮忙对我这道题做出改正

我的代码是:
#include<stdio.h>

int main()
{
      int n;

      printf("你想知道斐波那契数列前几项?(1<= n <=46)");
      scanf("%d", &n);
      int i,j;
      int num, sum = 0;
      num = 1;
      int flag = 0;

      for (i = 1;i <= ((n % 5) + 1);i++)
      {
                for(j = 1;j <= 5;j++)
                {
                        sum += num;
                        num = sum;
                        printf("%d", num);
                        flag++;
                }
                putchar('\n');
      }

      return 0;
}
"exm1.c" 42L, 392C                                                                         18,1-8       顶端

人造人 发表于 2022-9-28 22:51:57

#include <stdio.h>

int main() {
    printf("你想知道斐波那契数列前几项?(1<= n <=46): ");
    int n;
    scanf("%d", &n);
    int num;
    num = 1;
    num = 1;
    for(size_t i = 2; i < n; ++i) {
      num = num + num;
    }
    for(size_t i = 0; i < n; ++i) {
      if(i != 0 && i % 5 == 0) puts("");
      printf("%d ", num);
    }
    puts("");
    return 0;
}

jackz007 发表于 2022-9-28 22:53:55

本帖最后由 jackz007 于 2022-9-28 22:58 编辑

#include <stdio.h>

int fib(int n)
{
      return (n < 3) ? 1 : fib(n - 1) + fib(n - 2)         ;
}

int main(void)
{
      int d , i , n                                    ;
      printf("你想知道斐波那契数列前几项 (1 <= n <= 46) : ") ;
      scanf("%d" , & n)                                    ;
      for(i = 1 ; i < n + 1 ; i ++) d = fib(i)      ;
      for(i = 0 ; i < n ; i ++) {
                if(i % 5) printf(" , " , d)               ;
                if(i && ! (i % 5)) printf("\n")                ;
                printf("%10d" , d)                        ;
      }
      printf("\n")                                           ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
你想知道斐波那契数列前几项 (1 <= n <= 46) : 35
         1 ,          1 ,          2 ,          3 ,          5
         8 ,         13 ,         21 ,         34 ,         55
      89 ,      144 ,      233 ,      377 ,      610
       987 ,       1597 ,       2584 ,       4181 ,       6765
   10946 ,      17711 ,      28657 ,      46368 ,      75025
    121393 ,   196418 ,   317811 ,   514229 ,   832040
   1346269 ,    2178309 ,    3524578 ,    5702887 ,    9227465

D:\\C>

折折星 发表于 2022-9-28 23:05:16

人造人 发表于 2022-9-28 22:51


大佬,还得是你

人造人 发表于 2022-9-28 23:07:10

折折星 发表于 2022-9-28 23:05
大佬,还得是你

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main() {
    printf("你想知道斐波那契数列前几项?(1<= n <=46): ");
    size_t n;
    scanf("%lu", &n);
    if(n < 1 || n > 46) {fputs("输入错误!\n", stderr); exit(-EINVAL);}
    size_t num = {0, 1, 1};
    for(size_t i = 0; i < n; ++i) {
      num = num;
      num = num;
      num = num + num;
      if(i != 0 && i % 5 == 0) puts("");
      printf("%lu ", num);
    }
    puts("");
    return 0;
}

折折星 发表于 2022-9-28 23:09:40

人造人 发表于 2022-9-28 23:07


雾草这个也得劲{:10_257:}

折折星 发表于 2022-9-28 23:10:21

人造人 发表于 2022-9-28 23:07


大佬为什么习惯用++i不用i++呀

人造人 发表于 2022-9-28 23:11:00

折折星 发表于 2022-9-28 23:09
雾草这个也得劲

改一改,我查了一下,size_t 对应的是 %zu
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main() {
    printf("你想知道斐波那契数列前几项?(1<= n <=46): ");
    size_t n;
    scanf("%zu", &n);
    if(n < 1 || n > 46) {fputs("输入错误!\n", stderr); exit(-EINVAL);}
    size_t num = {0, 1, 1};
    for(size_t i = 0; i < n; ++i) {
      num = num;
      num = num;
      num = num + num;
      if(i != 0 && i % 5 == 0) puts("");
      printf("%zu ", num);
    }
    puts("");
    return 0;
}

人造人 发表于 2022-9-28 23:16:45

折折星 发表于 2022-9-28 23:10
大佬为什么习惯用++i不用i++呀

这个习惯来自于C++
在C语言中 i++ 和 ++i 没有区别
在C++中,如果 i 是一个 class 的话,一般来说 ++i 的效率要高于 i++,如果 i 不是 class 的话,和C语言中的一样

折折星 发表于 2022-9-28 23:36:12

人造人 发表于 2022-9-28 23:16
这个习惯来自于C++
在C语言中 i++ 和 ++i 没有区别
在C++中,如果 i 是一个 class 的话,一般来说 ++i...

哦哦哦好,我明白了!
页: [1]
查看完整版本: 请大佬帮忙对我这道题做出改正