C语言从猜数字游戏中理解数据结构

目录
  • 1 猜数字游戏-问题描述
  • 2 问题分析
  • 3 问题解决
    • 3.1 猜一次
    • 3.2 直到猜到为止
    • 3.3 限定猜10次
    • 3.4 处理特殊情况
    • 3.5 猜下一个数

1 猜数字游戏-问题描述

这个游戏一点都不陌生,猜价格是一度很火的综艺节目。很多老师也用这个案例作为课堂案例。在这里,我想把重点放到“思维层面上”,即:为什么要这样写代码,就实现了猜数字游戏的功能。

我们先来说真人版的猜数字游戏:

A:心里默默出一个数字(约定一个范围,假设[1-100]之间),开始猜把

B猜:50

A: 大了

B猜:25

A:小了

B猜:150

A:你违规了

B猜:30

A:猜对了!正确答案就是30!是否继续猜?

B:需要

2 问题分析

从前面的真人版,换成人机版:

现实世界 程序模拟 实现途径
A 电脑  
心里默默出一个数字 一个变量的值 随机数/手动在程序里悄悄定义的变量值/其他(总之就是你解决:产生一个数的方法)
B猜 B敲键盘 scanf扫描键盘
A说大了、小了、对了 计算机判断并输出判断结果 if判断
A和B之间的继续猜 重复事件 循环

所谓“天下大事必做于易,天下难事必做于细”,

有了一个对现实问题的一个分析,你还可以把一个问题进行逐层简化,然后再逐层丰富其功能:

1)猜一次

2)直到猜到为止

3)限定猜的次数,并显示当前是第几次猜

4)处理特殊情况:如果你提前猜到了;如果你猜的数超出了范围

5)猜更多的数

6)对游戏计时、一分钟猜对得越多还可以设关卡

这样,就会对一个较为综合的问题,有了一个自己的方案,接下来就可以开始尝试逐个击破了。

3 问题解决

3.1 猜一次

用IPO的思维,继续分析这种情况,其故事流程是不是这样的:

// I:输入

1)计算机:出一个数

2)用户: 键盘输一个数(猜)

3)计算机:获得这个数

//处理并输出

4)计算机:判断这个数和自己出的数的大小关系

5)计算机:根据不同的关系,告诉你猜大了、小了、对了

6)计算机:告诉你正确答案

根据输入与输出,确定要定义的变量:计算机出的数、用于猜的数

程序员要做的:就是把上面的故事流程,用一种编程语言描述出来。

而故事的流程就是:算法;

编程语言描述出来的就是:程序

那么,我们就可以得到以下程序了:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int guess,magic;       //magic计算机想的数
	srand(time(NULL));     //用时间做种子,产生一个随机数
	magic = rand()%100+1;    //随机数落到1-100之间
	printf("guess a number:\n");     //用户猜一个数
	scanf("%d",&guess);
	if(guess>magic)           //计算机判断,并告诉你猜的情况
		printf("too big!\n");
	else if(guess<magic)
		printf("too small!\n");
	else
		printf("right!\n");
	printf("the right number is %d\n",magic);
	return 0;
}

3.2 直到猜到为止

接着上面的故事。

还要继续猜:

1)计算机出的数是否应该变化? ——显然,不能变,变了就作弊了

2)用户还要继续猜 —— 那么就还要再敲键盘、计算机还要继续获得这个数(3.1节代码:Line9-10)

3)计算机还要继续判断——还要判断大小关系(3.1节代码:Line11-16)

因此,3.1节代码Line9-16就应该反复做,循环体就确定了;

直到猜到为止: 循环条件则是magic!=guess

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int guess,magic;
	srand(time(NULL));
	magic = rand()%100+1;
	do{       ///用户和计算机判断是循环体
		printf("guess a number:\n");
		scanf("%d",&guess);
		if(guess>magic)
			printf("too big!\n");
		else if(guess<magic)
			printf("too small!\n");
		else
			printf("right!\n");
	}while(guess!=magic);  //循环条件
	printf("the right number is %d\n",magic);
	return 0;
}
}

3.3 限定猜10次

循环结束条件就变为:猜了10次结束

那么就需要一个计数器,每猜一次,计数器+1, 到10次,循环结束;

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int guess,magic;
	int count=0;      //计数器,一次都还没有猜,初始为0
	srand(time(NULL));
	magic = rand()%100+1;
	do{
	    count++;        //猜1次,计数器加1
		printf("the %dth: guess a number:\n",count);     //显示第几次猜
		scanf("%d",&guess);
		if(guess>magic)
			printf("too big!\n");
		else if(guess<magic)
			printf("too small!\n");
		else
			printf("right!\n");
	}while(count<=10);   //判断猜到10次了没有
	printf("the right number is %d\n",magic);
	return 0;
}

3.4 处理特殊情况

情况1:如果用于猜的范围超出[1,100],给出提示

显然,从键盘获得用户猜的数(3.3节代码Line13)后,就应判断:

—— a)是否超过了[1,100]的范围,是,本次不判断猜的情况,用户重新猜下一次;

——b)否,则判断用户猜的情况。

