C++ 打印斐波那契序列

C++ 打印斐波那契序列,c++,fibonacci,allocation,C++,Fibonacci,Allocation,我用斐波那契数列打印矩阵时遇到问题。 当我启动程序时,它会打印一个包含整数和剩余零的序列。我想要一个北方,能够得出结论 顺序打印功能: void printArray(int _A[], int _sz) { _A = new int(_sz); cout << ">>> [ "; for (int i = 0; i <= _sz; i++) { cout << _A[i] << "

我用斐波那契数列打印矩阵时遇到问题。 当我启动程序时,它会打印一个包含整数和剩余零的序列。我想要一个北方,能够得出结论

顺序打印功能:

void printArray(int _A[], int _sz)
{
    _A = new int(_sz);


    cout << ">>> [ ";
    for (int i = 0; i <= _sz; i++)
    {
        cout << _A[i] << " ";
    }
    cout << " ]\n";

}
用于计算序列的函数:

int fib(int _limit, int *_A)
{
    int count = 0;
    int fib0 = 1;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        fib2 = fib0 + fib1;

        count++;  

        fib0 = fib1;
        fib1 = fib2;
    }

    _A = new int(count);
    for (int i = 0; i < count; i++)
    {
        cout << _A[i] << " ";
    }

    return count;
}
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::vector;

void printArray(const std::vector<int>& A)
{
    cout << ">>> [ ";
    for (int i : A)
    {
        cout << i << " ";
    }
    cout << " ]\n";

}

void fib(int _limit, std::vector<int>& A)
{
    int fib0 = 1;
    A.push_back(fib0);
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        A.push_back(fib1);
        fib2 = fib0 + fib1;

        fib0 = fib1;
        fib1 = fib2;
    }
}

int main()
{
    int L;
    std::vector<int> A;
    cout << ">>> Press number: ";
    cin >> L; 

    if (L >= 0)
    {
        fib(L, A); 
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}
主要内容:


你有很多问题

在printArray中,使用单个整数指针_a=new int_sz;,覆盖传入的数组;,试图打印数组的所有元素将是未定义的行为

在fib中,还使用新的intcount;,同样,这会分配一个指针而不是数组。您应该使用新的int[count];相反你从不给数组的元素赋值,因此它们是未初始化的,使用它们是未定义的行为

您不会将数组A传递回调用函数。您可以通过将fib的声明更改为:

解决所有这些问题的一个好方法是使用std::vector而不是数组,这样就不需要预先计算序列的大小:

int fib(int _limit, int *_A)
{
    int count = 0;
    int fib0 = 1;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        fib2 = fib0 + fib1;

        count++;  

        fib0 = fib1;
        fib1 = fib2;
    }

    _A = new int(count);
    for (int i = 0; i < count; i++)
    {
        cout << _A[i] << " ";
    }

    return count;
}
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::vector;

void printArray(const std::vector<int>& A)
{
    cout << ">>> [ ";
    for (int i : A)
    {
        cout << i << " ";
    }
    cout << " ]\n";

}

void fib(int _limit, std::vector<int>& A)
{
    int fib0 = 1;
    A.push_back(fib0);
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        A.push_back(fib1);
        fib2 = fib0 + fib1;

        fib0 = fib1;
        fib1 = fib2;
    }
}

