汉扬编程 编程大纲 直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

C语言是面向过程的,而C++是面向对象的

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

C和C++的区别:

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

直播答题火了!一个简单的猜数小游戏C语言编程基础入门学习实现

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

一、题目描述

现在要实现一个猜拳小游戏,让CPU来猜测你内心定下的一个数字。猜测的数字范围是1~100,采用二分搜索策略来猜测,且CPU最初猜测的数字是50。比如,如果CPU猜测的数字小了,那么就在50~100之间再猜一个数字,如果猜测的数字大了,那么就在1~50之间猜测一个数字,依次类推。

二、题目及思路分析

2.1 从题述来看,有如下几个关键点需要思考,以及这些关键点对应的解决思路如下:

2.1.1关键点1.获取用户的输入

你要和计算机玩这个猜数游戏,那么,你得以某种方式告知计算机如何获取你的输入吧。比如计算机猜了一个数,你得告诉计算机猜大了还是猜小了。然后计算机再根据你的指示继续猜测。

2.1.2关键点2.处理用户的异常输入

你和计算机玩游戏,计算机再等着你的指示,你却输入了一个莫名其妙的指示,那么计算机也要能处理你的瞎输入。

2.1.3关键点3.二分搜索策略

二分搜索策略,是怎么个策略?

2.1.4关键点4.你骗了计算机

题述中说,你如果没有骗计算机,计算机会很快猜出。但是你蛋疼,就是要骗人家,那么计算机该如何处理?

2.2 思路分析

针对2.1提出的几个关键点,我们来一一破解。

2.2.1关键点1.获取用户的输入

思路:我们预先定义一个规则:

如果计算机猜大了,你输入“g”告诉它大了;

如果计算机猜小了,你输入“l”告诉它小了;

如果计算机猜对了,你输入“y”告诉它猜对了;

如果计算机被骗了,你输入“n”告诉它被骗了;

对于这种一次只接收1个字符的情况,getchar函数最好了。

2.2.2关键点2.处理用户的异常输入

2.2.1中,我们定义了你应该输入的字符集。但是你可能会出于故意或者无意,输入一些定义之外的字符集,比如你输入了“gg”,或者你输入了“daf”等无意义的东西,那么你需要使用getchar函数清除掉这些垃圾数据。

2.2.3关键点3.二分搜索策略

这个才是本题的重点。可以设置一个最高值100,一个最低值1,还有一个当前值。如果计算机猜测的数字大了,那么更新最高值为当前值,最低值不变,当前值=(最高值 + 最低值)/2;如果计算机猜测的数字小了,那么更新最低值为当前值,最高值不变,当前值=(最高值 + 最低值)/2。

2.2.4关键点4.你骗了计算机

你骗了人家,那么计算机就要继续从50猜起,所以可以重置猜测的数为50.

三、代码

OS:Windows XP sp3

编译器:TDM-GCC 4.9.2 32-bit Release

根据上述分析,代码如下:

#include

#include

void ClearBuff()

{

int ch;

while( (ch = getchar()) != \’\\n\’)

continue;

}

int main(void)

{

int ch = 0, guess = 50, begin = 1, end = 100;

printf(\”我猜,你的数字是: %d ,对吗?\\n\”, guess);

while ((ch = getchar()) != EOF)

{

if( (ch

{

continue;

}

if(isalpha(ch))

{

if(isupper(ch))

{

ch = ch + 32;

}

}

if( \’y\’ == ch )

{

puts(\”哈哈我猜对了!\”);

ClearBuff();

break;

}

switch(ch)

{

case \’g\’:

end = guess;

guess = (begin + end) / 2;

printf(\”我猜,你的数字是: %d ,对吗?\\n\”, guess);

ClearBuff();

break;

case \’l\’:

begin = guess;

guess = (begin + end) / 2;

printf(\”我猜,你的数字是: %d ,对吗?\\n\”, guess);

ClearBuff();

break;

case \’n\’:

puts(\”做人要诚信!\”);

begin = 1;

end = 100;

guess = 50;

printf(\”我猜,你的数字是: %d ,对吗?\\n\”, guess);

ClearBuff();

break;

default:

puts(\”我看不懂你在说什么!\”);

ClearBuff();

break;

}

}

puts(\”再见!\”);

return 0;

}

四、运行结果

五、技术点

完成这道题,需要掌握的技术点其实就是getchar函数的使用。本题中,使用getchar函数,我们完成了3件事:

1)接收缓冲区中的字符;

2)丢弃到不需要的数据;

3)判断输入的结束。

六、算法点

二分搜索算法。“二分搜索”的思想在很多地方都会用到,比如在有序列表中二分查找一个数,二叉树中查找一个数等。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6058.html

利用树莓派控制步进电机——Python语言

最短路径—Dijkstra算法(计算机学习)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部