情况2:如果不到10次就猜到了,提前结束循环;

这就是代码输出“right!”的情况(3.3节代码Line19),同时加上结束循环的语句break就ok。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int guess,magic;
	int count=0;
	srand(time(NULL));
	magic = rand()%100+1;
	do{
	    count++;
		printf("the %dth: guess a number:\n",count);
		scanf("%d",&guess);
		if(guess>100 ||guess<1)    //处理情况1
		{
			printf("You guess the number should be in the range [1,100]:\n");
			continue;      //跳过本次循环
		}
		if(guess>magic)
			printf("too big!\n");
		else if(guess<magic)
			printf("too small!\n");
		else
		{
			printf("right!\n");
			break;             //处理情况2
		}
	}while(count<=10);
	printf("the right number is %d\n",magic);
	return 0;
}

3.5 猜下一个数

分析:

1) 上一个数的猜,已经结束;—— 3.4节代码中的Line29

2) 询问用户,是否继续进行游戏; ——输出一条询问语句

3) 输入用户的意愿; —— scanf输入

4) 如果是,则继续做游戏;否则游戏结束 ——新的循环是否继续的条件

5) 重新给10次猜的机会 ——计数器清0

6) 计算机再重新想一个数; ——3.4节代码中的Line 8-9

7) 继续猜; ——3.4节代码中的Line 10-29

于是3.4节代码的Line8-29是需要继续作为新的循环的循环体。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int guess,magic;
	int count;
	int reply=0;   //用户是否继续游戏
	do{
		count=0;               //每猜一个新的数,计数器清0
		srand(time(NULL));      //重新产生一个新的数来猜
		magic = rand()%100+1;
		do{
			count++;        //猜1次,计数器加1
			printf("the %dth: guess a number:\n",count);
			scanf("%d",&guess);
			if(guess>100 ||guess<1)
			{
				printf("You guess the number should be in the range [1,100]:\n");
				continue;
			}
			if(guess>magic)
				printf("too big!\n");
			else if(guess<magic)
				printf("too small!\n");
			else
			{
				printf("right!\n");
				break;
			}
		}while(count<=10);
		printf("the right number is %d\n",magic);
		printf("Is the game continue? 1(yes) or 0(no):\n"); //询问是否继续游戏
		scanf("%d",&reply);   //获得用户的意愿
	}while(reply==1);        //如果意愿是1,则继续游戏;否则,整个程序结束
	return 0;
}

小结:

程序其实就是用计算机的语言,描述你要解决的问题。

所以,对初学者来说,学好程序有如下点:

1)学会把现实问题和计算机世界做一个抽象,如上面的表格

2)把一个大的问题逐层简化

3)从小问题入手,层进式解决问题

当然,分析问题是整个过程的重点,切勿拿着个问题,就想着代码怎么写,算法才是程序的灵魂。

同学们还可以在上面代码的基础上,让这个游戏的功能更加丰富,继续加油吧!

