分支和循环(下)

掌握了前⾯学习的这些知识,我们就可以写⼀些稍微有趣的代码了,⽐如:
写⼀个猜数字游戏
游戏要求:
1. 电脑⾃动⽣成1~100的随机数
2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束。

为了使后续猜数字游戏更加精彩好玩,先介绍一下如何通过代码控制电脑自动关机:

其中要用到的几个库函数是system()和strcmp()

(1)system()是Windows下提供的系统函数,用时要引头文件#include<windows.h>

(2)strcmp()用于两个字符串的比较,字符串之间比较相等不能用关系运算符“==”,必须strcmp()

"shutdown -s -t 60":系统60秒关机命令,可更改数字自行设置秒数

"shutdown -a":解除系统关机命令

上代码:

以上代码是利用简单的循环结构实现,程序运行起来电脑提示关机,创建数组存放用户输入的字符串,while循环里判断用户输入是否符合要求,若符合就取消关机跳出循环,否则循环继续。


1.随机数的生成

1.1 rand

C语言提供了一个函数rand()用来生成随机数,rand()生成的随机数在0-32767之间

rand函数要包含头文件stdlib.h

其实在调用的时候会发现不管rand()调用多少次,产生的随机数每次都一样,这是为什么?

因为rand()生成的随机数并不是真实随机数,而是用某种算法生成的伪随机数。rand之所以能生成随机数是对一个叫“种子”的基准值进行运算生成的,这个“种子”默认值为1,如不加改变每次调用都是1就会造成随机数都一样。

1.2 srand

C语言又提供了srand()函数来初始化随机数的生成器(rand是生成随机数,在生成之前要先初始化)

以下是srand函数的返回值和参数,只要参数是随机值,生成的随机数也就是随机值

1.3 time

刚刚说到srand需要一个随机值,其实只要一个可变的数就行了,因为数值一直在变,生成的随机数自然不同;那么我们可以想到电脑上的时间就是一个时刻在发生变换的值。

C语言中也有一个叫time()的函数可以获取到系统时间,time函数会返回一个时间戳,是1970年1⽉1⽇0时0分0秒到现在程序运行时间的差值。

time()的返回类型是time_t类型,实际上是个整型,要包含头文件time.h,而它的参数是个指针类型,若不需要传值,置为NULL

time_t  time(NULL)作为srand的参数,srand规定参数类型是unsigned int,所以将time的类型强转为unsigned int,再因为time_t类型,实际上也是个整型所以类型转换不会精度丢失。

srand函数不需要频繁调⽤的,运⾏的程序中调⽤⼀次就够了,可放在主调函数main中调用。
上代码:
游戏中需包含的头文件ru
进入主函数,先调用srand初始化随机数,用do_while循环打印菜单,通过switch语句获取用户的输入执行对应的case语句,输入1开始游戏,0退出游戏。
输入1 ,switch进入case1语句执行game()函数开始猜数字,game()函数中结合了开头提到的关机命令和设置了用户猜数字的次数,一旦次数用完没猜对,先进行一段嘲讽文字,再将电脑设置关机,等待命令“我是猪”的输入取消关机
为什么还要用if判断次数是否用完?
因为在循环中如果猜对了也会跳出循环来到if语句,得判断玩家是次数用完跳出循环还是猜对跳出循环,总不能人家猜对了还要给人关机吧,那这就出现bug了
以下是详细代码运行输出结果:

全剧终

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值