【C++】C++基础知识(五)---数组
创始人
2024-01-27 23:17:33

C++基础知识(五)

  • 1. 一维数组
    • 1.1 定义方式
    • 1.2 数组名用途
    • 1.3 案例分析
  • 2. 二维数组
    • 2.1 定义方式
    • 2.2 数组名用途
    • 2.3 案例分析
  • 3. 多维数组

1. 一维数组

数组就是一个集合,里面存放了相同类型的数据元素。

特点:
1、数组中每个元素的数据类型都是一样的;
2、数组是由连续的内存位置组成的,最低的地址对应第一个元素,最高的位置对应最后一个元素;
3、C++中数组元素的下标是从0开始索引的与Python一样。

1.1 定义方式

1. 数据类型 数组名[数组长度]

  • 代码演示
#include 
using namespace std;int main() {//1、数据类型 数组名[数组长度]int arr1[5];for (int i = 0; i < 5; i++) {arr1[i] = i + 1;cout << arr1[i] << " ";}cout << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

2. 数据类型 数组名[数组长度] = {值1,值2,…,值n}

  • 代码演示
#include 
using namespace std;int main() {//2、数据类型 数组名[数组长度] = {值1、值2、...、值n} 告诉数组长度的定义方式可以不说明每一值,未说明的值将会用0代替。int arr2[5] = {1, 2, 3};for (int j = 0; j < 5; j++) {cout << arr2[j] << " ";}cout << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

3. 数据类型 数组名[ ] = {值1,值2,…,值n}

  • 代码演示
#include 
using namespace std;int main() {//3、数据类型 数组名[] = {值1、值2、...、值n} 未告诉数组长度的定义方式必须说明每一个值,不然就无法知道数组的长度int arr3[] = { 5, 4, 3, 2, 1 };for (int k = 0; k < 5; k++){cout << arr3[k] << " ";}cout << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

1.2 数组名用途

1. 统计整个数组在内存中的长度
2. 获取数组在内存中的首地址

  • 代码演示
#include 
using namespace std;int main() {int arr1[10];for (int i = 0; i < 10; i++){arr1[i] = i + 1;cout << arr1[i] << " ";}cout << endl;//1、统计整个数组在内存中的长度cout << "整个数组在内存中的长度为:" << sizeof(arr1) << endl;cout << "每个元素在内存中的长度为:" << sizeof(arr1[0]) << endl;cout << "统计数组中元素的个数为:" << sizeof(arr1) / sizeof(arr1[0]) << endl;//2、获取数组在内存中的首地址cout << "数组在内存中的首地址为:" << (int)arr1 << endl;cout << "数组中第1个元素的地址为:" << (int) &arr1[0] << endl;cout << "数组中第2个元素的地址为:" << (int) &arr1[1] << endl;cout << "数组中最后一个元素的地址为:" << (int) &arr1[9] << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

注意:
(int)arr1、(int)&arr1[0]
采用了一个类型强制转换,本身地址应该是指针类型的数据(16进制的),但是在此将其强制转化为了整型数据(10进制),便于我们直观的理解。
在使用类型强制转换时,将会出现警告

1.3 案例分析

1. 找5个数中的最大值

  • 案例描述

一个一维数组int arr[ ] = {188, 290, 555, 493, 618};
输出数组中最大的数

  • 思路分析

访问数组中的每个元素,设定一个初始最大值,让数组中的每一个元素与当前最大值比较,如果大于当前最大值则更新最大值,否则继续往后比较,直到找到整个数组中的最大值

  • 代码实现
#include 
using namespace std;int main() {int arr1[] = {188, 290, 555, 493, 618};int max = 0;for (int i = 0; i < 5; i++){if (arr1[i] > max){max = arr1[i];}}cout << "五个数中最大的数为:" << max << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

2. 数组元素逆置

  • 案例描述

一个一维数组int arr[ ] = {3, 5, 2, 4, 1, 6};
将数组中的元素进行逆置,再输出

  • 思路分析

1、记录起始位置下标start;
2、记录末尾位置下标end;
3、起始位置与末尾位置进行互换temp = start;start = end;end = temp;
4、更新起始与末尾位置元素,start++;end- -;
5、进行循环更新,直到start >= end;

  • 代码实现
#include 
using namespace std;int main() {int arr1[] = {3, 5, 2, 4, 1, 6}; //初始化数组int lon = sizeof(arr1) / sizeof(arr1[0]); //得到数组的长度//打印逆置前的数组cout << "逆置前数组为:" << endl;for (int i = 0; i < lon; i++){cout << arr1[i] << " ";}cout << endl;//对数组进行逆置for (int start = 0; start < lon; start++){int end = lon - start - 1;if (end > start){int temp = arr1[start];arr1[start] = arr1[end];arr1[end] = temp;}}//打印逆置后的数组cout << "逆置后数组为:" << endl;for (int k = 0; k < lon; k++){cout << arr1[k] << " ";}cout << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

3. 冒泡排序
最常用的排序算法,对数组内元素进行排序

  • 案例描述

一个一维数组int arr[ ] = {4, 2, 8, 0, 5, 7, 1, 3, 9, 6};
将数组中的元素进行从小到大的顺序依次排序

  • 思路分析

1、比较两个相邻元素,若第一个大于第二个,则交换它们两个的位置;
2、对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值;
3、重复以上的步骤,每次比较次数减1,直到不需要再进行比较;
在这里插入图片描述

  • 代码实现
#include 
using namespace std;int main() {int arr1[] = {4, 2, 8, 0, 5, 7, 1, 3, 9, 6}; //初始化数组int lon = sizeof(arr1) / sizeof(arr1[0]) - 1; //得到数组末尾元素的下标//打印排序前的数组cout << "冒泡排序前数组为:" << endl;for (int i = 0; i <= lon; i++){cout << arr1[i] << " ";}cout << endl;//对数组进行冒泡排序for (int m = 0; m <= lon - 1; m++) //比较轮数 = 数组长度-1{for (int n = 0; n <= lon - m - 1; n++) //每一轮比较次数 = 数组长度-当前比较轮数-1{if (arr1[n] > arr1[n + 1]) //第一个元素大于第二个元素则进行位置交换{int temp = arr1[n];arr1[n] = arr1[n + 1];arr1[n + 1] = temp;}}}//打印冒泡排序后的数组cout << "冒泡排序后数组为:" << endl;for (int j = 0; j <= lon; j++){cout << arr1[j] << " ";}cout << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

2. 二维数组

2.1 定义方式

1. 数据类型 数组名[行数][列数]

  • 代码演示
#include 
using namespace std;int main() {//1、数据类型 数组名[行数][列数];int arr1[2][3];for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){arr1[i][j] = j + 1;cout << arr1[i][j] << " ";}cout << endl;}system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

2. 数据类型 数组名[行数][列数] = {{数据1,数据2,…,数据n},{数据1,数据2,…,数据n},…,{数据1,数据2,…,数据n}}

  • 代码演示
#include 
using namespace std;int main() {//2、数据类型 数组名[行数][列数] = {{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},...,{数据1,数据2,...,数据n}};int arr2[2][3] ={{1,2,3},{4,5,6}};for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr2[i][j] << " ";}cout << endl;}system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

3. 数据类型 数组名[行数][列数] = {数据1,数据2,…,数据n}

  • 代码演示
#include 
using namespace std;int main() {//3、数据类型 数组名[行数][列数] = {数据1,数据2,...,数据n};int arr3[2][3] = { 5,5,5,5,5,5 };for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr3[i][j] << " ";}cout << endl;}system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

4. 数据类型 数组名[ ][列数] = {数据1,数据2,…,数据n}

  • 代码演示
#include 
using namespace std;int main() {//4、数据类型 数组名[][列数] = { 数据1,数据2,...,数据n };int arr4[][3] = {6,6,6,6,6,6};for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr4[i][j] << " ";}cout << endl;}system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

2.2 数组名用途

1. 统计整个数组在内存中的长度
2. 获取数组在内存中的首地址

  • 代码演示
#include 
using namespace std;int main() {int arr1[2][4] = {{2,0,2,2},{1,9,9,8}};for (int i = 0; i < 2; i++){for (int j = 0; j < 4; j++){cout << arr1[i][j] << " ";}cout << endl;}//1、统计整个数组在内存中的长度cout << "整个二维数组在内存中的长度为:" << sizeof(arr1) << endl;cout << "二维数组某一行在内存中的长度为:" << sizeof(arr1[0]) << endl;cout << "二维数组每一个元素在内存中的长度为:" << sizeof(arr1[0][0]) << endl;cout << "统计二维数组中行的数目为:" << sizeof(arr1) / sizeof(arr1[0]) << endl;cout << "统计二维数组中列的数目为:" << sizeof(arr1[0]) / sizeof(arr1[0][0]) << endl;cout << "统计二维数组中元素的数目为:" << sizeof(arr1) / sizeof(arr1[0][0]) << endl;//2、获取数组在内存中的首地址cout << "数组在内存中的首地址为:" << arr1 << endl;cout << "数组中第1行元素的地址为:" << arr1[0] << endl;cout << "数组中第2行元素的地址为:" << arr1[1] << endl;cout << "数组中第1个元素的地址为:" << &arr1[0][0] << endl;cout << "数组中第2个元素的地址为:" << &arr1[0][1] << endl;cout << "数组中最后一个元素的地址为:" << &arr1[1][3] << endl;system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

注意:为了方便更好的查看内存地址,只需要进行一个类型强制转换,将其从16进制转化为10进制数,如操作:(int)arr1、(int)&arr1[0][0]、(int)arr1[0]

2.3 案例分析

  • 案例描述

某班级三位学生甲乙丙,他们的语数外分数分别为:[100,100,100],[98,88,92],[77,98,87]
求甲乙丙三者的总分,并在屏幕上输出

  • 代码实现
#include 
using namespace std;
#include int main() {int arr1[3][3] ={{100,100,100},{98,88,92},{77,98,87}};string arr2[3] = { "甲", "乙", "丙" };for (int i = 0; i < 3; i++){int scores_sum = 0;for (int j = 0; j < 3; j++){scores_sum += arr1[i][j];}cout << arr2[i] << "的语数外总分为: " << scores_sum << endl;}system("pause");return 0;
}
  • 输出结果
    在这里插入图片描述

3. 多维数组

在二维数组的基础上进行推广

相关内容

热门资讯

万的繁体字怎么写 繁体字怎么写... 一、繁体字大全简化偏旁讠[訁] 饣[飠] [昜] 纟[糹] [臤] 只[戠] 钅[釒] 呙[咼]A爱...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
桂林市属于哪个省 桂林为什么划... 桂林 [guì lín]广西壮族自治区下辖市桂林,简称桂,是世界著名风景游览城市、全国重要高新技术产...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...