📜  随机数 - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:58:41.170000             🧑  作者: Mango

随机数 - C 编程语言

程序中经常需要使用随机数来产生一些随机的效果,例如生成随机密码、随机打乱数组元素等。在 C 语言中,我们可以利用 rand() 函数生成随机数。

生成随机数

rand() 函数的返回值是一个伪随机数,其范围是 0RAND_MAX(在 standard library stdlib.h 中定义)。可以通过以下方式来生成一个随机数:

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

int main() {
    srand(time(0)); // 设置种子
    int random_number = rand() % 10; // 0到9的随机数
    return 0;
}

上述示例中,我们使用了 srand() 函数来设置随机数生成的种子,其中 time(0) 函数返回当前时间的秒数作为种子,这样每次运行程序就会得到一个不同的伪随机数序列。然后使用 rand() 函数生成一个范围在 0 到 9 之间的随机数。

生成随机字符串

有时候我们需要生成一个随机的字符串,例如用作密码或文件名等。下面是一个例子:

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

char *gen_random_string(int length) {
    char *str = malloc(length + 1);
    for (int i = 0; i < length; i++) {
        int random_ascii = rand() % 26 + 97; // lowercase letters
        str[i] = random_ascii;
    }
    str[length] = '\0';
    return str;
}

int main() {
    srand(time(0));
    char *random_string = gen_random_string(10);
    printf("%s\n", random_string);
    free(random_string);
    return 0;
}

在上面的例子中,我们定义了一个 gen_random_string() 函数来生成一个指定长度的随机字符串。函数中使用了 rand() 函数生成一个 0 到 25 之间的随机数,然后加上 97 得到 ASCII 表中小写字母的字符编码。最后将生成的字符组成一个字符串返回。

打乱数组元素

有时候我们需要打乱一个数组中的元素顺序,可以通过以下方式实现:

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

void shuffle(int arr[], int n) {
    srand(time(0));
    for (int i = n-1; i >= 0; i--) {
        int j = rand() % (i+1);
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    shuffle(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

在上面的例子中,我们定义了一个 shuffle() 函数来打乱一个数组中的元素顺序。函数中使用了 rand() 函数生成一个 0 到 i 之间的随机数,然后将第 i 个元素与第 j 个元素交换。最终可以得到一个打乱了顺序的元素数组。

总结

C 语言中的随机数生成可以通过 rand() 函数来实现。我们可以使用 srand() 函数来设置生成随机数的种子,也可以使用 rand() 函数直接生成不同范围的随机数。除此之外,还可以通过随机生成的随机数来实现一些高级功能,例如生成随机字符串、打乱数组元素等。