数组
数组就是一个集合,里面存放了相同类型的数据元素
特点1:数组中的每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
一维数组定义的三种方式:
1. 数据类型 数组名[数组长度];
2. 数据类型 数组名[数组长度] = {值1,值2,...};
3. 数据类型 数组名[] = {值1,值2,...};
#include<iostream>
using namespace std;
int main1()
{
//一维数组定义方式
/*
1. 数据类型 数组名[数组长度];
2. 数据类型 数组名[数组长度] = {值1,值2,...};
3. 数据类型 数组名[] = {值1,值2,...};
*/
//1. 数据类型 数组名[数组长度];
int arr[5];
//给数组中的元素赋值
//数组元素的下标从0开始索引
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
//访问数组中的元素
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
cout << arr[4] << endl;
//2. 数据类型 数组名[数组长度] = {值1,值2,...};
int arr2[5] = { 10, 20, 30, 40, 50 };
/*cout << arr2[0] << endl;
cout << arr2[1] << endl;
cout << arr2[2] << endl;
cout << arr2[3] << endl;
cout << arr2[4] << endl;*/
for (int i = 0; i < 5; i++)
{
cout << arr2[i] << endl;
}
//3. 数据类型 数组名[] = {值1,值2,...};
//定义数组时,必须有初始长度
int arr3[] = {90, 80, 70, 60, 50, 40, 30, 20, 10};
for (int i = 0; i < 9; i++)
{
cout << arr3[i] << endl;
}
system("pause");
return 0;
}
一维数组名称的用途:
1. 可以统计整个数组在内存中的长度
2. 可以获取数组在内存中的首地址
#include<iostream>
using namespace std;
int main2()
{
/*
一维数组名称的用途:
1. 可以统计整个数组在内存中的长度
2. 可以获取数组在内存中的首地址
*/
//1. 可以统计整个数组在内存中的长度
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组占用的内存空间为:" << sizeof(arr) << endl;
cout << "每个元素占用的内存空间为:" << sizeof(arr[0]) << endl;
cout << "数组中的元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
//2. 可以获取数组在内存中的首地址
cout << "数组首地址为:" << (int)arr << endl;
cout << "数组中第一个元素地址为:" << (int)&arr[0] << endl;
cout << "数组中第一个元素地址为:" << (int)&arr[1] << endl;
//数组名是常量,不可以进行赋值操作
//arr = 10;
system("pause");
return 0;
}
一维数组案例分析1:五只小猪称体重
案例描述:在一个数组中记录了五只小猪的体重,如arr[5] = {300, 350, 200, 400, 250};
找出并打印最重的小猪的体重。
#include<iostream>
using namespace std;
int main3()
{
//在一个数组中记录了五只小猪的体重,如arr[5] = {300, 350, 200, 400, 250};
//找出并打印最重的小猪的体重。
//1.创建5只小猪体重的数组
int arr[5] = { 300, 350, 200, 400, 250 };
//2.从数组中找到最大值
int max = 0;
for (int i = 0; i < 5; i++)
{
//如果访问的数组中的元素比我认定的最大值还要大,更新最大值
if (arr[i] > max)
{
max = arr[i];
}
}
//3.打印最大值
cout << "最重的小猪体重为:" << max << endl;
system("pause");
return 0;
}
一维数组案例分析2:数组元素逆置
案例描述:请声明一个5个元素的数组,并且将元素逆置,如原数组元素为{1,3,2,5,4},逆置后输出结果为{4,5,2,3,1}。
#include<iostream>
using namespace std;
int main4()
{
//请声明一个5个元素的数组,并且将元素逆置,如原数组元素为{1,3,2,5,4},逆置后输出结果为{4,5,2,3,1}。
//1.创建数组
int arr[5] = { 1,3,2,5,4 };
cout << "数组逆置前:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
//2.实现逆置
//2.1记录起始下标位置
//2.2记录结束下标位置
//2.3起始下标与结束下标的元素互换
//2.4起始位置++,结束位置--
//2.5循环执行2.1的操作,直到起始位置>=结束位置
int start = 0;
int end = sizeof(arr) / sizeof(arr[0]) - 1;
while (start < end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
//3.打印逆置后的数组
cout << "数组逆置后:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
一维数组:冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1. 比较相邻的元素,如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
3. 重复以上步骤,每次比较次数-1,直到不需要比较。
示例:将数组{4,2,8,0,5,7,1,3,9}进行升序排序。
#include<iostream>
using namespace std;
int main5()
{
//1. 比较相邻的元素,如果第一个比第二个大,就交换他们两个。
//2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
//3. 重复以上步骤,每次比较次数 - 1,直到不需要比较。
//示例:将数组{ 4,2,8,0,5,7,1,3,9 }进行升序排序。
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
//打印排序前结果
cout << "排序前:" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
//总共排序轮数为 元素个数-1
for (int i = 0; i < 9 - 1; i++)
{
//内层循环对比次数 元素个数-当前轮数-1
for (int j = 0; j < 9 - i - 1; j++)
{
//如果第一个数字比第二个数字大,交换两个数字
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//打印排序后结果
cout << "排序后:" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
二维数组定义的四种方式:
1. 数据类型 数组名[行数][列数];
2. 数据类型 数组名[行数][列数] = { {数据1, 数据2}, {数据3, 数据4} };
3. 数据类型 数组名[行数][列数] = { 数据1, 数据2, 数据3, 数据4 };
4. 数据类型 数组名[][列数] = { 数据1, 数据2, 数据3, 数据4 };
#include<iostream>
using namespace std;
int main6()
{
//二维数组定义的四种方式:
/*
1. 数据类型 数组名[行数][列数];
2. 数据类型 数组名[行数][列数] = { {数据1, 数据2}, {数据3, 数据4} };
3. 数据类型 数组名[行数][列数] = { 数据1, 数据2, 数据3, 数据4 };
4. 数据类型 数组名[][列数] = { 数据1, 数据2, 数据3, 数据4 };
*/
//1. 数据类型 数组名[行数][列数];
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
//外层循环打印行数,内层循环打印列数
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
//2. 数据类型 数组名[行数][列数] = { {数据1, 数据2}, {数据3, 数据4} };
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;
}
//3. 数据类型 数组名[行数][列数] = { 数据1, 数据2, 数据3, 数据4 };
int arr3[2][3] = { 1,2,3,4,5,6 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr3[i][j] << " ";
}
cout << endl;
}
//4. 数据类型 数组名[][列数] = { 数据1, 数据2, 数据3, 数据4 };
int arr4[][3] = { 1,2,3,4,5,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;
}
二维数组名称的用途:
1. 可以查看二维数组所占内存空间
2. 可以获取二维数组的首地址
#include<iostream>
using namespace std;
int main7()
{
/*
二维数组名称的用途:
1. 可以查看二维数组所占内存空间
2. 可以获取二维数组的首地址
*/
//1. 可以查看二维数组所占内存空间
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组占用的内存空间为:" << sizeof(arr) << endl; // 24
cout << "二维数组第一行占用的内存空间为:" << sizeof(arr[0]) << endl; // 12
cout << "二维数组第一个元素占用的内存空间为:" << sizeof(arr[0][0]) << endl; // 4
cout << "二位数组行数为:" << sizeof(arr) / sizeof(arr[0]) << endl; // 2
cout << "二位数组列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; // 3
//2. 可以获取二维数组的首地址
cout << "二维数组首地址为:" << (int)arr << endl;
cout << "二维数组中第一行首地址为:" << (int)arr[0] << endl;
cout << "二维数组中第二行首地址为:" << (int)arr[1] << endl;
cout << "二维数组中第一个元素首地址为:" << (int)&arr[0][0] << endl;
cout << "二维数组中第二个元素首地址为:" << (int)&arr[0][1] << endl;
//数组名是常量,不可以进行赋值操作
//arr = 10;
system("pause");
return 0;
}
二维数组案例分析:考试成绩统计
案例描述:有三名同学(张三、李四、王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩。
语文 | 数学 | 英语 | |
张三 | 100 | 100 | 100 |
李四 | 90 | 50 | 100 |
王五 | 60 | 70 | 80 |
#include<iostream>
using namespace std;
#include<string>
int main8()
{
//有三名同学(张三、李四、王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩。
//1.创建三名同学成绩的二维数组
int scores[3][3] =
{
{100,100,100},
{90,50,100},
{60,70,80}
};
string names[3] = { "张三", "李四", "王五" };
//2.统计考试成绩,让每行的3列相加,统计出总和
for (int i = 0; i < 3; i++)
{
//统计分数总和
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += scores[i][j];
}
cout << names[i] << "的总分为:" << sum << endl;
//如果访问的数组中的元素比我认定的最大值还要大,更新最大值
}
system("pause");
return 0;
}