C-Fibonacci序列在阵列分割中的应用
我想填充一个数组,最多n位斐波那契序列。以下是我目前掌握的情况:C-Fibonacci序列在阵列分割中的应用,c,fibonacci,C,Fibonacci,我想填充一个数组,最多n位斐波那契序列。以下是我目前掌握的情况: void fib(int **seq, int n){ seq = malloc(sizeof(int)*n); if(n==1){ *seq[0] = 0; } if(n==2){ *seq[0] = 0; *seq[1] = 1; } if(n>=3){ *seq[0] = 0; *seq
void fib(int **seq, int n){
seq = malloc(sizeof(int)*n);
if(n==1){
*seq[0] = 0;
}
if(n==2){
*seq[0] = 0;
*seq[1] = 1;
}
if(n>=3){
*seq[0] = 0;
*seq[1] = 1;
*seq[2] = 1;
for(int i=3; i<n; i++){
*seq[i] = *seq[i-1]+*seq[i-2];
}
}
}
void fib(整数**seq,整数n){
seq=malloc(sizeof(int)*n);
如果(n==1){
*seq[0]=0;
}
如果(n==2){
*seq[0]=0;
*seq[1]=1;
}
如果(n>=3){
*seq[0]=0;
*seq[1]=1;
*seq[2]=1;
对于(int i=3;i,除以下错误外,您的程序在大多数部分都是正确的:
(1) 修理
seq=malloc(sizeof(int)*n);
与
*seq=malloc(sizeof(int)*n);
请注意,不应将内存分配给双指针。应将内存分配给“seq”所指的指针
(2) 替换所有语句,如
*seq[i]…
与
(*seq)[i]
请注意,[]的关联性比*.seq强,因此在所有实例上都需要用括号括住*seq
(3) 您尚未演示如何调用此函数,但我假设您在调用该函数之前正在为双指针分配内存
这里有一个工作程序供您参考:
#include <stdio.h>
void fib(int **seq, int n);
int main()
{
int ** sequence = malloc(sizeof(int*));
fib(sequence, 5);
for(int x = 0; x < 5; x++)
printf("%d", (*sequence)[x]);
return 0;
}
void fib(int **seq, int n){
*seq = malloc(sizeof(int)*n);
if(n==1){
(*seq)[0] = 0;
}
if(n==2){
(*seq)[0] = 0;
(*seq)[1] = 1;
}
if(n>=3){
(*seq)[0] = 0;
(*seq)[1] = 1;
(*seq)[2] = 1;
for(int i=3; i<n; i++){
(*seq)[i] = (*seq)[i-1]+(*seq)[i-2];
}
}
}
#包括
无效fib(整数**序号,整数n);
int main()
{
int**sequence=malloc(sizeof(int*));
fib(序列5);
对于(int x=0;x<5;x++)
printf(“%d”,(*序列)[x]);
返回0;
}
无效fib(整数**序号,整数n){
*seq=malloc(sizeof(int)*n);
如果(n==1){
(*序号)[0]=0;
}
如果(n==2){
(*序号)[0]=0;
(*序号)[1]=1;
}
如果(n>=3){
(*序号)[0]=0;
(*序号)[1]=1;
(*序号)[2]=1;
对于(int i=3;i您正在传递指针的指针,即void fib(int**seq,int n)
然后尝试分配内存seq=malloc(sizeof(int)*n);
哪个错误
不要这样做,你可以简单地做
void fib(int *seq, int n){
if(n==1){
seq[0] = 0;
}
if(n==2){
seq[0] = 0;
seq[1] = 1;
}
if(n>=3){
seq[0] = 0;
seq[1] = 1;
seq[2] = 1;
for(int i=3; i<n; i++){
seq[i] = seq[i-1]+seq[i-2];
}
}
}
int main()
{
int n=10;
int *arr=(int*)malloc(sizeof(int)*(n)); // Allocate memory here
fib(arr,10);
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
return 0;
}
void fib(int*seq,int n){
如果(n==1){
seq[0]=0;
}
如果(n==2){
seq[0]=0;
seq[1]=1;
}
如果(n>=3){
seq[0]=0;
seq[1]=1;
seq[2]=1;
对于(int i=3;i,您必须理解这一点:
对于阵列:-
a[i] = *(a+i) // correct
所以
你知道如何使用调试器吗?很可能,seq=malloc(sizeof(int)*n);
-->*seq=malloc(sizeof(int)*n);
,*seq[0]=0;
(*seq)[0]=0;
(((*seq)[1]=1;
)什么是seq[0]
等等。这些都是指向内存的指针。它们是否已初始化?否。你能安全地取消引用它们吗?不,我对C和命令行比较陌生。你肯定应该学习如何使用调试器。此外,GUI调试器对于新手来说要容易得多-对于beginn来说,命令行调试器通常更难使用ers.检查我的答案,我希望你会发现这很有用。我想从main调用函数:int*fib_sequence;fib(&fib_sequence,5);
当然。在这种情况下,你仍然需要为fib_sequence分配内存,比如int*fib_sequence=malloc(sizeof(int)*5)
。然后在函数调用后读取值时,可以对(int x=0;x<5;x++)printf(“%d”,fib_序列[x])执行;
*a[i] = **(a+i) //pointer to pointer so it will not work in your case