Bootstrap

猜数字小游戏以及go to语句——C语言初阶

一.猜数字小游戏:随机生成一个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.用法:

  • 最常见的用法就是终止程序在某些深度嵌套的结构的处理过程(上面的游戏中就是很好的使用。)
;