数组应用二
今天来给大家讲讲数组另外一种基本应用排序和如何使用数组实现井字棋游戏。
一、排序
利用数组可以使我们比较方便的进行排序,下面介绍两种常见的排序算法,选择排序和冒泡排序。
选择排序:以从小到大为例,通过与相邻的数据进行比较,若这个数比前面的数小,我们则把这个数的地址暂存为最小值,第一轮比较完后,我们就可以确定最小值,然后我们开始第二轮的比较,可以确定第二小的数,以此类推,我们就可以把数据从小到大排序出来。
对%4d能有个更深印象
如果想知道每轮数据的变化,我们还可以加多一个for循环用于输出。
冒泡排序:以从小到大为例,通过与相邻数据进行比较,若这个数比前面的数小,则进行交换,直到和最后一个数比较完毕,结束第一轮,然后开始第二轮比较,直到数据排序为从小到大。
二、井字棋游戏
我们可以先用一个一维数组来表示棋盘状态,每个元素代表一个格子的状态(比如空、X、O等)。玩家下棋时,通过修改数组元素来更新棋盘状态,然后根据规则判断胜负。先看代码:
在这个代码中,我们先在main函数之前定义了玩家,一个棋盘和一个win函数(用来判断玩家是否赢得游戏),再看main里面的代码,我们可以通过do…while循环来让玩家可以在游戏未结束前持续输入,在do里我们先调用print_board函数来打印出棋盘,然后对player使用条件操作符,当player为1时,表达式的值不为0,即为真,所以当前输出1(即玩家1),当player为2时,表达式的值为0,即为假,所以输出为2(即玩家2),以此类推,当player++时,我们就可以实现玩家的循环输入。
[不好意思,图片有一点被遮住了,完整代码为:
if (choice < 1 || choice > 9 || board[choice - 1] == 'X' || board[choice - 1] == 'O')
{printf("无效的选择,请重新输入。\n");
continue;}]
下面这个条件操作符用来判断如果是玩家1的选择,则输出"X",否则输出"O"。最后调用check_win函数判断哪一方的玩家赢得游戏。
好啦,今天的分享就到这里了。再次声明:作者水平有限,如有失偏颇,还请各位不吝赐教!