

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现
source link: https://blog.51cto.com/u_16202084/6871722
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

- 电脑自动生成1~100的随机数
- 玩家猜数字,猜数字过程中,根据猜测数据的大小给出大了或小了的反馈,知道才对,游戏结束
一.随机数的生成
1.rand
- 原型:这个函数可以帮我们生成随机数
- 在这写void的意思是这个函数不需要参数
- rand函数会返回一个伪函数,这个随机数的范围实在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上的实现的。
- rand函数的使用条件需要包含一个头文件是:stdlib.h

- 两次生成的随机值一样,由此我们可以发现rand函数生成的是伪随机数,真正的伪随机数是无法预测下一个数是多少的。rand函数是对一个叫”种子“的基准值进行运算生成的随机数。
- 之前每一次运行程序所产生的随机数序诗一样的,那是因为rand函数生成的随机数的默认种子是1。
- 如果要生成不同的随机数,就要让种子是变化的.
2.srand
C语言中,又提供了一个函数叫srand,用来初始化随机数的生成器,其原型如下:

- 程序中在调用rand函数之前,先调用srand函数,通过srand函数的参数seed来设置rand函数生成随机数时候的种子,只要种子在变化,每次生成的随机数列也就变化起来了。
- 也就是说给srand的种子如果是随机的,rand就能生成随机数;在生成随机数的时候有需要一个随机数,这就矛盾了。、
- srand函数不需要频繁调用,只需要调用一次就可以用rand函数生成随机数了
3.time
在程序中我们一般是使用程序运行的时间作为程序的种子,因为时间是时刻变化的。 在C语言中,有一个函数叫time就可以获得这个时间,其原型如下:

- time函数会返回当前的日历时间,返回程序运行当前的时间点和1970年1月1日0分0秒之间的差值。time函数返回的差值叫时间戳。
- time函数返回的值的类型是time_t,time_t类型本质上是32位或64位的整型类型。其实就是int类型或long long类型。
- time函数的参数timer如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存
- 随机数的生成程序如下

- 中带回去。
1.4设计随机数的范围

二.猜数字游戏的实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()//这个就像封装的模块一样,就是把这一段代码的功能封装到一个函数中,当我们用到的这个功能的时候,直接调用就行了
//就像拼乐高一样,把所有能调用的模块拼装到一起,就完成了这个功能,下面的game函数也是一样的功能
//这个函数只需要完成它的功能即可,不需要返回,需要返回的话当然也能返回
{
printf("**********************\n");
printf("***** 1. play ******\n");
printf("***** 0. exit *******\n");
printf("**********************\n");
}
void game()
{
int guess = 0;
//1.生成随机数
int r = rand()%100+1;
//printf("%d\n", r);
//2.猜数字
int count = 5;
while (count)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
count--;
}
if (count == 0)
{
printf("猜数字失败,正确的值是:%d\n", r);
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//srand函数只需要调用一次即可,所以我们将他放入主函数
do
{
//打印菜单
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
这个猜数字游戏就是对以前所学循环和语句的综合运用的体现
Recommend
-
84
前言对于随机数平时我们还是比较常用的,一般都会直接通过各种语言原生自带的随机函数,比如 c++ 中有random()函数,java 中有 Random 类,python 有 random 模块等等。都能很方便生成随机变量,但它们有一个特点,那就是都服从均匀分布,而有些场景需要要生成不同...
-
82
伪随机数生成算法在计算机科学领域应用广泛,比如枪击游戏里子弹命中扰动、数据科学里对样本进行随机采样、密码设计、仿真领域等等,背后都会用到伪随机数生成算法。
-
27
在区块链上如何生成随机数。 什么是随机数? 想象一下你身边的随机噪音或者任何随机发生的事情,可以说检测到这...
-
15
Note 本文摘录自《Go语言趣学指南》第 2 章, 请访问 gpwgcn.com 以获取更多相关信息。
-
21
在以太坊上使用的随机数来源主要有链上和链下两种途径,其中链上生成核心要解决随机数生成种子的不可预测性。 一、什么是随机数 随机数都是由随机数生成器(Random Number Generator)生成的。随机数分为”...
-
30
在以太坊上使用的随机数来源主要有链上和链下两种途径,其中链上生成核心要解决随机数生成种子的不可预测性。 ...
-
20
Java技术栈 www.javastack.cn 关注阅读更多优质文章 1. Math.random() 静态...
-
12
使用 Go 语言生成伪随机数¶ 本文摘录自《Go语言趣学指南》第 2 章, 请访问 gpwgcn.com 以获取更多相关信息。
-
9
阶乘、二分查找法及原理--分支循环的简单应用 精选 原创 光轮2000 2022-10-18 16:...
-
6
C语言生成随机数 精选 原创 首先我们联想到 rand() 这个函数自身就是生成随机数...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK