疾风之刃网游进不去:C语言问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 03:15:34
1 从键盘输入一个3×5的细胞矩阵,1代表活细胞,0代表死细胞, 如果细胞周围有两个或者三个细胞是活的,那么他下一代就是活的,否则下一代就是死的。键盘录入第一代细胞的状态,然后打印出第二代细胞的图形。
2 编写游戏,游戏开始,双方各有100分底分。每一回合玩家通过键盘从“石头、剪刀、纸”三种手势中选择一种,电脑也随机选择一种,然后程序按“纸胜石头;石头胜剪刀;剪刀胜纸”的规则判断本回合的胜负方,负方将被扣去10分给胜方。以上过程反复进行,直到其中一方被扣成零分。当玩家被扣成零分,则本局游戏结束,玩家按任一键继续游戏;如果是电脑被扣成零分,则显示祝贺词,并根据玩家打败电脑所用的回合数。游戏过程中按Q键随时可以终止游戏。
在回答的时候最好带有思路和流程图,以便我容易看懂.
谢谢!

6月9日 09:30 第一个问题,x[3][4]是一个二维数组,所以要用两重星号,你可以这么理解,*(x+1)是第一行的行首地址,也就是说,它相对于一个数组y[4]={5,6,7,8}的首地址,那么*(*(x+1))就是这个y[4]的首个元素了,也就是5,即x[1][0]的值

这样说一下,答案A也就很好理解了,首先*(x+1)的值是二维数组第1行(从0开始计数)的首地址,然后*(x+1)+1就是二维数组第1行第1列的地址,再取一个*就变成了该地址中的内容,即x[1][1]为6

总结一下就是,n维数组,就需要取n重星号,每取一重星号就降一维,但是注意除非取了n重星号,否则前面的1到n-1重星号得到的都是地址值,也可以勉强理解为该维的首元素地址

第二个问题,你这种写法是错误的,因为p是一个指向struct sk的指针,不应该强制转成指向整型的指针,除非你非有这样做的理由。

下面的论述仅在你非要这样强制转换时成立:

data.n是一个整型变量(int),所谓的用指针指向它,其实可以理解为把一个指针型变量的值赋为data.n的地址,这样我们通过&data.n首先获取了n的地址。
这里存在一个问题,因为指针赋值要求是同类型的,也就是,一般意义下,一个int*的指针只能指向int型的数据,一个doulbe*的指针只能指向double型的数据,同样,一个stack sk *型的指针也只能指向stack sk型的数据,所以,这里如果直接赋值是不行的,必须要把int *强制转换成stack sp *,所以就有了你上面的赋值公式