189 8069 5689

【c语言】和【Java】版本的猜数字小游戏-创新互联

目录

创新互联专注于五常企业网站建设,响应式网站设计,商城网站建设。五常网站建设公司,为五常等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

前言

一、c语言版本

1.游戏设计思路

2.rand()及srand()函数的使用

2.取模确定取值范围

3.条件运算符

4.利用二分法进行猜测

二、java版本

1.Math.random()的用法

2.整体代码展示

总结


前言

系统随机提供一个某范围内的数字,让用户进行逐步地猜测,那么你是否能猜出系统先生心中所想的数字呢?

今天为大家带来一个c语言和java版本的猜数字小游戏,虽然实现过程十分简单,但也有些小细节希望初学者能够理解掌握。

(注:1.文中代码段由作者自己编写,若有纰漏或错误,欢迎大家指正;2.作者本人为初学者,编程水平有待提高,所写博客皆为本人的笔记和一些简单知识的分享,还望各位路过的大佬嘴下留情)

一、c语言版本 1.游戏设计思路

我们先来探讨一下猜数字小游戏的整体设计思路。

  1. 首先我们需要系统提供一个[0,100]范围内的随机整数(可自定义范围),再进行逐步猜测。
  2. 其次对于我们所输入的不同数字,系统根据判断作出三种不同的答复:

ⅰ当输入数字小于系统所给数字,则输出“You guessed the number down”,猜测继续;

ⅱ当输入数字大于系统所给数字,则输出“You guessed the number up”,猜测继续;

ⅲ当输入数字等于系统所给数字,则输出“Congratulations! You guessed it”,猜测结束。

2.rand()及srand()函数的使用

当我们理解了整体设计思路之后,就可以正式开始敲写程序了。

如何让系统为我们提供一个0到100的随机整数呢?这时c语言中的rand()函数就派上用场了。

rand()函数:系统会随机提供一个位于 0 ~ RAND_MAX 之间的整数。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。

一个随机数生成的实例:

#include#include//需调用rand()函数
int main()
{
    int a = rand();
    printf("%d\n",a);
    return 0;
}

运行结果实例:

可是当我们多次运行这段程序时,就会产生疑问了,为什么我每次生成的随机数都是一个数呢?随机数难道不随机吗?

其实并不然,实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。

种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了,也就是说,每次启动计算机以后,种子就是定值了。

那我们到底如何才能真正地生成一个随机数呢,这时我们就可以使用标题中所提到的srand()函数来对“种子”进行重新“播种”。

“播种”原理:srand()函数需要一个 unsigned int 类型的参数,使用头文件中的 time() 函数即可得到当前的时间(精确到秒),用时间作为参数:srand((unsigned)time(NULL))

只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同、

对之前的代码进行修改:

#include#include//需调用srand()函数
#include//需调用time()函数
int main()
{
    int a;
    srand((unsigned)time(NULL));
    a = rand();
    printf("%d\n", a);
    return 0;
}

多次的运行结果实例:

具体的随机教程可见下方链接,在此只做部分的知识分享(作者本人也是通过此教程进行学习的)C语言随机数生成教程,C语言rand和srand用法详解 (biancheng.net)http://c.biancheng.net/view/2043.html

2.取模确定取值范围

当我们掌握了rand()及srand()函数的用法,接着就可以对这个随机数进行一个范围的圈定,在本文我们采用取模的方法确定随机数在[0,100]之内。

确定范围:

int a = rand()%100;

分析:

取模即取余,而其余数的范围即是随机数范围的子集。

当被除数小于101时,其余数皆为0;

当被除数无论多大,其余数大只能为100,因为当你余数大于或等于100时,只能说明你没有除尽;

这样我们就得到了随机数的范围[1,100]。

3.条件运算符

当我们获得了[0,100]内的一个随机整数,问题基本上已经解决的差不多了。

下面展示完整代码: 

#include#include//需要调用rand()及srand()函数 
#include//需要调用time()函数 

