C语言—简易猜数字

张开发
2026/5/4 14:46:31 15 分钟阅读

分享文章

C语言—简易猜数字
C语言—简易猜数字1. 随机数⽣成要想完成猜数字游戏⾸先得产⽣随机数那怎么产⽣随机数呢1.1 randC语⾔提供了⼀个函数叫 rand这函数是可以⽣成随机数的函数原型如下所⽰intrand(void);rand函数会返回⼀个伪随机数这个随机数的范围是在0~RAND_MAX之间这个RAND_MAX的⼤⼩是依赖编译器上实现的但是⼤部分编译器上是32767。rand函数的使⽤需要包含⼀个头⽂件是stdlib.h那我们就测试⼀下rand函数第⼀次运⾏结果第二次运⾏结果我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的但是下⼀次运⾏程序⽣成的结果和上⼀次⼀模⼀样这就说明有点问题。如果再深⼊了解⼀下我们就不难发现其实rand函数⽣成的随机数是伪随机的伪随机数不是真正的随机数是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的那是因为rand函数⽣成随机数的默认种⼦是1。如果要⽣成不同的随机数就要让种⼦是变化的。1.2 srandC语⾔中⼜提供了⼀个函数叫 srand⽤来初始化随机数的⽣成器的srand的原型如下voidsrand(unsignedintseed);程序中在调⽤ rand 函数之前先调⽤ srand 函数通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦只要种⼦在变化每次⽣成的随机数序列也就变化起来了。也就是说给srand的种⼦是随机的rand就能⽣成随机数在⽣成随机数的时候⼜需要⼀个随机数这就⽭盾了。1.3 time在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的因为时间时刻在发⽣变化的。在C语⾔中有⼀个函数叫 time 就可以获得这个时间time函数原型如下time_ttime(time_t*timer);time 函数会返回当前的⽇历时间其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值单位是秒。返回的类型是time_t类型的time_t 类型本质上其实就是32位或者64位的整型类型。time函数的参数 timer 如果是⾮NULL的指针的话函数也会将这个返回的差值放在timer指向的内存中带回去。如果 timer 是NULL就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳。time函数的时候需要包含头⽂件time.h那我们就可以让⽣成随机数的代码改写成如下第⼀次运⾏结果第二次运⾏结果srand函数是不需要频繁调⽤的⼀次运⾏的程序中调⽤⼀次就够了。2. 猜数字游戏实现参考代码#define_CRT_SECURE_NO_WARNINGS1#includestdio.h#includestdlib.h#includetime.hvoidmenu(){printf(***********************\n);printf(****** 1.PLAY *****\n);printf(****** 0.EXIT *****\n);printf(***********************\n);printf(请选择);}voidgame(){inta0;intflag5;intret1rand()%100;while(flag){printf(还有%d次机会\n,flag);scanf(%d,a);if(reta)printf(猜小了,重新输入\n);elseif(reta)printf(猜大了,重新输入\n);else{printf(猜对了,随机数为%d\n,ret);printf(\n);break;}flag--;}if(flag0){printf(\n);printf(次数用完,重新开始\n);printf(\n);}}intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();scanf(%d,input);switch(input){case1:printf(游戏开始请输入数字\n);game();break;case0:printf(退出游戏\n);break;default:printf(输入错误请输入1或0\n);printf(\n);}}while(input);return0;}

更多文章