目录

前言

一、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 <stdio.h>
#include <stdlib.h>    //需调用rand()函数
int main()
{int a = rand();printf("%d\n",a);return 0;
}

运行结果实例:

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

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

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

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

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

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

对之前的代码进行修改:

#include <stdio.h>
#include <stdlib.h>  //需调用srand()函数
#include <time.h>    //需调用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<stdio.h>
#include<stdlib.h>    //需要调用rand()及srand()函数
#include<time.h>  //需要调用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");elseprintf("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");elseSystem.out.print("Congratulations! You guessed it");}   }
}

运行结果展示: 

总结

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

【c语言】和【Java】版本的猜数字小游戏相关推荐

  1. 教你如何用C语言设计一个有趣的猜数字小游戏

    目录 前言 猜数字游戏 打印菜单 处理玩家选择的操作 编写猜数字游戏函数 游戏中要猜数字从哪来?(配置随机数生成器) 时间戳 开始生成随机数 game函数内部编写 完整代码 总结 前言 好久不见,今天 ...

  2. C语言、C++与Java分别实现猜数字小游戏

    系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "Too small!!!", 如果输入的数字比该随机数大, 提示 & ...

  3. 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?

    package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...

  4. Java语言实现猜数字小游戏

    之前笔者在学习C语言的初级阶段,就已经实现了用C语言简单实现猜数字小游戏,既然笔者最近在学习Java的初级阶段,那么,也应该写一个Java语言实现的猜数字小游戏!! C语言实现猜数字小游戏:原文链接为 ...

  5. Java版 猜数字小游戏

    猜数字小游戏是一定是大家学习C语言编程的第一个或者是前几个小小项目了吧,今天,我们使用Java进行猜数字小游戏的实现 有对猜数字小游戏的基本思想不清楚的可以看这篇博客,里面是用C语言进行的实现以及相关 ...

  6. 用python做C语言的猜数字游戏,[Python3 练习] 007 简单的猜数字小游戏

    题目:简单的猜数字小游戏 (1) 描述 程序随机生成一个数字,玩家用键盘输入所猜数字,在规定次数内猜对为胜. (2) 要求 程序随机生成一个 1 到 100 的自然数 有 7 次机会去猜 机会用尽之前 ...

  7. JAVA猜数字小游戏(随机数Random类)

    快乐JAVA,通过不断的摸索,从C到PHP再到Python,Python再到Java-终于被我找到了属于我的本命编程语言(泪目).学起来很开心,很快乐,这种感觉就像和初恋谈恋爱一样,编程不再是写代码, ...

  8. java编写数字游戏大全_Java编写猜数字小游戏

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是java语言写的一个猜数字小游戏引用片段: import java.text.simpledateformat; impo ...

  9. 猜数字游戏java编程_Java编写猜数字小游戏

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是Java语言写的一个猜数字小游戏引用片段: import java.text.SimpleDateFormat; impo ...

最新文章

  1. mysql distinct多个字段_深入浅出Mysql索引的那些事儿
  2. sublime text 心得
  3. ICCV 2019 COCO Mapillary挑战赛冠军团队技术分享
  4. powerquery mysql数据库_window 10 下 --excel | power query 通过 ODBC链接 mysql 数据库
  5. 如何在 ASP.NET Core 中使用 Route 特性
  6. RocketMQ 主从同步机制
  7. NYOJ题目289/456/49-01背包问题汇总
  8. 软件工程 部分术语英文缩写
  9. abab的四字成语_以abab的四字成语
  10. 如何使用C++做个简单推箱子游戏
  11. python decorate 的秘密
  12. Linux服务器搭建——VMware14安装
  13. Atmel跑Linux的arm芯片,linux下烧写atmel芯片
  14. Fastq文件大小和测序覆盖度初探
  15. lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版
  16. 结对编程项目-四则运算阶段性总结
  17. 信息系统集成-辅助知识-知产/法律法规/标准化
  18. 多视图CAD检测系统乳腺X线摄影基于案例的检测性能优化
  19. java实现直角三角形、倒三角和等腰三角形的实现
  20. 在西瓜数据集上用Python实现ID3决策树算法完整代码

热门文章

  1. 【规划】RRT*算法图解
  2. ios %.2f是四舍五入吗?
  3. 学计算机的今年去当兵 转士官难吗,青年当兵学技术后,转士官到底难不难?这个答案要周知...
  4. python生成一段日期的学生随机体温表
  5. 前端:你可能不知道的动态组件玩法
  6. 最受欢迎的有养生养颜功效的15种零食
  7. C#服务器NFS共享文件夹搭建与上传图片文件
  8. html5绘制八卦图,用cad画八卦图的方法步骤详解
  9. YAM-SWD脱机下载器+DAP+串口三合一工具使用教程V1.0
  10. 用自信克服恐惧心理——职场人士寓言(15)