多哈

IPLabsession3

发布时间:2022/2/27 15:40:10   点击数:
j

Hello,大家好,这里是格院生存指南!这次实验我觉得是所有实验当中最有趣的一个,从头设计一个井字棋游戏,比上次的猜数字游戏有意思多啦,想想就令人兴奋,让我们一起来看看吧!

01

#数组是啥

Part01

数组

#设想一种情况,我们想探究一天的温度变化,需要记录每一分钟的温度值,那么对于这样一个数据,我们光是创建这24*60=个变量就很麻烦了,更别说记录数据了。温度变化情况#那么,针对这种情况,C语言提供了一个很有用的工具,数组(array),它能通过序号把一系列相同数据类型的变量集中起来管理。数组的编号是从0开始的,比如定义一个数组inta[2],那它里面的元素是a[0]和a[1],这一点很容易搞混,同学们一定要注意。#我们可以用a[0]=10给数组赋值,或者在初始化的时候就说明,如:inta[5]={0,1,2,3,4},当然不知道填什么值的时候也可以不填,或者用inta[5]={0}来将它全部初始化为0。

Part02

二维数组

#当我们记录的数据种类比较多的时候,一维数组就不太够用了。#回到刚才的例子,比如我们要记录5分钟内温度和湿度的变化,一维数组就有点捉襟见肘。#这个时候我们就需要用到a[5][2]这样的二维数组。前面的数字5指的是5个一维数组,后面的数字2指的是每个一维数组中有两个元素。#形象地理解就相当于excel里面5行2列的表格。二维数组的图像理解5x2的图表所以二维数组a[x][y]也被叫做x行y列的数组。#二维数组读取顺序是按照末尾的角标递增的,也就是a[0][0],a[0][1],a[1][0],a[1][1],a[2][1].......#二维数组也是按照每个一维数组依次来赋值的,如

inta[3][2]={{0,1},{2,2},{3,4}};百说不如一练,让我们看看今天的实验。

02

#LabTasks

Task1

斐波拉契数列(迭代,数据存储方式)

#这里是叫我们创建一个斐波拉契数列,只定义为前两项为0和1,之后每一项等于它前面两项的和。#那么我们生成这个数列的时候,也是用for循环来生成

Fibonacci[i]=Fibonacci[i-1]+Fibonacci[i-2]并且储存进一个数组Fibonacci[]中就可以了#生成之后,我们分别打印前10,20,50项来看看,这里打印50项的时候,我们可以注意到,已经超过了int的范围,结果变成负数了。要修复这个问题也很简单,还记得long这个关键字吗,它和int组合可以使int的储存字节变多,从而存储更多的数据,这里我们可以用到longlongint来存储斐波拉契数列,在printf中longlongint对应的占位符是%lld当然,如果有同学还记得我们在IPlab1讲过的float的储存方式,应该知道float的范围是比int大很多的,所以我们这里使用float也是可以的

Task2

打印棋盘(算法)

#首先定义一个3*3的二维数组,第一个值存储的是row,第二个值存储是columnarray[0][0]array[0][1]array[0][2]array[1][0]array[1][1]array[1][2]array[2][0]array[2][1]array[2][2]棋盘#接下来我们来把这三种输入方式转换为row和column的值:#用(a)做输入是最简单的

(int)数字除3就是row的值

数字%3就是column的值

很容易将键盘和棋盘对应

#同理(b)做输入就是(a)减去一个1就行,也非常简单#如果用(c)做输入的话,就需要简单设计一下

对于row我们肯定也是利用(int)(数字-1)除3,然后再用2减去这个值得到

column值的获取和(b)类似,减一取余就行了

Task3

井字棋or三子棋(函数,数组,逻辑判断,面向过程)

#这个东西大家小时候肯定都玩儿过,这里我们要用C语言去实现它。这个实验我觉得是整个IP实验中最有趣,也是最复杂的。在这个实验我们会写很多函数,然后再一一测试、组装,很接近真实的C语言程序开发了。

井字棋

这次的要求非常得多哈,我挑几个比较重要的点出来讲讲:

这里我们需要用一个二维数组来存储数据,即array[3][3]

使用电脑小键盘1-9来对应棋盘上9个点且不能使用if或者switch进行判断

玩家先行,电脑随机落子,且每次下棋之后,要打印当前棋盘,可以疯狂空行来清屏

需要输入检测模块,不能选择已经有棋子的位置落子

除了胜负还要加入平局的判断

设计这样一个游戏,我简单归纳了一下我们需要哪些模块,这个思维导图是我自己根据我自己的方法来设计的,仅供参考,不需要和我一样Tic-Tac-Toe模块思维导图

1

这里需要注意的是二维数组的传递,我给大家推荐两种方式(这里直接复制可能出错:error:stray‘\’inprogram,可以把出错的地方重新打一遍就行)

#includestdio.hvoidfun1(inta[3][3]){printf("fun1%d",a[0][0]);}voidfun2(int(*a)[3]){printf("fun2%d",a[0][0]);}intmain(){intarray[3][3]={0};fun1(array);fun2(array);}具体为什么,等学习完指针之后可以参考这篇文章



转载请注明:http://www.linzhilingl.com/dhfj/23435.html

------分隔线----------------------------