int main()
{
	//每秒进行一次播种 
	srand((unsigned)time(NULL));
	//系统随机给出一个整数 
	int r_number = rand() % 101;	//函数返回一个0~RAND_MAX范围内的整数,取模确定取值范围 
	//用户循环输入整数,进行猜测
	printf("Please guess\n");		//打印提示信息
	int number = -1;
	while (number != r_number)		//用户猜测数字不等于随机数字,满足条件进行循环
	{
		scanf("%d", &number);
		if (number != r_number)
			printf((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");
		else
			printf("Congratulations! You guessed it");
	}
}

下面展示运行结果: 

有的朋友或许会对第18行的代码有些疑惑,这里有一个小小的知识点,关于条件运算符的使用。

条件运算符的使用:

首先我们先来看一段代码 

if(a >b)
{
    max = a;
}
else
{
    max = b;
}

我们可以尝试用条件运算符来优化这段代码

max = (a>b) ? max=a : max=b;

第一段代码通过使用条件运算符便简化成了一串代码,可见条件运算符的便利之处。

什么是条件运算符呢?

条件运算符是由一组“?”和“:”两个符号组成,判断“?”前的表达式的真假,若真,执行“:”前的语句;若假,执行“:”后的语句。

条件运算符的一般形式:

表达式1 ? 表达式2 : 表达式3;

当我们掌握了条件运算符的使用后,再来看第18段代码究竟是什么意思?

printf((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");

首先判断number是否大于r_number,若是,则输出“You guessed the number up”;若否,则输出“You guessed the number down”。

这样一来,对于条件运算符存在疑惑的朋友们是不是能够理解了呢。

4.利用二分法进行猜测

为什么说方法正确的话,100以内的数最多猜7次就够了呢?

这里再为大家分享一个猜测100以内的数的方法,叫做二分法。

二分法查找:

数据是按升序排序的,对于给定值1,从序列的中间位置50开始比较,

如果当前位置等于key,则查找成功;

若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];

若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],

直到找到为止

我们来分析100以内猜数字的最坏情况复杂度:假设系统给出的随机数为1,见下图:

对于给定值1,从序列的中间位置50开始比较,1小于当前位置值50,则在数列的前半段中查找,如此反复,在经过7次的猜测后,我们终于猜到了系统所给的值。

所以说100以内的数最多猜7次就够了。

二、java版本 1.Math.random()的用法

java版本的猜数字小游戏与c语言版本的整体设计思路相同,但值得注意的是,在java版本中使系统提供随机数的方法与c语言版本不同,这里提供其中一种方法,运用Math.random()语句。

Math.random()语句:

是一个随机函数。利用该函数可以取得0到1之间的随机小数,如果想得到一个大于1的随机值,则需要再乘以一定的数值来实现。

而这里我们需要得到一个[1,100]的随机整数,

首先我们将Math.random()乘以100再加一,此时其范围为[0,101)的浮点数;

其次再将Math.random()强制转换为整形,如下:

int r_number = ((int)(Math.random()*100+1));
2.整体代码展示

如此,我们便得到了系统提供的一个随机数,下面展示整体代码:

package text;

import java.util.Scanner;

public class Text {   

	public static void main(String[] args) {

		//系统随机给出一个整数 
		Scanner in = new Scanner(System.in);
		int r_number = ((int)(Math.random()*100+1));	
		//用户循环输入整数,进行猜测
		System.out.println("Please guess");	//打印提示信息
		int number = 0;
		while (number != r_number)		    //用户猜测数字不等于随机数字,满足条件进行循环
		{
			number = in.nextInt();
			if (number != r_number)
				System.out.print((number >r_number) ? "You guessed the number up\n" : "You guessed the number down\n");
			else
				System.out.print("Congratulations! You guessed it");
		}	
	}
}

运行结果展示: 

总结

以上便是对于c语言和java版本的猜数字小游戏的代码设计分享,虽说其过程十分简单,但还是希望能够帮到大家 。如若文章存在纰漏或错误,欢迎大家指正,谢谢!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:【c语言】和【Java】版本的猜数字小游戏-创新互联
当前链接:http://cdxtjz.com/article/jiooo.html

其他资讯