int a[3][5];
通常理解为a是一个3行5列的矩阵

 

C语言的二维数组_检查和

二维数组的遍历
for (int i=0;i<9;i++){
    for (int j=0;j<3;j++){
        printf("\n%d\n",m[i][j]);
    }
}

a[i][j] 是一个int
表示第i行第j列上的单元
a[i,j]    中 ,是逗号运算符 即等于 a[j]

二维数组的初始化
int a[][5] = {
    {0,1,2,3,4},    //a[0]
    {2,3,4,5,6},    //a[1]
};

列数是必须给出的,行数可以由编译器来数
每行一个{},逗号分隔
最后的逗号可以存在,有古老的传统
如果省略,表示补零
也可以用定位(*C99 ONLY)

XO比赛例子

//#include <stdio.h>
//int main(){
//	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]);
//		}
//	}
//	//检查行
//	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++;
//			}
//		}
//		if(numOfO==size){
//			result=0;
//		}else if(numOfX==size){
//			result=1;
//		}
//	}
//	//检查列
//	for (j=0;j<=size&&result==-1;j++){			//检查和列的区别为 内外for循环  控制的i,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;
//		}
//	}
//	//检查正对角线
//	numOfO = numOfX=0;
//	for (i=0;i<size;i++){
//		if(board[i][i]==1){
//			numOfX++;
//		} else{
//			numOfO++;
//		}
//	}
//	if (numOfO==size) {
//		result=0;
//	}else if(numOfX==size){
//		result=1;
//	}
//	//检查反对角线
//	numOfO = numOfX=0;
//	for (i=0;i<size;i++){
//		if(board[i][size-i-1]==1){
//			numOfX++;
//		} else{
//			numOfO++;
//		}
//	}
//	 
//}
#include <stdio.h>
/*判断3×3矩阵中的元素是否连成一条线,元素为0或者1;
0连成一条线判定O赢,1连成一条线判定X赢,否则谁都没赢*/
 
int main() {
    const int size = 3;
    int board[size][size]; //定义二维数组
    int result = -1; //-1:谁都没赢;0:O赢;1:X赢
    int numof_0_left = 0;
    int numof_0_right = 0;
    int numof_1_left = 0;
    int numof_1_right = 0;
    //初始化二维数组
    for(int i = 0; i < size; i++) {
        for(int j = 0; j < size; j++) {
            scanf("%d", &board[i][j]);
        }
    }
 
    //STEP1: 检查每行和每列是否连成一条线
    for(int i = 0; i<size&&result==-1; i++) {   //循环终止条件!
        //定义局部变量
        int numof_0_row = 0;
        int numof_1_row = 0;
        int numof_0_col = 0;
        int numof_1_col = 0;
 
        for(int j = 0; j < size; j++) {
            //检查i行j列
            if(board[i][j] == 0) {
                numof_0_row++;
            }else {
                numof_1_row++;
            }
            //检查j行i列
            if(board[j][i] == 0) {
                numof_0_col++;
            }else {
                numof_1_col++;
            }
        }
        //每检查完一行或者一列,判断是否连成一线条线
        if(numof_0_row == size || numof_0_col == size) {
            result = 0;
        }
        else if(numof_1_row == size || numof_1_col == size) {
            result = 1;
        }
    }
 
    //STEP2: 检查对角线
    for(int i = 0; i<size&&result==-1; i++) {
        //左对角线
        if(board[i][i] == 0) {
            numof_0_left++;
        }else {
            numof_1_left++;
        }
        //右对角线
        if(board[i][size-i-1] == 0) {
            numof_0_right++;
        }else {
            numof_1_right++;
        }
    }
    if(numof_0_left == size || numof_0_right == size) {
        result = 0;
    }else if(numof_1_left == size || numof_1_right == size) {
        result = 1;
    }
 
    //STEP3: 输出结果
    if(result == 0) {
        printf("O赢\n");
    }else if(result == 1) {
        printf("X赢\n");
    }else {
        printf("谁都没赢\n");
    }
    return 0;
}


##################################################