c - 在 C 中的循环中生成一个随机整数数组

标签 c arrays random

我试图在循环中生成长度为 16 的随机整数数组。数组的元素将位于 [0, 255] 内。我认为从 [0, 255] 分配随机整数就足够了;但它不起作用(创建一个随机数组,在迭代过程中保持不变)。然后我尝试了洗牌,但情况并没有改善(我还注意到 'random' 数组中 0 的概率明显更大)。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#define Shuffle

/* Generate a random integer array of length `size` with elements from [0, 255] */
int* random_sample(int size) 
{
int i, j, k;
int *elements = malloc(size*sizeof(int));

/* Assign random integers */
for (i = size - 1; i > 0; --i)
{   
    elements[i] = rand() % 256;
}

/* Shuffle */
#ifdef Shuffle
for (i = size - 1; i > 0; --i) {
    j = rand() % size;

    k = elements[i];
    elements[i] = elements[j];
    elements[j] = k;
}
#endif

return elements;
}

int main(int argc, char const *argv[])
{
    int LENGTH = 16, i, iteration;
    int *random_array = random_sample(LENGTH);

    srand(time(NULL));

    for (iteration = 0; iteration < 10; ++iteration)
    {
        for (i = 0; i < LENGTH; ++i) 
            printf("%d, ", random_array[i]); 

        puts("");
    }

    return 0;
}

典型的输出如下:

0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 
0, 227, 251, 242, 171, 186, 205, 41, 236, 74, 255, 81, 115, 105, 198, 103, 

我尝试了上述代码的几种变体,但都不起作用。需要帮助!

编辑

我正在尝试代码的变体,并错误地打印了相同的未更改数组(正如其他人所指出的 - 感谢他们);原来是我写的

int main(int argc, char const *argv[])
{
    int LENGTH = 16, i, iteration;
    int *random_array;

    srand(time(NULL));

    for (iteration = 0; iteration < 10; ++iteration)
    {
        random_array = random_sample(LENGTH);
        for (i = 0; i < LENGTH; ++i) 
            printf("%d, ", random_array[i]); 

        puts("");
    }

    return 0;
}

打印更多的 0

编辑 (2)

感谢@pmg,我找到了问题所在。在 random_sample 函数中,改变第一个
for (i = size - 1; i > 0; --i)for (i = size - 1; i >= 0; --i) 工作正常!

谢谢大家

最佳答案

试试下面的代码。对于在每次迭代中包含不同(随机)值的数组,您需要在其中放入不同的值:)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#define Shuffle

/* Generate a random integer array of length `size` with elements from [0, 255] */
int* random_sample(int size) 
{
        int i, j, k;
        int *elements = malloc(size*sizeof(int));

        /* Assign random integers */
        for (i = size - 1; i > 0; --i)
        {   
                elements[i] = rand() % 256;
        }

        /* Shuffle */
#ifdef Shuffle
        for (i = size - 1; i > 0; --i) {
                j = rand() % size;

                k = elements[i];
                elements[i] = elements[j];
                elements[j] = k;
        }
#endif

        return elements;
}

int main(int argc, char const *argv[])
{
        int LENGTH = 16, i, iteration;
        int *random_array;

        srand(time(NULL));

        for (iteration = 0; iteration < 10; ++iteration)
        {
                random_array = random_sample(LENGTH);
                for (i = 0; i < LENGTH; ++i) 
                        printf("%d, ", random_array[i]); 

                puts("");
                free(random_array);
        }

        return 0;
}

关于c - 在 C 中的循环中生成一个随机整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137568/

相关文章:

c - 我们如何将文本文件从客户端发送到服务器?

javascript - 从数组中删除对象——两种不同的方法,在查询每个数组的长度时有两种不同的结果

java - 数组中最高元素的索引

php - 使用关联数组将记录从mysql动态显示到表中

mysql - 根据条件选择 MySQL 中的随机行

javascript - 将随机数据从 JSON 文件加载到 HTML 中?

使用 swig 和 Anaconda Python 找不到 Python.h

c - swift Zeromq C 桥接 header - 找不到类型

c - 根据旧数组 malloc、realloc 将新字符添加到新数组

python - 使用文本文件将单词排列成网格形式