5 数组
5.1 概述
概念:数组就是一个集合,里面存放了相同类型的数据元素
特点:
(1)数组中每个数据元素都是相同的数据类型。
(2)数组是由连续的内存位置组成的。
(3)可以通过下标访问数组中的元素
5.2 一维数组
5.2.1 一维数组定义方式
(1)数据类型 数组名[数组长度];
(2)数据类型 数组名[数组长度]={值1,值2,值3…};如果给定的值的数量小于数组长度,那么使用0进行补充
(3)数据类型 数组名[ ]={值1,值2,值3…}
#include <iostream>
using namespace std;
int main()
{
//数组
//定义方式1:数据类型 数组名[数组长度];
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 30;
arr[4] = 40;
cout << arr[0] << endl;//访问数组元素
//定义方式2:数据类型 数组名[数组长度]={值1,值2.。。}
int arr2[4] = { 1,2,5,6 };
cout << arr2[2] << endl;
//定义方式3:数据类型 数组名[]={值1,值2.。。}
int arr3[] = { 1,2,5,6,8,3 };
cout << arr3[4] << endl;
}
5.2.2 一维数组数组名
数组名作用:
(1)统计整个数组在内存中的长度:sizeof(数组名)
(2)获取数组在内存中的首地址:cout<<数组名;
(3)获取数组中某个元素的首地址:&数组名[下标]
#include <iostream>
using namespace std;
int main()
{
//数组名用途
//1.通过数组名统计整个数组占用内存大小:sizeof()
int arr1[4] = { 1,2,5,6 };
cout << "整个数组占用内存空间大小为:"<<sizeof(arr1) << endl;
cout << "数组每个元素占用内存空间大小为:" << sizeof(arr1[0]) << endl;
cout << "数组中元素个数为:" << sizeof(arr1) / sizeof(arr1[0]) << endl;
//2.通过数组名查看数组首地址:数组名
int arr3[] = { 1,2,5,6,8,3 };
cout << "数组首地址为:"<<arr3<< endl;
cout << "数组中某元素的首地址为:" << &arr3[2] << endl;
}
5.2.3 一维数组案例
一维数组案例1:
#include <iostream>
using namespace std;
int main()
{
//一维数组案例
//案例描述:在一个数组中记录了五只小猪的体重,找出并打印最重的小猪体重
//1.创建5只小猪体重的数组
int arr1[5] = { 100,222,500,156,266 };
//2.找到最终的小猪
int max = 0;
int num = 0;
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
if (arr1[i] > max)
{
max = arr1[i];
num = i;
}
}
//3.打印最重的小猪
cout << "最重的小猪为:"<<num <<"它体重为:"<<max<< endl;
}
一维数组案例2:
#include <iostream>
using namespace std;
int main()
{
//一维数组案例
//案例描述:数组元素逆置
//1.创建数组
int arr1[5] = { 100,222,500,156,266 };
//2.数组元素逆置
int temp = 0;
int j = sizeof(arr1) / sizeof(arr1[0])-1;
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
if (j >= i)
{
temp = arr1[i];
arr1[i] = arr1[j];
arr1[j] = temp;
}
j--;
}
//3.打印逆置的数组
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
cout << arr1[i] << endl;
}
}
5.2.4 冒泡排序
#include <iostream>
using namespace std;
int main()
{
//冒泡排序
//1.创建数组
int arr1[] = { 100,222,500,156,266,100,521,345 };
//2.数组冒泡排序
int end = sizeof(arr1) / sizeof(arr1[0]) - 1;//结束位置的下标
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
int temp = 0;
for (int j = 0; j < end; j++)
{
if (arr1[j]> arr1[j+1])
{
temp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j+1] = temp;
}
}
end--;
}
//3.打印排序后的数组
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
cout << arr1[i] << endl;
}
}
5.3 二维数组
二维数组就是在一维数组上,多加一个维度。
5.3.1 二维数组定义方式
(1)数据类型 数组名[行数] [列数];
(2)数组类型 数组名 [行数][列数]={{数据1,数据2},{数据3,数据4}}
(3)数组类型 数组名 [行数][列数]={数据1,数据2,数据3,数据4}
(4)数据类型 数组名[][列数]={数据1,数据2,数据3,数据4}
#include <iostream>
using namespace std;
int main()
{
//二维数组定义
//创建方式1:数据类型 数组名[行数] [列数];
int arr1[2][2];
arr1[0][0] = 1;
arr1[0][1] = 2;
arr1[1][0] = 3;
arr1[1][1] = 4;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << arr1[i][j] << endl;
}
}
//创建方式2:数组类型 数组名 [行数][列数]={{数据1,数据2},{数据3,数据4}}
int arr2[2][4] = { {100,222,500,156},{266,100,521,345} };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 4; j++)
{
cout << arr2[i][j] << endl;
}
}
//创建方式3:数组类型 数组名 [行数][列数]={数据1,数据2,数据3,数据4}
int arr3[2][4] = { 100,222,500,156,266,100,521,345 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 4; j++)
{
cout << arr3[i][j] << endl;
}
}
//创建方式4:数组类型 数组名 [][列数]={数据1,数据2,数据3,数据4}
int arr4[][4] = { 100,222,500,156,266,100,521,345 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 4; j++)
{
cout << arr4[i][j] << endl;
}
}
}
5.3.2 二维数组数组名
数组名作用:
(1)查看二维数组所占内存空间
(2)获取二维数组在内存中的首地址:cout<<数组名;
#include <iostream>
using namespace std;
int main()
{
//二维数组名
//1.查看二维数组占用内存大小
int arr2[2][4] = {{100,222,500,156},{266,100,521,345}};
cout << "二维数组所占内存空间大小为:" << sizeof(arr2) << endl;
cout << "二维数组第一行占用的内存为:" << sizeof(arr2[0]) << endl;
cout << "二维数组第一个元素占用的内存为:" << sizeof(arr2[0][0]) << endl;
cout << "二维数组的行数:" << sizeof(arr2) / sizeof(arr2[0]) << endl;
cout << "二维数组的列数:" << sizeof(arr2[0]) / sizeof(arr2[0][0]);
//2.二维数组首地址
cout << "二维数组首地址:" << arr2 << endl;
cout << "二维数组中第一行数据的首地址:" << arr2[0] << endl;
cout << "二维数组中第一行第二列元素的首地址:" << &arr2[0][1] << endl;
}
5.3.3 二维数组应用案例
数组案例:
语文 | 数学 | 英语 | |
---|---|---|---|
张三 | 100 | 100 | 100 |
李四 | 100 | 90 | 50 |
王五 | 60 | 70 | 80 |
#include <iostream>
using namespace std;
int main()
{
//二维数组案例
//三名同学的三科成绩,分别输出这三名同学的总成绩
//1.创建成绩数组
int arr2[3][3] = {{100,100,100},{56,90,100 }, { 60,71,65 }};
//2.分别计算三名同学的总成绩
for (int i = 0; i < sizeof(arr2)/sizeof(arr2[0]); i++)
{
int sum = 0;
for (int j = 0; j < sizeof(arr2[0])/sizeof(arr2[0][0]); j++)
{
sum += arr2[i][j];
}
cout << "第" << i << "个同学的总分为:" << sum << endl;
}
}