学习目的
1.淘汰游戏和猜数字游戏;
2.三种排序法。
学习过程
1.用C语言编写两个小游戏,锻炼自己的逻辑思维,为枯燥的反复编程增添一分乐趣。
2.在很多编程中,我发现都需要用到排序操作。现在排序法也很多,我们着重说一下冒泡法,选择法,插入法。
技术
1.约瑟夫环游戏:终端输入参与的人数,大家围成一圈,再输入淘汰号码, 凡是报数为淘汰号码的人都淘汰,后面的人继续数数,输出最后一个未淘汰的人的编号。
我们先来看看实现效果:
![](https://img.haomeiwen.com/i14479845/c53e797a4383855f.png)
上述实现思路如下:先打印输入界面,输入“参加游戏人数”和“淘汰号码”;根据输入的数据将各个编号赋值为相应值,比如,编号为“1”的人,他的值为1;再进行淘汰操作,将报数为淘汰号码的人的值赋为0;最后将所有人的值打印,留下的不为0的值所对应编号的人,即为未被淘汰。具体代码如下:
![](https://img.haomeiwen.com/i14479845/410326fb2a982872.png)
代码--成功
要注意的是,“成圈”实现与“报数”实现相配合,以计数来代替循环遍历。比如:以下的代码用循环遍历,可是无法达到现预期效果。
![](https://img.haomeiwen.com/i14479845/0bd455330cb49031.png)
2.猜数字游戏: 随机产生4个不相同的数字并从小到大排序。玩家开始输入,如果位置正确且数字正确用A输出,如果数字正确位置不正确用B输出。
老样子,我们先看看实现效果:
![](https://img.haomeiwen.com/i14479845/6245a9e02359416b.png)
具体的全部代码这里不给出,仅作以下核心部分供参考:
![](https://img.haomeiwen.com/i14479845/efbe402f55e9ceaa.png)
注意:
1.产生随机数需要用到“rand()”函数,但单此还不行。当程序关闭后,下一次执行我们需要它重新生成新的随机数,因此用“srand((unsigned int)time(NULL));"以时间种种子。
2.为了使生成的随机数是各不相同的,我们引入标识符”isExist“。当生成某一个随机数时,使之与前面已经生成的随机数比较,若存在相同的随机数,即重新生成当前随机数;若不存在,且随机数生成完毕,则跳出循环。
![](https://img.haomeiwen.com/i14479845/1815be0dd6db0d2b.png)
上述排序方法为插入法,实现边赋值,边排序。
3.排序方法(从小到大)
1)冒泡法:从一列数字的第一个开始,与后面一个比较,若大于,则交换;反之,继续,将大值逐一”沉淀“。
![](https://img.haomeiwen.com/i14479845/59043131d689b682.png)
Tips:使用两层循环,第一层为指向数,第二层为遍历。
2)选择法:从一列数字的第一个开始遍历,将其提出来与后面的一一比较,若大于,则交换;反之不操作。
![](https://img.haomeiwen.com/i14479845/a86368d3dc1f0a4c.png)
Tips:使用两层循环,第一层为全部遍历,第二层为部分朝后遍历。
3)插入法:从一列数字第一个开始,朝前比较,若小于,则交换;反之,不操作。即逐个插入。
![](https://img.haomeiwen.com/i14479845/71da9698547af909.png)
Tips:使用两层循环,第一层为遍历,第二层为部分朝前遍历。
感悟
编写两个游戏的过程中遇到了不少问题,比如,淘汰游戏中的”成圈“操作,猜数字游戏中的”生成随机数“操作。虽然不懂,但也试着去学习,摸索,最终也实现了功能。当代码成功的那一刻,内心是无比开心的。对于排序方法在很多地方都有用到,因此熟知一两种方法是必要的,整个C语言学习也一样,熟能生巧嘛。
网友评论