
c基础入门day5工具vs2026课程【黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难】5 数组数组是一个存放了相同类型数据元素的集合数组中的每个数据元素都是相同的数据类型数组是由连续的内存位置组成的5.1 一维数组5.1.1 一维数组的定义方式数据类型 数组名[ 数组长度 ];**数组元素的下标是从0开始索引的。数据类型 数组名[ 数组长度 ] {值1, 值2, …};**如果在初始化数据时没有全部填写会用0来填补剩余数据。数据类型 数组名[ ] {值1, 值2, …};**总结而言数组的定义必须明确数组的长度第三种方法也属于明确了数组的长度。5.1.2 一维数组数组名的作用可以用于统计整个数组在内存中的长度1**sizeof(arr)2获取数组中某个元素在内存中占的空间sizeof(arr[下标])3统计数组中元素个数sizeof(arr)/sizeof(arr[0])可以获取数组在内存中的首地址1cout arr endl;2访问某个元素的地址时需要用到取址符注意数组名是一个常量不可以进行赋值操作。程序示例#includeiostreamusingnamespacestd;intmain(){// 数组// 统计整个数组在内存中的长度intarr[]{0,1,2,3,4,5,6,7,8,9};cout整个数组占用的内存空间为sizeof(arr)endl;cout每个元素占用的内存空间为sizeof(arr[0])endl;cout数组中元素个数为sizeof(arr)/sizeof(arr[0])endl;// 获取数组在内存中的首地址cout数组的首地址为(int)arrendl;//(int)将十六进制地址转为十进制地址cout数组中第一个元素地址为(int)arr[0]endl;// 取址符号// 数组的首地址即数组第一个元素的地址cout数组中第二个元素地址为(int)arr[1]endl;//相差单个元素占用的内存空间system(pause);return0;}5.1.3 练习案例练习案例1五只小猪称体重在一个数组中记录了五只小猪的体重如int arr[5]{300,350,200,400,250};找出并打印最重的小猪体重#includeiostreamusingnamespacestd;intmain(){// 练习案例1五只小猪称体重// 在一个数组中记录五只小猪的体重intarr[5]{300,350,200,400,250};intmax0;// 找出并打印最重的小猪体重for(inti0;i5;i){if(arr[i]max){maxarr[i];}}cout最重的小猪体重为maxendl;system(pause);return0;}练习案例2数组元素逆置请声明一个5个元素的数组并且将元素逆置。如原数组元素为13254逆置后输出结果为45231#includeiostreamusingnamespacestd;intmain(){// 练习案例2数组元素逆置// 声明一个5个元素的数组intarr[]{1,3,2,5,4};cout原数组元素为endl;;for(inti0;isizeof(arr)/sizeof(arr[0]);i){coutarr[i] ;}coutendl;intstart0;// 起始元素下标intendsizeof(arr)/sizeof(arr[0])-1;// 末尾元素下标inttemp0;// 临时存放元素// 将元素逆置while(startend){temparr[start];arr[start]arr[end];arr[end]temp;start;end--;}cout逆置后数组元素为endl;;for(intk0;ksizeof(arr)/sizeof(arr[0]);k){coutarr[k] ;}coutendl;system(pause);return0;}5.1.4 冒泡排序冒泡排序最常用的排序算法用于对数组内的元素进行排序步骤1 比较相邻的元素如果第一个元素比第二个大交换2 对每一对相邻元素做相同的工作执行完毕后找到第一个最大值3 重复上述步骤每次比较次数-1直到不需要比较排序总轮数 元素个数 - 1每轮对比次数 元素个数 - 排序轮数 - 1n个元素需要进行n(n-1)/2次程序示例#includeiostreamusingnamespacestd;intmain(){// 冒泡排序intarr[9]{4,2,8,0,5,7,1,3,9};cout排序前endl;for(inti0;i9;i){coutarr[i] ;}coutendl;// 排序总轮数 元素个数 - 1for(intj0;j9-1;j){// 内层循环对比// 每轮对比次数 元素个数 - 排序轮数 - 1for(intk0;k9-j-1;k){if(arr[k]arr[k1]){inttemparr[k];arr[k]arr[k1];arr[k1]temp;}}}cout排序后endl;for(inti0;i9;i){coutarr[i] ;}coutendl;system(pause);return0;}5.2 二维数组5.2.1 二维数组定义方式数据类型 数组名[ 行数 ][ 列数 ];数据类型 数组名[ 行数 ][ 列数 ] { {数据1, 数据2 …} , {数据3, 数据4 …} …};数据类型 数组名[ 行数 ][ 列数 ] { 数据1, 数据2, 数据3, 数据4…};数据类型 数组名[ ][ 列数 ] { 数据1, 数据2, 数据3, 数据4…};程序示例#includeiostreamusingnamespacestd;intmain(){// 二维数组intarr[2][3]{{1,2,3},{4,5,6}};for(inti0;i2;i){for(intj0;j3;j){coutarr[i][j] ;}coutendl;}system(pause);return0;}5.2.2 二维数组数组名用途查看二维数组所占内存空间1**sizeof(arr)2计算列数sizeof(arr)/sizeof(arr[0])3计算元素个数sizeof(arr)/sizeof(arr[0][0])获取二维数组首地址1cout arr endl;2访问某个元素的地址时需要用到取址符程序示例#includeiostreamusingnamespacestd;intmain(){// 二维数组数组名doublearr[2][3]{{1,2,3},{4,5,6}};for(inti0;i2;i){for(intj0;j3;j){coutarr[i][j] ;}coutendl;}// 1. 查看二维数组所占内存空间cout二维数组占用内存空间大小为sizeof(arr)endl;cout二维数组第一行占用内存空间大小为sizeof(arr[0])endl;//计算列数sizeof(arr)/sizeof(arr[0])cout二维数组第一个元素占用内存空间大小为sizeof(arr[0][0])endl;//计算元素个数sizeof(arr)/sizeof(arr[0][0])// 2. 获取二维数组首地址cout二维数组首地址为(int)arrendl;cout二维数组第一行地址为(int)arr[0]endl;cout二维数组第一行第一个元素地址为(int)arr[0][0]endl;//访问某个元素的地址时需要用到取址符cout二维数组第二行地址为(int)arr[1]endl;system(pause);return0;}练习案例考试成绩统计案例描述有三名同学张三李四王五在一次考试中的成绩分别如下表请分别输出三名同学的总成绩姓名语文数学英语张三100100100李四9050100王五607080#includeiostream#includestringusingnamespacestd;intmain(){// 二维数组练习案例考试成绩统计// 1. 创建二维数组intscores[3][3]{{100,100,100},{90,50,100},{60,70,80}};string names[3]{张三,李四,王五};// 2. 统计每个人的总和分数for(inti0;i3;i){intsum0;for(intj0;j3;j){sumscores[i][j];}coutnames[i]的总成绩为sumendl;}system(pause);return0;}