📅  最后修改于: 2023-12-03 14:58:41.170000             🧑  作者: Mango
程序中经常需要使用随机数来产生一些随机的效果,例如生成随机密码、随机打乱数组元素等。在 C 语言中,我们可以利用 rand()
函数生成随机数。
rand()
函数的返回值是一个伪随机数,其范围是 0 到 RAND_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()
函数直接生成不同范围的随机数。除此之外,还可以通过随机生成的随机数来实现一些高级功能,例如生成随机字符串、打乱数组元素等。