C++:模块3-------数组
- 数组概念:
- 数组特点:
- 数组访问方法:
- 一维数组:
- 1.1三种定义形式:(和C语言中一样)
- 1.2一维数组数组名的作用:
- (1) 统计数组在内存中的长度
- (2)可以通过数组名获取数组首地址(等同于数组首元素的地址)
- 1.3注意:
- 1.4一维数组案例:
- 1.4.1 数组逆序输出:
- (1)下标访问逆序输出
- (2)同一块内存空间中动态交换后再输出
- 1.4.2 冒泡排序:
- 二维数组:
- 2.1四种定义格式:
- 2.2 二维数组数组名作用:
- 1 查看二维数组所占内存空间:使用sizeof(数组名)单位为字节
- 2 可以查看二维数组首地址
- 2.3 二维数组案例:成绩求和
数组概念:
集合,存放相同类型的元素
数组特点:
数组访问方法:
使用下标索引值对数组进行访问
一维数组:
1.1三种定义形式:(和C语言中一样)
(1)数据类型 数组名 [数组长度]; 只定义不初始化
(2)数据类型 数组名 [ 数组长度]={ 元素1,元素2…}; 定义并初始化
(3)数据类型 数组名 [ ]={ 元素1,元素2…}; 相比2省略数组长度 (系统会根据初始化的元素个数给出数组长度)
1.2一维数组数组名的作用:
(1) 统计数组在内存中的长度
sizeof(数组名)单位是字节
求数组中元素的个数:sizeof(arr)/sizeof(arr[0])
(2)可以通过数组名获取数组首地址(等同于数组首元素的地址)
1.3注意:
数组名是常量,不可以进行赋值操作
数组末尾下标=数组长度-1=sizeof(arr)/sizeof(arr[0]) - 1
1.4一维数组案例:
1.4.1 数组逆序输出:
(1)下标访问逆序输出
#include<iostream>
using namespace std;
int main()
{
int arr[5] = { 1,2,3,4,5 };
//下标逆序访问输出
cout << "逆序输出后的数组:" << endl;
for (int i = sizeof(arr) / sizeof(arr[0]) - 1; i >= 0; i--)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
输出结果:
(2)同一块内存空间中动态交换后再输出
//数组逆序输出
int main()
{
//创建数组
int arr[5] = { 1,3,2,5,4 };
cout << "逆序修改前的数组为:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
//实现逆序
//1 记录起始下标,末尾下标位置
//2 起始位置与结束位置元素互换
//3 起始位置++,结束位置--
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--;
}
//打印逆序后的数组
cout << "逆序后的数组" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
输出结果:
1.4.2 冒泡排序:
排序前:
9个数有8个相邻的元素:因此对比的次数为8次
第一次交换:
第二次不用交换:
第三次:
第四次:8和5交换
第五次交换:8和7交换
第六次交换:8和1交换
第7次交换:8和3交换
第八次不用交换(9>8)
经过第一轮交换8次(n-1),最大的数排到最后一位
第二轮需要比较的次数为7次(n-2),找到第二大的数字,和第一轮交换一样:每轮对比的次数=元素个数-排序轮数-1
需要进行比较的轮数为8轮(找到了前n-1个),最后一个自动会在最小的位置上:元素的个数-1=轮数
第0轮是为了用循环表示
代码:
#include<iostream>
using namespace std;
int main()
{
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] << " ";
}
system("pause");
return 0;
}
二维数组:
2.1四种定义格式:
2.2 二维数组数组名作用:
1 查看二维数组所占内存空间:使用sizeof(数组名)单位为字节
求某行的内存空间:
求二维数组行数
求二维数组列数
2 可以查看二维数组首地址
和第一行首地址,第一个元素的首地址,都是等价的
第一行和第二行的地址:不一样,相差12个字节(3个元素)
输出结果:
2.3 二维数组案例:成绩求和
1 创建二维数组,保存成绩
2 统计求和(每行相加)
代码:
int main()
{
int score[3][3] =
{
{100,100,100},
{90,50,100},
{60,70,80},
};
string names[3] = { "zs","ls","ww" };
for (int i = 0; i < 3; i++)
{
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += score[i][j];
}
cout << names[i] <<"的总成绩为" << sum << endl;
cout << endl;
}
system("pause");
return 0;
}