二维数组 11.3
二维数组:
一维数组可以看成把变量排成一排,通过编号访问
二维数组相当于把变量排成一个矩阵,通过行号和列号访问
定义:
类型 数组名[行数][列数];
int arr[3][5];
[0,0],[0,1],[0,2],[0,3],[0,4]
[1,0],[1,1],[1,2],[1,3],[1,4]
[2,0],[2,1],[2,2],[2,3],[2,4]
使用: 数组名[行下标][列下标];
行下标: 0~行数-1
列下标: 0~列数-1
遍历:
一般需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列
for (int i=0;i<行数;i++)
{
for (int j=0;j<列数;j++)
{
printf ("%d",arr[i][j]);
}
printf ("n");
}
初始化:
类型 数组名[行数][列数] = {{第一行},{第二行},{第三行},...};
练习1:定义一个5*5二维数组并初始化,找出最大值的坐标
注意:物理上没有所谓的多维数组,所有的多维数组都是用一维数组模拟的
练习2:定义一个5*5二维数组并初始化,找出最小值的坐标,计算出该位置周围的和
变长数组:
定义数组时,使用变量作为数组的长度,这种叫做变长数组
int arr[num];
由于编译期间变长数组的长度还不确定,只有当运行到数组的定义语句时,它的长度才真正的确定下来,而且确定后不能改变
优点:可以根据实际情况确定数组的长度,从而达到节约内存的目的
缺点:不能使用初始化语法,只能循环赋值
for (int i=0;i { arr[i] = 0; } 注意:无论什么数组,一旦数组的长度确定后,本次运行过程中都不能发生变化 练习3: 输入两个正整数N,M(1<=N<=6,1<=M<=6),定义二维数组arr[N][M],输入各个成员的数值,然后统计各个成员之和,非零的个数,所有成员的平均值,大于平均值的成员合数 获取键盘键值: 需要使用getch.h头文件中的getch函数 1.在window中把getch.h文件放入共享文件夹中 2.在终端上进入共享文件夹目录,或者getch.h所在的目录 3.复制头文件到C标准库中: sudo cp getch.h /usr/include 4.给头文件加读权限:sudo chmod 644 /usr/include/getch.h //修改getch.h的权限,不然其他用户无权限使用 上:183 下:184 右:185 左:186 enter:10 走迷宫: 1.定义二维数组作为地图 char map[15][15] = {{1,1,1,1,1,1,1,1,1},...} 2.定义变量记录角色的位置 3.获取游戏开始时间 4.进入死循环 a.清理屏幕,使用system函数 system("clear") b.显示地图(遍历二维数组) c.获取方向键并处理 getch 如果前方是路 1.把新位置赋值2 2.把旧位置赋值0 3.更新角色的坐标 d.判断是否到达出口 如果是: 获取游戏结束的时间,计算出总用时 结束程序 #include int main(int argc,const char* argv[]) int x = 1,y = 1,num=0;
#include
#include
{
char map[10][10]={
{1,1,1,1,1,1,1,1,1,1},
{1,2,1,0,0,0,0,0,0,1},
{1,0,1,0,1,1,1,1,0,1},
{1,0,1,0,1,3,0,1,0,0},
{1,0,1,0,1,1,0,1,0,1},
{1,0,1,0,1,1,0,1,0,1},
{1,0,1,0,0,0,0,1,0,1},
{1,0,1,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
int t=time(NULL);
for (;;)
{
system("clear");
for (int i=0;i<10;i++)
{
for (int j=0;j<10;j++)
{
switch (map[i][j])
{
case 0:printf(" ");break;
case 1:printf(" #");break;
case 2:printf(" @");break;
case 3:printf(" X");break;
case 5:printf(" @");break;
}
}
printf ("n");
}
if (map[x][y] == 5)
{
printf ("game over!n");
printf ("通关共用%d秒n",t = time(NULL)-t);
return 0;
}
// 获取方向键
switch(get_keyboard())
{
case 183:
{
if(map[x-1][y] != 1)
{
map[x-1][y] += 2;
map[x][y] -= 2;
x = x-1;
}
}break;
case 184:
{
if(map[x+1][y] != 1)
{
map[x+1][y] += 2;
map[x][y] -= 2;
x = x+1;
}
}break;
case 186:
{
if(map[x][y-1] != 1)
{
map[x][y-1] += 2;
map[x][y] -= 2;
y = y-1;
}
}break;
case 185:
{
if(map[x][y+1] != 1)
{
map[x][y+1] += 2;
map[x][y] -= 2;
y = y+1;
}
}break;
}
}
}



