1.什么是二维数组?

就是数组中保存的元素都是一维数组,我们就称之为二维数组

2.二维数组的定义格式

元素类型  数组名称[一维数组的组数][一维数组中存储的元素个数]

一维数组的个数:代表二维数组中可以存储元素的个数

3.如何操作二维数组?

数组名称[索引];

取出二维数组中对应索引的一维数组

数组名称[索引][索引];

需求:要求定义变量保存用户的年龄

需求:要求定义变量保存一个班级用户的年龄

需求:要求定义变量保存两个班级用户年龄

#include <stdio.h>
#include <stdlib.h>int main(void)
{int ages[2][4]={{18,19,24,21},{17,15,19,20}};//取出二维数组中的每一个一维数组for(int i=0;i<2;i++){//2.再从每一个一维数组中取出一维数组中的元素for(int j=0;j<3;j++){printf("ages[%i][%i]=%i\n",i,j,ages[i][j]);}}return 0;
}

二维数组初始化

1.二维数组的初始化

1.1定义的同时初始化

1.2先定义再初始化

1.定义的同时初始化

1.1定义的同时完全初始化

    int nums[2][3] = {{1,3,5},{2,4,6}};

1.2定义的同时部分初始化

    int nums[2][3] = {{1,3,5}};

1.3定义的同时初始化的注意点

如果在定义的同时初始化,那么一维数组的个数可以省略

    int nums[][3] = {{1,3,5},{2,4,6}}; 

如果在定义的同时初始化,那么一维数组元素的个数不能省略(不然程序就会报错!!!!)

    int nums[2][] = {{1,3,5},{2,4,6}};

如果在定义的同时初始化,那么一维数组的{}可以省略

    int nums[2][3] = {1,3,5,2,4,6};


二维数组存储细节

1二维数组的存储细节

和一维数组一模一样

1.1分配存储空间从内存地址大的开始分配

1.2数组名对应的是占用存储空间最小的地址

1.3给元素分配存储空间从占用存储空间内存地址小的开始分配


二维数组和函数

1.基本数据类型和函数

在函数内修改形参,不会影响到外界实参

2.一维数组和函数

在函数内修改形参,会影响到外界实参

3.二维数组和函数

在函数内修改形参,会影响到外界实参 

总结:

以后要想知道在函数中修改形参会不会影响到外界的实参,是不是看一下传递的是不是地址就可以

如果传递的是地址,那么在函数内修改形参,会影响到外界的实参


迷宫游戏-地图打印

 对上面进行改进

求出其行数,列数

 int row = sizeof(map)/sizeof(map[0]);
 int column = sizeof(map[1]);

 

#include <stdio.h>
#include <stdlib.h>int main(void)
{/*#######O ## ## ##  # ###   #######*/char map[6][6]={{'#','#','#','#','#','#'},{'#','R',' ','#',' ',' '},{'#',' ','#','#',' ','#'},{'#',' ',' ','#',' ','#'},{'#','#',' ',' ',' ','#'},{'#','#','#','#','#','#'}};int row = sizeof(map)/sizeof(map[0]);int column = sizeof(map[1]);//2.遍历二维数组,打印地图printMap(map,row,column);return 0;
}
/** \brief printfMap 用于打印地图** \param  map       需要打印的二维数组* \param  row       二维数组的行数(也就是有多少个一维数组)* \param  col       二维数组的列数(也就是一维数组有多少个元素) *  \return              **/     void printMap(int value[6][6],int row,int col)
{for(int i=0;i<row;i++){for(int j=0;j<col;j++){printf("%c",map[i][j]);}printf("\n");}
}

下一步:请输入w、a、s、d其中一个字符,控制小人走出迷宫

迷宫游戏-获取行走方向

统一将字母转化成小写

 ch = ch + ('a'-'A');

#include <stdio.h>
#include <stdlib.h>
int main(void)
{char map[6][6]={{'#','#','#','#','#','#'},{'#','R',' ','#',' ',' '},{'#',' ','#','#',' ','#'},{'#',' ',' ','#',' ','#'},{'#','#',' ',' ',' ','#'},{'#','#','#','#','#','#'}};int row = sizeof(map)/sizeof(map[0]);int column = sizeof(map[1]);//2.遍历二维数组,打印地图printMap(map,row,column);//3.提示用户输入数据char ch = getDirection();lowerCase(getDirection());printf("ch=%c\n",ch);return 0;
}
//在企业开发中,封装函数一定要遵守单一原则
//一个函数只做一件事情
/** \brief  lowerCase 将大写字母转换为小写字母 **  \param  ch        需要转换的字母*  \return           转换之后的字母**/     char lowerCase(char ch)
{//1.判断是否是大小字母if(ch >= 'A' && ch <= 'Z'){return ch + ('a'-'A');}return ch;
}
/** \brief   getDirection 获取行走的方向**  \return  获取到的方向 **/     char getDirection()
{//3.提示用户输入数据printf("请输入w a s d其中一个字符,控制小人走出迷宫\n");//4.定义变量保存用户输入的数据char ch;//5.接收用户输入的数据scanf("%c",&ch);//统一将字母转换为小写ch=lowerCase(ch);return ch;
}
/** brief printfMap 用于打印地图**  param  map       需要打印的二维数组*  param  row       二维数组的行数(也就是有多少个一维数组)*  param  col       二维数组的列数(也就是一维数组有多少个元素)*/void printMap(char value[6][6],int row,int col)
{for(int i=0;i<row;i++){for(int j=0;j<col;j++){printf("%c",value[i][j]);}printf("\n");}
}

