扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
创新互联专注于五常企业网站建设,响应式网站设计,商城网站建设。五常网站建设公司,为五常等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务前言
一、c语言版本
1.游戏设计思路
2.rand()及srand()函数的使用
2.取模确定取值范围
3.条件运算符
4.利用二分法进行猜测
二、java版本
1.Math.random()的用法
2.整体代码展示
总结
系统随机提供一个某范围内的数字,让用户进行逐步地猜测,那么你是否能猜出系统先生心中所想的数字呢?
今天为大家带来一个c语言和java版本的猜数字小游戏,虽然实现过程十分简单,但也有些小细节希望初学者能够理解掌握。
(注:1.文中代码段由作者自己编写,若有纰漏或错误,欢迎大家指正;2.作者本人为初学者,编程水平有待提高,所写博客皆为本人的笔记和一些简单知识的分享,还望各位路过的大佬嘴下留情)
一、c语言版本 1.游戏设计思路我们先来探讨一下猜数字小游戏的整体设计思路。
2.rand()及srand()函数的使用
- 首先我们需要系统提供一个[0,100]范围内的随机整数(可自定义范围),再进行逐步猜测。
- 其次对于我们所输入的不同数字,系统根据判断作出三种不同的答复:
ⅰ当输入数字小于系统所给数字,则输出“You guessed the number down”,猜测继续;
ⅱ当输入数字大于系统所给数字,则输出“You guessed the number up”,猜测继续;
ⅲ当输入数字等于系统所给数字,则输出“Congratulations! You guessed it”,猜测结束。
当我们理解了整体设计思路之后,就可以正式开始敲写程序了。
如何让系统为我们提供一个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]之内。
3.条件运算符确定范围:
int a = rand()%100;
分析:
取模即取余,而其余数的范围即是随机数范围的子集。
当被除数小于101时,其余数皆为0;
当被除数无论多大,其余数大只能为100,因为当你余数大于或等于100时,只能说明你没有除尽;
这样我们就得到了随机数的范围[1,100]。
当我们获得了[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元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流