数组(3)二维数组

<1>二维数组的基本内容

(1)基本了解

  • 举例:int a[3][5];

  • 概念:可以将a理解为一个三行五列的矩阵;(由此证明3代表行,5代表列)

(2)二维数组的遍历

  • 代码:for(i=0;i<3;i++){

    for(j=0;j<5;j++){
    a[i][j]=i*j;
    }
    }
  • a[i][j]是一个int;

  • 表示第i行和第j列上的单元;

  • 提出问题:a[i,j]表示的含义

1)在数学中:a[i,j]表示a的i行j列;
2)但是在C中:a[i,j]是一个表达式,逗号是一个运算符,这个表达式的结果为a[i,j]=a[j]

————2)相关知识:逗号运算符是把后面的值赋给前面

(3)二维数组的初始化

int a[][5]={
{0,1,2,3,4},
{2,3,4,5,6},
};

  • 列数是必须给出的,行数可以由编译器来数;
  • 每行一个{},用逗号分隔;
  • 最后的逗号可以存在;
  • 省略可以补0;
  • 也可以用定位仅适用于C99;

(4)二维数组典例——tic-tac-toe游戏

  • 1)题目信息:读入一个3×3的矩阵,矩阵上的数字为1表示该位置上有一个X,矩阵上的数字为0表示该位置上有一个O;

  • 2)题目要求:程序判断这个矩阵中是否有获胜的一方(三个相同符号连成一条线),输出表示获胜的一方的字符X或O,或输出无人获胜

1.读入矩阵

const int size=3;
int board[size][size];
int i,j;
int numOfX;
int numOfO;
int result=-1;//-1:没人赢;1:X赢;0:O赢
//读入矩阵
for(i=0;i<size;i++){
for(j=0;j<size;j++){
scanf("%d",&board[i][j]);
}
}

2.检查行

//检查行
for(i=0;i<size && result= =-1;i++){
numOfO=numofX=0;
for(j=0;j<size;j++){
if(board[i][j]= =1){
numofX++;
}else{
numOfO++;}
}

//在同一行中,行号不变,列数不断加一;在同一行中随着列数的累加如果O的数量不增加,则X的数量增加,反之一样;

if(numOfO= =size){
result=0;
}else if(numOfX==size){
result=1;
}

//如果O的数量与size相同,则O取胜;反之X取胜;

}

3.检查列

if(result= =-1){
for(j=0;j<size && result= =-1;j++){
numOfO=numOfX=0;
for(i=0;i<size;i++){
if(board[i][j]= =1){
numofX++;
}else{
numOfO++;
}
}
if(numOfO= =size){
result=0;
}else if(numOfX= =size){
result=1;
}
}
}

4.检查对角线

numOfO = numOfx = 0;
for ( i=0; i<size; i++ ){
if ( board[il[i] == 1 ) {
numOfX ++;
}else {
numOfO ++;
}
}
if ( num0fO == size ) {
result = 0;
} else if (numOfX == size ) {
result = 1;

——————正对角线——————————

numofo = num0fX = 0;
for ( i=0;i<size; i++ ) {
if ( board[il[size-i-l] == 1 ) {
num0fX ++;
} else {
numOfO ++;
}
}

—————反对角线(20;11;02)—--

posted @   瑜阳  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示