到此这篇关于C语言从猜数字游戏中理解数据结构的文章就介绍到这了,更多相关C语言 数据结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用C语言实现猜数字小游戏

    本文实例为大家分享了C语言实现猜数字小游戏的具体代码,供大家参考,具体内容如下 实现猜数字的游戏: 要用程序完成以下几步: 1.电脑自动生成随机数(1到100之间的数字) 2.玩家输入自己猜的数字(输入0 -- 100之间的数字) 3.猜对了就输入:猜对了 猜错了就输入:猜大了,或者是猜小了 4.可以多次玩这个游戏. 任何程序都要从main函数开始去看: 找到下面程序中的main函数从那里开始分析: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdi

  • 详解C语言实现猜数字游戏

    目录 一:猜数字游戏基本介绍&对程序预期 二:程序设计思路 1.总体思路: 2.菜单部分函数: 3.游戏部分函数 4.主函数部分 5.代码主体 三:总结 前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法. 一:猜数字游戏基本介绍&对程序预期 .猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为

  • C语言实现简单猜数字小游戏

    本文实例为大家分享了Java实现图片旋转的具体代码,供大家参考,具体内容如下 猜数字游戏是令游戏机随机产生一个100以内的正整数 用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较 并提示大了("Too big"),还是小了("Too small"),相等表示猜到了 如果猜到,则结束程序.程序还要求统计猜的次数,如果1次猜出该数,提示"Bingo!" 如果3次以内猜到该数,则提示"Lucky You!"

  • C语言实现简单的猜数字游戏

    本文实例为大家分享了C语言实现简单的猜数字游戏的具体代码,供大家参考,具体内容如下 1.游戏介绍 此游戏是电脑随机生成一个1-99的数字(生成数字范围可自行更改),然后玩家一直猜数字,最终猜对为止.废话不多说,直接上完整代码. 2.游戏完整代码 #include<stdio.h> #include<time.h> #include<stdlib.h>   int juge(int guess,int number) {     int t=0;     if(guess

  • C语言代码实现猜数字游戏

    目录 前言: 一:猜数字游戏基本介绍&对程序预期 二:程序设计思路 1.总体思路: 2.菜单部分函数: 3.游戏部分函数 4.主函数部分 5.代码主体 三:总结 前言: 本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法. 一:猜数字游戏基本介绍&对程序预期 .猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到

  • c语言轻松实现猜数字小游戏

    目录 一.前言 二.游戏逻辑 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 2.设置随机数范围的方法 六.完整代码 一.前言 在学习了循环.分支.和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣.不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉! 二.游戏逻辑 1.打印选择菜单(1.play.0.exit) 2.调用rand()函数生成随机数 3.设置随机数范围 4.猜数字 5.判断猜的大小 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 仅仅使

  • C语言实现猜数字游戏的两种方法

    目录 前言 一.游戏描述 二.代码实现 1.生成游戏菜单 2.构建主函数 3.构建游戏函数 三.二分法实现猜数 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下面我将详细介绍该游戏的实现和编程逻辑.并用二分法速通该小游戏.玩小游戏的同时,也能对C语言控制语句有更好的认识. 一.游戏描述 游戏内容 顾名思义,该程序让系统随机生成一个0-100的整数,让玩家来猜,玩家猜数字后,系统给予玩家回馈并且统计玩家猜的次数,直到玩家猜对为止. 游戏方法 1.生成游戏菜单 1.

  • C语言从猜数字游戏中理解数据结构

    目录 1 猜数字游戏-问题描述 2 问题分析 3 问题解决 3.1 猜一次 3.2 直到猜到为止 3.3 限定猜10次 3.4 处理特殊情况 3.5 猜下一个数 1 猜数字游戏-问题描述 这个游戏一点都不陌生,猜价格是一度很火的综艺节目.很多老师也用这个案例作为课堂案例.在这里,我想把重点放到“思维层面上”,即:为什么要这样写代码,就实现了猜数字游戏的功能. 我们先来说真人版的猜数字游戏: A:心里默默出一个数字(约定一个范围,假设[1-100]之间),开始猜把 B猜:50 A: 大了 B猜:2

  • 利用C语言实现猜数字游戏

    本文实例为大家分享了C语言实现猜数字游戏的具体代码,供大家参考,具体内容如下 实现效果如图: 代码如下: #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int Guess,Num; //Guess猜数,Num随机数 int Next; //下一次执行 do { system("cls"); //清屏 printf("-------------------

  • 基于C语言实现猜数字游戏

    前言 系统生成一个[1,100]之间数字,用户随便输入一个整数,如果用户输入的数字比系统生成的数字小,提示"猜低了",如果用户输入的数字比系统生成的数字大提示猜高了,如果相同,提示猜对了. 一.先生成一个[1,100]的随机整数 C语言的标准库中已经包含了很多现成的功能,rand可以生成一个随机整数,可以查阅cplusplus文档.浏览器输入www.cplusplus.com.cstdlib这是C++风格的写法,stdlib.h是C语言风格的写法,C++也可以用stdlib.h.C语言

  • 用C语言实现猜数字游戏

    本文实例为大家分享了C语言实现猜数字的具体代码,供大家参考,具体内容如下 问题:计算机随机生成一个数字,用户进行猜数字,当用户猜错时,提醒用户猜高/猜低,直到用户猜的数字与计算机给的随机数一致时,提示猜对了并结束本次游戏. 思路:整个程序分为三个部分. 1.使用printf完成一个主菜单,方便用户操作. 2.写一个game函数,完成猜数字游戏的过程. 3.主函数,调用game函数,最终实现猜数字游戏. 重点:如何生成一个随机数. 如果直接使用to_guess = rand() % 100 + 1

  • java语言实现猜数字游戏

    本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下 随机生成0~100的数字,通过控制台输入猜测数字,输出进行提示,知道猜测正确后,结束本次猜数字游戏,从而决定是否需要重新玩 代码如下: import java.util.Random; import java.util.Scanner; public class GuessNumber1{ public static Scanner scanner = new Scanner(System.in);//输入 publ

  • C语言实现猜数字游戏

    本文实例为大家分享了C语言猜数字的具体代码,供大家参考,具体内容如下 题目:电脑随机给出一个数字,在一定范围内猜,有提示 问题分析: 电脑根据函数随机给出一个范围内的数字: 用户输入数字,去猜大小 对比数字,电脑给出提示 不断循环,直到猜正确 注意: 因为随机函数rand()是特殊的函数,计算机不会实现真正的随机数,所以需要一个seek来传给 rand(). 代码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<

  • C语言实现简单猜数字游戏

    前言 对于c语言初学者来说用c语言实现猜数字游戏是基本的问题,本篇文章会细致的讲解如何用代码来实现猜数字游戏.希望读者在阅读本篇博客前学习玩分支与循环和最基本的c语言语法知识. 提示:以下是本篇文章正文内容,下面案例可供参考 一.预期实现猜数字游戏的功能 1:什么是猜数字游戏 猜数字游戏顾名思义是电脑随机生成一个数字,让玩家来猜.如果没猜对,电脑会提示玩家猜大了还是猜小了,玩家可以多次尝试,直到玩家猜对了本次游戏就结束. 2:预期效果 在实现猜数字的基础上,玩家如果觉得不过瘾可以选择再来一次,如

随机推荐