int main()
{
    int L;
    std::vector<int> A;
    cout << ">>> Press number: ";
    cin >> L; 

    if (L >= 0)
    {
        fib(L, A); 
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

如果你使用一些不正常的计算机科学课程,教你C++,但不让你使用C++类,那么使用数组的相同代码看起来可能是:

#include <iostream>
using std::cout;
using std::cin;

void printArray(int A[], int _sz)
{
    cout << ">>> [ ";
    for (int i = 0; i <= _sz; i++)
    {
        cout << A[i] << " ";
    }
    cout << " ]\n";

}

int fib(int _limit, int *A)
{
    int count = 0;
    int fib0 = 1;
    if (A) A[0] = fib0;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        count++;
        if (A) A[count] = fib1;
        fib2 = fib0 + fib1;
        fib0 = fib1;
        fib1 = fib2;
    }
    return count;
}

int main()
{
    int L;            
    int *A = nullptr; 
    cout << ">>> Press number: ";
    cin >> L;

    if (L >= 0)
    {
        auto sz = fib(L, A);
        A = new int[sz];
        fib(L, A);
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A, sz);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

你有很多问题

在printArray中,使用单个整数指针_a=new int_sz;,覆盖传入的数组;,试图打印数组的所有元素将是未定义的行为

在fib中,还使用新的intcount;,同样,这会分配一个指针而不是数组。您应该使用新的int[count];相反你从不给数组的元素赋值,因此它们是未初始化的,使用它们是未定义的行为

您不会将数组A传递回调用函数。您可以通过将fib的声明更改为:

解决所有这些问题的一个好方法是使用std::vector而不是数组,这样就不需要预先计算序列的大小:

int fib(int _limit, int *_A)
{
    int count = 0;
    int fib0 = 1;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        fib2 = fib0 + fib1;

        count++;  

        fib0 = fib1;
        fib1 = fib2;
    }

    _A = new int(count);
    for (int i = 0; i < count; i++)
    {
        cout << _A[i] << " ";
    }

    return count;
}
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::vector;

void printArray(const std::vector<int>& A)
{
    cout << ">>> [ ";
    for (int i : A)
    {
        cout << i << " ";
    }
    cout << " ]\n";

}

void fib(int _limit, std::vector<int>& A)
{
    int fib0 = 1;
    A.push_back(fib0);
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        A.push_back(fib1);
        fib2 = fib0 + fib1;

        fib0 = fib1;
        fib1 = fib2;
    }
}

int main()
{
    int L;
    std::vector<int> A;
    cout << ">>> Press number: ";
    cin >> L; 

    if (L >= 0)
    {
        fib(L, A); 
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

如果你使用一些不正常的计算机科学课程,教你C++,但不让你使用C++类,那么使用数组的相同代码看起来可能是:

#include <iostream>
using std::cout;
using std::cin;

void printArray(int A[], int _sz)
{
    cout << ">>> [ ";
    for (int i = 0; i <= _sz; i++)
    {
        cout << A[i] << " ";
    }
    cout << " ]\n";

}

int fib(int _limit, int *A)
{
    int count = 0;
    int fib0 = 1;
    if (A) A[0] = fib0;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        count++;
        if (A) A[count] = fib1;
        fib2 = fib0 + fib1;
        fib0 = fib1;
        fib1 = fib2;
    }
    return count;
}

int main()
{
    int L;            
    int *A = nullptr; 
    cout << ">>> Press number: ";
    cin >> L;

    if (L >= 0)
    {
        auto sz = fib(L, A);
        A = new int[sz];
        fib(L, A);
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A, sz);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

我不明白“我想要一个北方”这个短语是什么意思,当你开始这个程序时,它应该等你输入一个数字;你使用什么输入?你得到了什么输出?void printarayint A[],int sz{uA=new int sz;…}为什么?为什么要覆盖参数?您将从new返回的指针指定给_,然后在循环中打印_A[i]时希望看到值。为什么?顺便说一句,new int_sz在堆上创建一个值为_sz的新整数。也许你的意思是创建一个sz整数数组->新整数[sz]?我不明白我想要一个北方的短语是什么意思,以便能够得出结论。当你启动程序时,它应该等待你输入一个数字;你使用什么输入?你得到了什么输出?void printarayint A[],int sz{uA=new int sz;…}为什么?为什么要覆盖参数?您将从new返回的指针指定给_,然后在循环中打印_A[i]时希望看到值。为什么?顺便说一句,new int_sz在堆上创建一个值为_sz的新整数。也许你想创建一个由_sz整数->新整数[_sz]组成的数组?