为什么运行不起来?斐波那契数列

求菲波拉契数列的前N(小于40)项;在main函数中定义数组,用数组做函数参数。

img

因为你定义的Fibonacci()函数是返回空类型,你想表达的意思应该是通过这个函数来实现对num[]数组的计算。
但是函数就相当于是一个盒子,在一个盒子里面的定义的变量就只有这个盒子可见,所以说main()函数里面的num[]数组和你在Fibonacci()函数中定义的num[]数组其实不是同一个数组,他们只不过是有相同的名字罢了。
这里如果你想利用自己定义的函数解题的话可能会涉及到指针相关的知识,不知道同学有没有学习到指针。提前了解一下没有坏处,指针可是C语言的灵魂,有一句话叫做“没学指针,就是没学C语言”。建议自己翻翻书,或者搜搜相关的博客,当然我自己写的也有一篇关于指针的博客,欢迎观看哦 嘿嘿嘿
下面是我在你的代码上进行的修改,不出意外的话应该就是你想表达的意思,自己慢慢琢磨,指针还是有一定难度的
值得赞同的是思路没问题,剩下的就交给知识储备了,慢慢来
快期末考试了 加油加油 一起进步


#include<stdio.h>
void Fibonacci(int *num,int n);
int main()
{
    int n,num[40],i;
    num[0]=1;
    num[1]=1;
    scanf("%d",&n);
    Fibonacci(num,n);
    for(i=0;i<n;i++)
    {
        if(i%4==0)
            printf("\n");
        printf("%4d",num[i]);
    }
    printf("\n");
    return 0;
}
void Fibonacci(int *num,int n)
{
    int i;
    for(i=2;i<n;i++)
    {
        num[i]=num[i-2]+num[i-1];
    }
}

main中的num[]和函数中的num[]是2个数组,对函数中的num[]进行操作结果对main中的num没任何影响。通过参数把main中的num传给函数。


#include <stdio.h>
void Fibonacci(int n,int num[40]);

int main() {
    int n, num[40], i;
    scanf("%d", &n);
    Fibonacci(n, num);
    for ( i = 0;i<n;i++ )
    {
        if (i % 4 == 0)
            printf("\n");
        printf("%4d", num[i]);
    }
    printf("\0");
    return 0;
}

void Fibonacci(int n, int num[40])
{
    num[0] = 1;
    num[1] = 1;
    for (int i = 2; i < n; i++)
    {
        num[i] = num[i - 1] + num[i - 2];
    }
}

img

#include <QCoreApplication>
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;


void Fibonacci(int n,int num[40])
{
    int i;
    num[0]=1;
    num[1]=1;
    for(i=2;i<n;++i)
    {
        num[i]=num[i-2]+num[i-1];
    }
}

int main()
{
    int n,num[40],i;
    scanf("%d",&n);
    Fibonacci(n,num);
    for(int i=0;i<n;i++)
    {
        if(i%4==0)
            printf("\n");
        printf("%4d",num[i]);
    }
    printf("\n");

    return 0;
}

效果:

img

函数传参把n和num[n]都传进去,你写的函数里的num[n]和函数外的num[n]是两个不同的数组