鱼C论坛

 找回密码
 立即注册
查看: 2597|回复: 9

[已解决]请大佬帮忙对我这道题做出改正

[复制链接]
发表于 2022-9-28 22:33:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{
        int n;

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

        for (i = 1;i <= ((n % 5) + 1);i++)
        {
                for(j = 1;j <= 5;j++)
                {
                        sum += num;
                        num[flag] = 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[46];
    num[0] = 1;
    num[1] = 1;
    for(size_t i = 2; i < n; ++i) {
        num[i] = num[i - 1] + num[i - 2];
    }
    for(size_t i = 0; i < n; ++i) {
        if(i != 0 && i % 5 == 0) puts("");
        printf("%d ", num[i]);
    }
    puts("");
    return 0;
}

是这道题

是这道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-28 22:51:57 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int main() {
    printf("你想知道斐波那契数列前几项?(1<= n <=46): ");
    int n;
    scanf("%d", &n);
    int num[46];
    num[0] = 1;
    num[1] = 1;
    for(size_t i = 2; i < n; ++i) {
        num[i] = num[i - 1] + num[i - 2];
    }
    for(size_t i = 0; i < n; ++i) {
        if(i != 0 && i % 5 == 0) puts("");
        printf("%d ", num[i]);
    }
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[50] , i , n                                      ;
        printf("你想知道斐波那契数列前几项 (1 <= n <= 46) : ") ;
        scanf("%d" , & n)                                      ;
        for(i = 1 ; i < n + 1 ; i ++) d[i - 1] = fib(i)        ;
        for(i = 0 ; i < n ; i ++) {
                if(i % 5) printf(" , " , d[i])                 ;
                if(i && ! (i % 5)) printf("\n")                ;
                printf("%10d" , d[i])                          ;
        }
        printf("\n")                                           ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\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:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-28 23:05:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-28 23:07:10 | 显示全部楼层
#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[3] = {0, 1, 1};
    for(size_t i = 0; i < n; ++i) {
        num[0] = num[1];
        num[1] = num[2];
        num[2] = num[0] + num[1];
        if(i != 0 && i % 5 == 0) puts("");
        printf("%lu ", num[0]);
    }
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-28 23:09:40 | 显示全部楼层

雾草这个也得劲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-28 23:10:21 | 显示全部楼层

大佬为什么习惯用++i不用i++呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-28 23:11:00 | 显示全部楼层

改一改,我查了一下,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[3] = {0, 1, 1};
    for(size_t i = 0; i < n; ++i) {
        num[0] = num[1];
        num[1] = num[2];
        num[2] = num[0] + num[1];
        if(i != 0 && i % 5 == 0) puts("");
        printf("%zu ", num[0]);
    }
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语言中的一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦哦好,我明白了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 23:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表