1 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 <= ' ') || (ch == 't') ) { 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件事: 欢迎一起交流! ![]() |
![]() 鲜花 |
![]() 握手 |
![]() 雷人 |
![]() 路过 |
![]() 鸡蛋 |
• 新闻资讯
• 活动频道
更多