int a[3][5];
通常理解为a是一个3行5列的矩阵
二维数组的遍历
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;
}
##################################################