gpt4 book ai didi

C编程-递归填充数组

转载 作者:行者123 更新时间:2023-11-30 15:28:01 25 4
gpt4 key购买 nike

我正在尝试创建一个代码,要求用户输入数组的大小以填充 0-1000 之间的随机数。

我的尝试:

#include <stdio.h>

int main()
{
int p = 0;
int s;
int aRRay[1001];
printf("\n Enter size of an array to fill random numbers: ");
scanf("%i",s);
printf("%i",fillArray(aRRay,p,s));

}
int fillArray(int aRRay[],int p, int s)
{
srand((unsigned)time(NULL));
int ran = rand()%1001;
aRRay[p] = ran;
if(p>s)
{
return 0;
}

else
{
return fillArray(aRRay,++p,s);
}
}

这段代码崩溃了。我不确定我是否将 main 中的最后一个 printf 语句放在了错误的位置。我可以不把它放在main中,而是放在函数fillArray中并使用递归将其一一打印出来吗?

最佳答案

这段代码中有几处明显错误,其中许多会生成您应该已经解决的警告:

一般来说:

  • srand()rand() 是在 stdlib.h 中定义的,您未能包含它。
  • time() 是在 time.h 中定义的,您未能包含它。
  • 您没有将 int 地址 传递给 scanf 作为输出目标。
  • 您没有检查 scanf 调用的结果。
  • 您正在处理幅度,它应该是无符号类型。即使您修复了上述项目,有人也可能会输入 -5 并且您的代码会很乐意解析它并继续执行未定义的行为。
  • 如果 stdout 是行缓冲的,那么如果没有刷新,您的输入提示将不可见。
  • 如果您打算对数组大小使用硬限制(在您的情况下为 1001),则应在有效读取数组的输入大小后强制执行该值。
  • fillArray 在第一次在 main() 中使用之前没有正式的原型(prototype)。因此,假设该函数接受任意数量的参数并返回 int

在您的生成函数中:

  • 您的救助逻辑执行得太晚且条件错误。
  • 您不应在 fill 函数中调用 srand()。应在进程启动时从 main() 调用它一次
  • 次要:您不需要同时传递当前输入槽和长度。您要填充所有槽,因此基于值的降序槽或通过指针算术增加目标指针就足够了。

下面解决了其中大部分问题。我根本不明白为什么你要用递归来做到这一点,但怀疑这是为了学术界。如果是这样,你的老师可能会想出更好的递归算法类(class)。但现在,你需要更多地锻炼你的基础知识。上面的项目符号列表表明您需要在这些方面进行大量工作。

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

int fillArray(int arr[], unsigned int s);

int main()
{
unsigned int s = 0;
int arr[1001];

srand((unsigned)time(NULL));

printf("Enter size of an array to fill random numbers: ");
fflush(stdout);

if (scanf("%u",&s) == 1 && s < sizeof(arr)/sizeof(*arr))
printf("%d\n", fillArray(arr,s));

}

int fillArray(int arr[], unsigned int s)
{
if (s)
{
*arr = rand() % 1001;
return fillArray(arr+1, --s);
}
return 0;
}

关于C编程-递归填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com