------Java培训、Android培训、iOS培训、.Net培训--------
09-03 二维数组存储
1.概念
二维数组在概念上是二维的,即是说是其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是像一维数组只是一个向量。但是,实际的硬件存储器确实连续编址的。也就是说存储器单元式按一维现行排列的。如何在一维存储器中存放二维数组,有两种放啊是:一种是按行排列,即放完一行之后顺次放入第二行;另一种是按列排列,即放完一列之后再数次放第二列。
2.列数 = 行的总字节数 / 给个元素占用的字节数
行数 = 总字节数 / 每一行占用的字节数
打印结果:
rows : 3
column : 4
3.求每门课的平均分
4.二维数组作为函数参数注意事项
a.类型和长度要一致
09-03 二维数组存储
1.概念
二维数组在概念上是二维的,即是说是其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是像一维数组只是一个向量。但是,实际的硬件存储器确实连续编址的。也就是说存储器单元式按一维现行排列的。如何在一维存储器中存放二维数组,有两种放啊是:一种是按行排列,即放完一行之后顺次放入第二行;另一种是按列排列,即放完一列之后再数次放第二列。
2.列数 = 行的总字节数 / 给个元素占用的字节数
行数 = 总字节数 / 每一行占用的字节数
int a[][4] = {{1,2,3,5},{4,5,6,5},{7,8,9,5}};
//行数 = 总字节数/每行占用字节数
int row = sizeof(a)/sizeof(a[0]);
//列数 = 每行占用字节数/每个元素占用字节数
int column = sizeof(a[0])/sizeof(int);
printf("rows : %d\n", row);
printf("column : %d\n", column);
打印结果:
rows : 3
column : 4
3.求每门课的平均分
//求平均成绩
int scores[][3] = {{56,78,44},{56,89,43},{33,65,88},{33,66,22}};
int total = 0;
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 4; i++) {
total += scores[i][0];
}
printf("class %d 's avg score: %.2f\n",j ,total/3.0);
}
4.二维数组作为函数参数注意事项
a.类型和长度要一致
b.二维数组作为形参,可以不写第一维长度
5.二维数组的应用---迷宫小游戏
直接放代码
#define Row 10
#define Col 10
#include <stdio.h>
//定义变量记录当前位置
int currentX = 0, currentY = 0, steps = 0;
int nextX = 0, nextY = 0;
//打印迷宫
void showMaze(char maze[10][10]){
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++) {
printf("%c", maze[i][j]);
}
printf("\n");
}
}
//判断是否可走
int isAvaliable(char maze[][10],int x, int y){
if (x > 10 || x < 0 || y > 10 > y < 0||
'#' == maze[x][y]) {
return 0;
}else{
return 1;
}
}
//交换小人儿('0')位置和迷宫格(" ")位置
void swap(char maze[10][10]){
char temp = maze[currentX][currentY];
maze[currentX][currentY] = maze[nextX][nextY];
maze[nextX][nextY] = temp;
steps++;
currentX = nextX;
currentY = nextY;
showMaze(maze);
}
//开始行走
void startGame(char maze[10][10]){
char direction; //存储用户输入的方向:上W,下S,左A,右D
char temp; //用来吸收键盘输入的\n
int dX = 0,dY = 0;//小人儿下一步x轴与y轴变化
while (1) {
//等待用户输入方向
printf("\n输入下一步走向(上W,下S,左A,右D):");
scanf("%c",&direction);
scanf("%c",&temp);
switch (direction) {
//向上
case 'W':
case 'w':
dX = -1; dY = 0;
break;
//向下
case 'S':
case 's':
dX = 1; dY = 0;
break;
//向左
case 'A':
case 'a':
dX = 0; dY = -1;
break;
//向右
case 'D':
case 'd':
dX = 0; dY = 1;
break;
case 'Q':
case 'q':
printf("正在退出游戏.....");
return;
default:
//printf("按键错误.....");
break;
}
nextX = currentX + dX;
nextY = currentY + dY;
if (isAvaliable(maze, nextX, nextY)) {
swap(maze);
//交换后查看当前位置是否已经到达门口
if(currentY == 9){
printf("X = %d, Y = %d\n",currentX,currentY);
printf("Congradulations! You take %d steps in total!", steps);
return ;
}
}
}
}
int main(int argc, const char * argv[])
{
//初始化迷宫
char maze[Row][Col] = {
{'0','#','#','#','#','#','#','#','#','#'},
{' ',' ','#','#','#','#',' ',' ',' ','#'},
{'#',' ','#','#','#','#',' ','#',' ','#'},
{'#',' ',' ',' ',' ','#',' ','#',' ','#'},
{'#',' ',' ','#',' ',' ',' ',' ','#','#'},
{'#','#',' ','#',' ','#','#',' ',' ','#'},
{'#','#',' ','#',' ','#','#',' ',' ','#'},
{'#','#',' ','#',' ','#','#','#',' ','#'},
{'#','#',' ',' ',' ','#','#','#',' ','M'},
{'#','#','#','#','#','#','#','#','#','#'}
};
//首次显示迷宫供玩儿家看
showMaze(maze);
//开始游戏
startGame(maze);
return 0;
}