C语言从入门到入土如何之实现生成随机数
编译器VS20261.rand函数c语言提供了一个函数叫rand这个函数可以生成随机数int rand ( void );这个函数会返回一个伪随机数范围是0~RAND_MAX之间一般是32768使用 rand 函数是需要包含头文件:stdlib.h我们可以运行下面代码看到结果#includestdio.h #includestdlib.h int main() { printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); return 0; }生成了一组随机数但是再次运行的时候还是一模一样的数据并不能实现每次运行都随机的效果。我们发现rand函数随机的数是伪随机的伪随机并不是真正的随机是通过某种算法生成的数真正的随机数并不能预判下一个生成的数值是多少。rand函数是对一个叫种子的基准值进行运算生成的随机数种子默认是1如果要生成真正的随机数就必须让种子是变化的。2.srand函数c语言又提供了一个函数叫srand用来初始化随机数的生成器void srand (unsigned int seed);程序在运行时先调用srand函数通过srand的参数seed来设置rand生成随机数的种子只要种子在变化每次生成的随机数列也就变化起来了。当我们尝试给srand函数输入1就能看到结果和我们之前自然生成的是同一个结果。但是光有这个函数是不够用的给srand的种⼦是如果是随机的rand就能⽣成随机数在⽣成随机数的时候⼜需要⼀个随机数所以就引出核心函数time来完美解决这个问题。3.time因为时间是一直在变化的所以一般程序运行使用时间作为种子time_t time (time_t* timer);time 函数会返回当前的⽇历时间返回的类型是time_ttime_t本质上就是32位和64位的整形类型。time函数的参数timer如果是⾮NULL的指针的话函数也会将这个返回的差值放在timer指向的内存 中带回去。 如果timer是NULL就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳。使用time函数的时候需要包含头⽂件time.h因为srand的返回类型是unsigned int 所以使用时添加强制类型转换即可这时值就是随机的了。4.设置生成随机数的范围如果需要生成0~99rand() % 100;余数是99想生成0~100只需要在100后面1即可rand() % 100 1;如果要生成100~200100 rand() % (200 - 100 1) //余数的范围是0~100加100后就是100~200需要生成a~b的随机数时也可以运用数字对应的ascall值来实现a rand() % (b - a 1)同理想生成1~10的数只要把100改成105.随机数的应用猜数字游戏#define _CRT_SECURE_NO_WARNINGS #includetime.h #includestdio.h #includestdlib.h void game() { int r rand() % 100 - 1;//设置随机数生成范围0~100 //printf(%d\n, r); int guess 0; int count 5; while (count--) { printf(请输入数字\n); scanf(%d,guess); if (guess r) { printf(猜大了\n); printf(还剩%d次机会\n, count); } else if (guess r) { printf(猜小了\n); printf(还剩%d次机会\n, count); } else { printf(恭喜你猜对了\n); break; } } } int main() { int input 0; srand((unsigned int)time(NULL)); do { printf(**********************\n); printf(*** 1.开始游戏 ****\n); printf(*** 0.退出游戏 ****\n); printf(**********************\n); scanf(%d,input); switch (input) { case 1: game(); break; case 0: printf(退出游戏\n); break; default: printf(请重新输入\n); break; } } while (input);//输入的结果为0时为假循环自动结束。 return 0; }