迷宫游戏-人物行走

4.让小人动起来
4.1定义一个变量保存小人当前位置

#include <stdio.h>
#include <stdlib.h>
char lowerCase(char ch);
char getDirection();
void move(char ch,char map[6][6]);
void printMap(char value[6][6],int row,int col);
int startRow = 1;
int startCol = 1;
int main(void)
{char map[6][6]={{'#','#','#','#','#','#'},{'#','R',' ','#',' ',' '},{'#',' ','#','#',' ','#'},{'#',' ',' ','#',' ','#'},{'#','#',' ',' ',' ','#'},{'#','#','#','#','#','#'}};int row = sizeof(map)/sizeof(map[0]);int column = sizeof(map[1]);//2.遍历二维数组,打印地图printMap(map,row,column);//3.提示用户输入数据char ch = getDirection();lowerCase(ch);//4.让小人动起来//4.1定义一个变量保存小人当前位置//4.2判断用户输入的反向move(ch,map);printMap(map,row,column);return 0;
}
//在企业开发中,封装函数一定要遵守单一原则
//一个函数只做一件事情
void move(char ch,char map[6][6])
{switch(ch){case 'w':printf("向上走\n");if(map[startRow-1][startCol] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让上一行变成小人map[startRow-1][startCol]='R';//修改小人当前的位置变成为行走之后的位置startRow=startRow-1;}break;case 's':printf("向下走\n");if(map[startRow+1][startCol] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让上一行变成小人map[startRow+1][startCol]='R';//修改小人当前的位置变成为行走之后的位置startRow=startRow+1;}break;case 'a':printf("向左走\n");if(map[startRow][startCol-1] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让前一列变成小人map[startRow][startCol-1]='R';//修改小人当前的位置变成为行走之后的位置startCol=startCol-1;}break;case 'd':printf("向右走\n");if(map[startRow][startCol+1] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让一行变成小人map[startRow][startCol+1]='R';//修改小人当前的位置变成为行走之后的位置startCol=startCol+1;}break;default: printf("没有这个方向\n"); break;}
}char lowerCase(char ch)
{//1.判断是否是大小字母if(ch >= 'A' && ch <= 'Z'){return ch  += ('a'-'A');}
}char getDirection()
{//3.提示用户输入数据printf("请输入w a s d其中一个字符,控制小人走出迷宫\n");//4.定义变量保存用户输入的数据char ch;//5.接收用户输入的数据scanf("%c",&ch);//统一将字母转换为小写ch=lowerCase(ch);return ch;
}void printMap(char value[6][6],int row,int col)
{for(int i=0;i<row;i++){for(int j=0;j<col;j++){printf("%c",value[i][j]);}printf("\n");}
}

迷宫游戏-连续行走

#include <stdio.h>
#include <stdlib.h>
char lowerCase(char ch);
char getDirection();
void move(char ch,char map[6][6]);
void printMap(char value[6][6],int row,int col);
int startRow = 1;
int startCol = 1;
int endRow = 1;
int endCol = 5;
int main(void)
{char map[6][6]={{'#','#','#','#','#','#'},{'#','R',' ','#',' ',' '},{'#',' ','#','#',' ','#'},{'#',' ',' ','#',' ','#'},{'#','#',' ',' ',' ','#'},{'#','#','#','#','#','#'}};int row = sizeof(map)/sizeof(map[0]);int column = sizeof(map[1]);//2.遍历二维数组,打印地图printMap(map,row,column);//3.提示用户输入数据do{char ch = getDirection();//4.让小人动起来//4.1定义一个变量保存小人当前位置//4.2判断用户输入的反向move(ch,map);printMap(map,row,column);if(startCol==endCol&&startRow == endRow){break;}}while(1);printf("游戏结束\n");return 0;
}
//在企业开发中,封装函数一定要遵守单一原则
//一个函数只做一件事情
void move(char ch,char map[6][6])
{switch(ch){case 'w':printf("向上走\n");if(map[startRow-1][startCol] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让上一行变成小人map[startRow-1][startCol]='R';//修改小人当前的位置变成为行走之后的位置startRow=startRow-1;}break;case 's':printf("向下走\n");if(map[startRow+1][startCol] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让上一行变成小人map[startRow+1][startCol]='R';//修改小人当前的位置变成为行走之后的位置startRow=startRow+1;}break;case 'a':printf("向左走\n");if(map[startRow][startCol-1] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让前一列变成小人map[startRow][startCol-1]='R';//修改小人当前的位置变成为行走之后的位置startCol=startCol-1;}break;case 'd':printf("向右走\n");if(map[startRow][startCol+1] != '#'){//清空当前的位置map[startRow][startCol] = ' ';//让一行变成小人map[startRow][startCol+1]='R';//修改小人当前的位置变成为行走之后的位置startCol=startCol+1;}break;default: printf("没有这个方向\n"); break;}
}char lowerCase(char ch)
{//1.判断是否是大小字母if(ch >= 'A' && ch <= 'Z'){return ch  += ('a'-'A');}
}char getDirection()
{//3.提示用户输入数据printf("请输入w a s d其中一个字符,控制小人走出迷宫\n");//4.定义变量保存用户输入的数据char ch;//5.接收用户输入的数据scanf("%c",&ch);//清空输入缓冲区setbuf(stdin,NULL);//统一将字母转换为小写ch=lowerCase(ch);return ch;
}void printMap(char value[6][6],int row,int col)
{//清空屏幕system("cls");for(int i=0;i<row;i++){for(int j=0;j<col;j++){printf("%c",value[i][j]);}printf("\n");}
}

6.C语言 二维数组相关推荐

  1. c语言程序设计歌手大奖赛,C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委...

    导航:网站首页 > C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委 C语言二维数组怎么做:设计青年歌手参加歌曲 ...

  2. C语言二维数组元素的多种表示方法小结

    C语言二维数组元素的多种表示方法小结 昨天,一个小可爱问我,为何函数中,数组可以改变主函数中的值,比如b[i],就可以改原来数组中的值.其实b[i] 等价于 *(b + i)也是通过地址间接更改的,小 ...

  3. C语言 | 二维数组

    C语言二维数组的定义 一般形式 类型说明符 数组名[常量表达式][常量表达式]int a[10][6],b[3][4]; 用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系,而在内存中,各 ...

  4. C语言 二维数组遍历 - C语言零基础入门教程

    目录 一.计算一维数组长度 二.计算二维数组长度 1.二维数组行数 2.二维数组列数 3.二维数组的元素个数 = 二维数组行数 * 二维数组列数 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C ...

  5. C语言 二维数组行数和列数计算 - C语言零基础入门教程

    目录 一.计算一维数组长度 二.计算二维数组长度 1.二维数组行数 2.二维数组列数 3.二维数组的元素个数 = 二维数组行数 * 二维数组列数 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C ...

  6. C语言 二维数组定义和使用 - C语言零基础入门教程

    目录 一.二维数组简介 二.定义二维数组并初始化 1.定义二维数组 2.初始化二维数组 三.访问二维数组 四.修改二维数组 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 & ...

  7. c语言中文刷屏,c语言二维数组刷屏练习.doc

    c语言二维数组刷屏练习 // 二维数组的刷屏综合练习 编制于2012.9.23 #include #include #include #include #define WIDTH 22//宏定义 /* ...

  8. c语言 二维数组 文库,c语言二维数组练习题

    c语言二维数组练习题 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 完成下列程序代码完成下列程序代码1. 将二维数组(5 行 5 ...

  9. C语言——二维数组转置

    C语言--二维数组转置 问题描述: 输入一个二行三列的数组,把它转置成三行二列的数组. 代码: # include <stdio.h>int main() {int a[2][3];int ...

  10. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

最新文章

  1. C语言:在屏幕上打印杨辉三角形
  2. 莫言:不要在不喜欢你的人那丢掉快乐
  3. centos php sftp 扩展,Linux(CentOS)上配置 SFTP
  4. python netty_Netty源码解读(一)概述
  5. ant-design圣诞彩蛋
  6. Zookeeper详细参数解析zoo.cfg文件
  7. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第7章-保性能控制
  8. Linux - How to Extend/Reduce LVM’s (Logical Volume Management) in Linux
  9. Font Awesome-一款吊炸天的字体图标插件中文全介绍
  10. Web前端开发笔记——第三章 CSS语言 第二节 CSS选择器
  11. 是谁在我的心里打了个结(二十一)托付
  12. ORACLE:索引中丢失IN或OUT参数
  13. 全能型 uWSGI 配置
  14. CVE-2021-20226:详解 Linux 内核 IO_URING 子系统中的引用计数漏洞
  15. textarea 自动检测高度换行
  16. newwifi2刷潘多拉固件
  17. 创建专属聊天室练习(客户端与服务端通信|客户端界面交互)
  18. pycharm的python_stubs
  19. win7系统64位下安装sql server2000时提示兼容性问题
  20. mysql数据库取出的数据乱码_从数据库取出数据为什么是乱码

热门文章

  1. clean code(代码整洁之道)
  2. 今天看到一个不错的漫画网站(E文)
  3. abaqus 复合材料edit composite layup中报错:没有指定坐标系
  4. 继蚂蚁金服OceanBase之后,腾讯也祭出了大杀技
  5. 【学习机器学习】实验——聚类算法性能度量
  6. 【JAVA】-- 期末考试复习题含答案(每章对应题、选择、填空、简答、编程)(下)
  7. 论文解读: Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
  8. 20145204张亚军第14周博客总结
  9. P5550 Chino的数列
  10. Python谷歌小恐龙--Pygame