碎碎念的猜数字游戏来喽~~(vs2013c语言方法)

本文介绍了猜数字游戏的基本概念和解决思路,通过使用二分查找法提高查找效率。详细阐述了C语言实现这个游戏的代码过程,包括menu()和game()函数的编写,以及rand()和srand()函数在生成随机数中的应用。此外,还讨论了变量和函数的命名规范,提供了一份完整的代码实现作为示例。
摘要由CSDN通过智能技术生成

什么是猜数字游戏?

  猜数字游戏,简单来说,就是在给定的一组数的范围内猜出提前设定好的数。那么,怎样提高我们的查找效率呢?简而言之,就是靠 “”,但是呢,这个“”也是需要技巧的,而我们所熟知的二分查找便是猜数字游戏的最佳解决方法。


解决思路

  首先让程序自动生成一个随机的整数(1-100),用户来输入一个整数,系统会根据用户输入的情况来提示用户是猜高了还是猜低了,又或者是猜对了!这是一个大概的思路,下面我们来进行具体的代码实现!


代码实现

  第一步,我们首先写一个简单的菜单函数,通过这个函数来和用户进行交互:

int menu(){
	printf("====================\n");
	printf("1.开始游戏\n");
	printf("0.退出游戏\n");
	printf("====================\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

  这里我们要注意的是在这个代码块里,我们最终的返回值是choice,而不是0

scanf输入的如果是整数,则需要加上&,如果输入的是字符串,则把()里的%d改为%s,同时去掉&符号。


  第二步,在上一步中,我们首先写了一个菜单函数,之后,我们需要写一个main()函数来对这个menu()做一个补充:

int main(){
	srand(time(0));
	while (1){
	int choice = menu();
		if (choice == 1){
			game();
		}
		else if (choice == 0){
			printf("退出程序!\n");
		}
		else{
			printf("您的输入有误,请重新输入!\n");
		}
	}
}

  如果用户输入1,则进行游戏,这里我们先引入一个game()函数,如果用户输入2,则直接退出游戏,如果用户输入的数字不是这两个数字,则提醒用户输入错误,请重新输入。


  第三步,在有了main()函数之后,我们再对其中的game()函数做一个编写,要求是程序自动生成一个1-100的随机整数,从控制台读取用户的输入,然后再进行比较用户输入的数字和系统生成的数字之间的关系,并给出用户提示:

void game(){
	int toGuess = rand() % 100 + 1;
	while (1){
		printf("请输入要猜的数字:");
		int input = 0;
		scanf("%d", &input);
		if (input < toGuess){
			printf("低了!\n");
		}
		else if (input>toGuess){
			printf("高了!\n");
		}
		else{
			printf("猜对了!\n");
			break;
		}
	}
		}

关于void game()与game()写法的说明

void game(){}

  这里的void的意思是没有返回值,当别的函数调用此函数时,不需要返回值,则写成这样的形式,免用return语句。

game(){}

  这种函数省略返回值类型的写法,在一些上古时代的书中出现过,这种情况表示默认函数的返回值类型就是int,但是这种写法其实是很老很老的c编译器支持的,现在不推荐这样写。

rand()函数

  C语言中用来产生一个随机数的函数。 rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数。这里我们void game()函数代码块中的rand()%100+1的意思就是在1-100中随机取一个数

伪随机数

  计算机中生成随机数通常都是“伪随机”,使用一个数学公式,把初始值带入公式,就会得到一组数字序列,这一组序列中的数字彼此之间看起来没什么规律,就可以近似的认为这组数字是随机的数字。

  rand()函数其实不是真正意义上的随机数生成器,rand()函数在使用的时候还需调用srand()函数,srand()函数会设置供rand()函数使用的随机数种子,每一个种子对应一组根据算法预先生成的随机数。随机种子相同,得到的随机序列就是相同的,随机种子不同,得到的随机数序列就是不同的。

srand()函数

  对于在对srand的调用中使用的每个不同的种子值,可以预期伪随机数生成器在随后的对rand的调用中产生不同的结果序列。同一个种子的两个不同初始化将在后续调用RAND中产生相同的结果序列。如果种子设置为1,则生成器被重新初始化为其初始值,并产生与调用rand或srand之前相同的值。为了生成类似随机的数字,srand通常被初始化为一些独特的运行时值

  我们常常使用系统时间来初始化,使用time函数来获取系统时间,得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的数,然后再传给srand函数。

变量/函数常见的命名风格

1.小驼峰命名法:toGuess -----第一个单词首字母小学,后续的单词首字母大写;
2.大驼峰命名法:ToGuess-----每个单词的首字母都是大写;
3.蛇形命名法:to_guess-----单词之间使用_分割,统一使用小写字母;
4.脊柱命名法:to-guess-----单词之间使用-分割,统一使用小写字母;
5.匈牙利命名法:iToGuess-----首字母是一个表示类型的缩写,i表示是int;s表示字符串;c表示字符…

总代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int menu(){
	printf("====================\n");
	printf("1.开始游戏\n"); 
	printf("0.退出游戏\n");
	printf("====================\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

void game(){
	int toGuess = rand() % 100 + 1;
	while (1){
		printf("请输入要猜的数字:");
		int input = 0;
		scanf("%d", &input);
		if (input < toGuess){
			printf("低了!\n");
		}
		else if (input>toGuess){
			printf("高了!\n");
		}
		else{
			printf("猜对了!\n");
			break;
		}
	}
		}
int main(){
	srand(time(0));
	while (1){
		int choice = menu();
		if (choice == 1){
			game();
		}
		else if (choice == 0){
			printf("退出程序!\n");
			break;
		}
		else{
			printf("您的输入有误,请重新输入!\n");
		}
	}

system("pause");
return 0;
}
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值