看着有点长,其实一块一块的挺短的
这也是分块程序设计的好处
#include<stdio.h> #include<stdlib.h> int chc(int first,int second); int diag(int dh); //前导定义 const int size=3; int board[size][size]; int i,j,numO,numX; int result=-1; //主函数 int main() { int count=1; //读入矩阵 printf("###输入结果请以O为0,X为1###\n"); for(i=0;i<size;i++) { for(j=0;j<size;j++) { printf("第%d/9次,请输入结果:(行首列辅)",count); scanf("%d",&board[i][j]); count++; printf("%d行%d列%d\n",i,j,board[i][j]); } } //首先得到一个矩阵 //检查行 int rresult=chc(i,j); //检查列 int cresult; if(result==-1) cresult=chc(j,i); //检查对角线 int diaresult=diag(i); //检查反对角线---->这地方其实不太适合调用函数,反正我的函数跑不了,要跑起来代码反而边长了 numO=numX=0; if(result==-1) { for(i=0;i<size;i++) { if(board[i][size-i-1]==1) numX++; else numO++; } } if(numO==size) result=0; else if(numX==size) result=1; int adiaresult=result; //判断结果是是谁赢 if(rresult==1 || cresult==1 || diaresult==1 || adiaresult==1) printf("X方获胜!\n"); else if(rresult==0 || cresult==0 || diaresult==0 || adiaresult==0) printf("O方获胜!\n"); else if(rresult==-1 || cresult==-1 || diaresult==-1 || adiaresult==-1) printf("无人获胜!\n"); system("pause"); return 0; } //检查行列的函数 int chc(int first,int second) { for(first=0;first<size && result==-1;first++) { numO=numX=0; for(second=0;second<size;second++) { if(board[first][second]==1) numX++; else numO++; if(numO==size) { result=0; break; } else if(numX==size) { result=1; break; } } } return result; } //检查对角线的函数 int diag(int dh) { int result2=-1; numO=numX=0; if(result==-1) { for(dh=0;dh<size;dh++) { if(board[dh][dh]==1) numX++; else numO++; } } if(numO==size) result2=0; else if(numX==size) result2=1; return result2; }