二維數組-棋盤
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void setdata(int a[8][8]); //设置随机数
void out(int a[8][8]); //输出数组
void outDiagonal(int a[8][8]); //输出对角线元素的值
void mine(int a[8][8],int x, int y); //按“扫雷”游戏的规则输出相邻格子
void change(int a[8][8]); //按要求改变数值
int main()
{
int a[8][8], x, y;
setdata(a);
out(a);
outDiagonal(a);
printf("Enter a position:");
scanf("%d %d", &x, &y);
mine(a,x,y);
change(a);
out(a);
return 0;
}
void setdata(int a[8][8])
{
int i,j;
srand(time(NULL));//需要用当前时间作“种子”,以便每次运行取得的序列不同
for(i=0; i<8; i++)
for(j=0; j<8; j++)
a[i][j]=rand()%50+1;
return;
}
//按行序优先输出数组
void out(int a[8][8])
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
//输出对角线元素的值(从左上到右下、从右上到左下)
void outDiagonal(int a[8][8])
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(i==j)
printf("%4d",a[i][j]);
else
printf(" ");
}
printf("\n");
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if((i+j)==7)
printf("%4d",a[i][j]);
else
printf(" ");
}
printf("\n");
}
}
//按扫雷游戏规则,输出a[x][y]周围的8个数字
void mine(int a[8][8],int x, int y)
{
int i,j,LL,RR,UU,DD,sum=0;
LL=x-1;
RR=x+1;
UU=y-1;
DD=y+1;
if(LL<0)
LL=0;
if(RR>7)
RR=7;
if(UU<0)
UU=0;
if(DD>7)
DD=7;
for(i=LL;i<=RR;i++)
{
for(j=UU;j<=DD;j++)
{
sum += a[i][j];
if(i==x&&j==y)
printf(" ");
else
printf("%4d",a[i][j]);
}
printf("\n");
}
sum=sum-a[x][y];
printf("the sum of the 8 numbers is %4d\n",sum);
}
//按题目中所言规则更改元素的值
void change(int a[8][8])
{
int i,j,tmp;
for(i=1;i<8;i++)
{
for(j=0;j<8;j++)
{
tmp=j+1;
if(tmp>7)
tmp=0;
a[i][j]=a[i-1][j]+a[i-1][tmp];
}
}
}