一.猜数字小游戏:随机生成一个100以内的数字
1.rand函数:
- 功能:用来产生一个随机数
- 界限:stdlib.h头文件中有宏#define RAND_MAX 0×7fff,这表示rand产生一个0~0×7fff的随机数,即最大是32767的一个数
- 基础用法:rand( )%a; a是一个整数,返回值为0~a的随机数,包含0但是不包含a
//如果想要产生一个0—99之间的随机数
int num = rand() % 100;
//如果想要产生一个1—100之间的随机数
int num = rand() % 100+1;
//如果想要产生一个1—60之间的随机数
int num = rand() % 60+1;
//如果想要产生一个15—43之间的随机数
int num = rand() % 19+15;
- 获取小数:我们只需要将返回值除以10.0或者其他合适的数,并且在输出时保留若干位小数就可以获取随机小数,这里一定要用10.0,不能用整型
- 局限性:每次调用rand函数时,根据公式产生的伪随机数将是相同的
- srand函数原型:
# include <stdilb.h>
void srand(unsigned int seed)
- 解决方案:为了让每次产生的随机数不相同,常常使用系统时间来初始化,由于每次程序运行的时间不相同,那么每次产生的随机数肯定也就不一样了,也就引入time(NULL)
- 注意:rand函数每一次被调用时候,它都会查看之前是否调用了函数strand函数,如果调用了,则会调用srand(seed)来初始化它的随机值,如果没有调用,则会默认调用srand(1)来初始化它的随机值(所以会造成产生的随机值相同)
.
2.time函数
- 作用:我们利用time函数来获取系统时间
- 头文件:<time.h>
- 原型:time_t time(time_ *timer)(其中time_t是long int)
#include <stdio.h>
time_t time(time_t* tloc);
- 详解:使用time函数得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的数,再传给srand函数
- 用法:
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
int ch = rand();
printf("%d\n", ch);
return 0;
}
.
3.游戏完整制作:
void game()
{
int guess = 0;
//生成随机数0—99 => 1—100
int ret = rand() % 100 + 1;//生成随机的函数(100以内)
while (1)//直接执行循环(非零即真)
{
printf("请猜数字:\n");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
//系统时间一直在变化,导致生成的随机数初始改变
do
{
menu();
printf("请选择:0/1\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏逻辑
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}
.
.
.
二.制作一个关机程序:
规则:电脑运行起来后,1分钟内关机,如果输入"今天也要更认真"就取消关机
1.所涉及的知识点:
- system()的头文件为<string.h>,用法在上次文章中提到过
- “shutdown -s -t 60”含义为电脑将在60秒后关机(设计倒计时)
- “shutdown -a”为取消关机
- strcmp用来比较两个字符串,上次文章中有具体解释
2.程序完整制作:
//关机程序
//1.电脑运行起来后,1分钟内关机
//2.如果输入"今天也要更认真"就取消关机
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//设置倒计时60秒后电脑关机
again:
printf("请注意,你的电脑在60秒内关机,如果输入‘今天也要更认真’,就取消关机\n");
scanf("%s", input);
if (strcmp(input, "今天也要更认真") == 0)
//上次文章中提到过strcmp的用法,比较两字符串是否相同,相同返回数值0
{
system("shutdown -a");//取消关机
}
else
{
goto again;
}
return 0;
}
.
.
.
三.两个代码进行结合
新规则:当数字猜错三次,电脑就会关机
//电脑产生一个随机数(1—100)
//猜数字游戏
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
void menu()
//建立一个菜单,输入1为开始游戏,0为退出游戏
{
printf("*************************************\n");
printf("******** 1.play **********\n");
printf("******** 0.exit **********\n");
printf("*************************************\n");
}
void game()
{
int guess = 0;
//生成随机数0—99 => 1—100
int ret = rand() % 100 + 1;//生成随机的函数(100以内)
int n = 1;
while (n<=3)//直接执行循环(非零即真)
{
printf("请猜数字:\n");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
n++;
if (n == 4)
{
printf("错误次数超过三次,电脑即将关机\n");
system("shutdown -s -t 60");
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:0/1\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏逻辑
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}
.
.
.
四.go to 语句:
1.结构:
again:
语句;
go to again;
2.用法:
- 最常见的用法就是终止程序在某些深度嵌套的结构的处理过程(上面的游戏中就是很好的使用。)