源文件test.c:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
// 生成并打印5 个随机数
for (int i = 0; i < 5; i++) {
// 生成随机数并打印
printf("第%d个随机数: %d\n", i + 1, rand());
}
return 0;
}
注意点 :
1)当不用srand()函数设置种子时,系统会采用默认种子,及每次运行程序生成的5个数字一致:
第一次./test:
17370255 596516649 846930886 1303455736 304089172
第二次./test:
17370255 596516649 846930886 1303455736 304089172
第三次./test:
17370255 596516649 846930886 1303455736 304089172
及第一,第二,第三次结果一致
源文件test.c:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
// 设置随机数种子为当前时间
srand((unsigned int)time(NULL));
// 生成并打印 10 个随机数
for (int i = 0; i < 5; i++) {
// 生成随机数并打印
printf("第%d个随机数: %d\n", i + 1, rand());
}
return 0;
}
注意点 :
1)当用 srand((unsigned int)time(NULL)); 函数设置种子时,只要不在同一秒运行,每次运行结果不一致:
第一次./test: (time 1737027034)
855715535 231294145 138116085 2073724851 1918273440
第二次./test: (time 1737027035)
17370266 596516946 846930688 1303455367 304089217
第三次./test: (time 1737027036)
17325570 649596516 930846886 4551303736 389040172
及第一,第二,第三次结果不一致
2)当用 srand((unsigned int)time(NULL)); 函数设置种子时,同一秒运行,每次运行结果一致:
第一次./test: (time 1737027350)
327041164 314764515 614224631 1345773586 1191149738
第二次./test: (time 1737027350)
327041164 314764515 614224631 1345773586 1191149738
第三次./test: (time 1737027350)
327041164 314764515 614224631 1345773586 1191149738
及第一,第二,第三次结果一致
源文件test.c:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
struct timeval timeval = {0};
gettimeofday(&timeval,NULL);
// 设置随机数种子为当前时间
srand((timeval.tv_usec);
// 生成并打印 10 个随机数
for (int i = 0; i < 5; i++) {
// 生成随机数并打印
printf("第%d个随机数: %d\n", i + 1, rand());
}
return 0;
}
注意点 :采用gettimeofday(&timeval,NULL);获得微妙级时间,减少种子重复性,进而减少每次运行随机数的重复率
注意:一个进程运行,只需要设置一次种子。
标签:并打印,rand,int,srand,详解,随机数,time,test,include From: https://blog.csdn.net/ghx19940812/article/details/145183572