零基础C语言-第二次作业

第三章.C语言习题


前言

本章主要利用前面第三章的分支语句、循环语句知识来完成习题。
本章仅设置一题,完成在1到100之间的猜数字游戏。


一、猜数字游戏

题目要求:
1.在1到100之间猜数字
2.仅有10次机会猜数字,若猜错会显示正确答案
3.可重复游戏

1.超纲知识(补充)

1.设置随机数

在C语言中有一个rand函数,该函数能够生成随机数

rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是
依赖编译器上实现的,但是⼤部分编译器上是32767。 rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h

但是该随机数仅能随机第一次输入的值,再第二次第三次打印后值又是一样的

#include <stdlib.h>

所以C语言中又提供了一个函数叫srand函数,用来初始化函数的生成器 程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过
srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。

那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;那么在⽣成随机数的时候⼜需要⼀个随机数,怎么办呢?

在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。 在C语⾔中有⼀个函数叫 time ,就可以获得这个时间 time
函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的
差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型 time函数的参数 timer
如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。 如果 timer
是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

time函数的时候需要包含头⽂件:time.h

#include <time.h>

若想让time函数返回时间戳,可以这么写;

time(NULL);

将time函数的返回值强制转换为整型

srand((unsigned int)time(NULL)) //那么就可以有一个每次输出都不一样的随机值了

2.设置随机数范围

在这里有一个公式:

//任何数%100都只能得到0-99
//所以要想生成a到b的随机数,公式为: a + rand()%(b - a + 1)

 int r = 0 + rand%100 - 0 + 1

就能实现1到100的随机数范围了

3.实现猜数字游戏代码

当每次不同的随机值和随机值范围设置好了,就可以写出猜数字游戏的代码了

#include <stdio.h>
#include <stdlib.h>
#include <time.h>    //需要的头文件先写好,以防止后续不能运行
//本体在最下面

void menu()    //第一部分 菜单  //下面的menu();调用的内容在这里
{
	printf("***************************\n");
	printf("****       1. play     ****\n");
	printf("****       0. exit     ****\n");
	printf("***************************\n");
}


void game()  //第二部分 游戏 下面的game();调用的内容在这里
{
	int guess = 0;   //设置变量1
	int r = 0 + rand() % (100 + 1); //利用上面的公式完成1-100随机数范围
	int chance = 10;    //10次猜数字机会
	while (chance)    //当10次机会变成0,则退出循环
	{
		printf(" 你还有%d次机会猜,加油吧\n", chance);
		chance--;  //每次输入,则自减1,直到0退出为止
		printf("请猜一个0-100之间的数字\n"); 
		scanf("%d", &guess);  //输入你猜的数字
		if (guess > r)   //若大于随机数r
		{
			printf("猜大了\n");
		}
		else if (guess < r)  //若小于随机数r
		{
			printf("猜小了\n");
		}
		else  //若等于随机数r
		{
			printf("***************恭喜你,猜对了!**************\n");
			printf("正在重新进入菜单........\n");
			printf("........................\n");
			break; //终止,返回菜单
		}
		if (chance == 0)  //如果chance为0,之后 代表都没猜中
		{
			printf("你猜错了,正确答案是%d\n", r);  //给出正确答案
		}
	}
}


int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));  //将time的返回值强制转换整型
	do      //上来就打印
	{
		menu();  //第一部分 菜单   使用void menu()调用 
		printf("请选择:> ");   
		scanf("%d", &input); //输入 1和0 开启或退出游戏
		switch (input)  //switch分支
		{
		case 1:       //输入1时,进入游戏
			game();   //第二部分 游戏  使用void game调用
			break;   //结束
		case 0:      //输入0时   为假退出循环,退出游戏
			printf("退出游戏\n");
			break;
		default:       //防止乱输入
			printf("选择错误,请重新选择\n");//因为为真,所以会让你重新输入
			break;
		}
	} while (input);  //把switch写在内部,然后通过真假来操控while是否循环
	return 0;

总结

本章讲解了一下猜数字游戏的实现,可以多敲几遍,逐步了解每一步的逻辑。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值