【C++:模块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;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>