【C++】学习笔记[三]

文章目录

  • 一、数组
    • (一)一维数组
    • (二)二维数组
      • 二维数组应用案例
  • 二、算法:冒泡排序

一、数组

(一)一维数组

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

  • 数组中每个数据元素都是相同的数据类型
  • 数组是由连续的内存位置组成的

练习代码如下:

#include 
using namespace std;

int main()
{
     
	//一维数组的定义方式,有三种
	int arr[5];//第一种
	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;

	for (int i = 0; i < 5; i++)//循环打印数组中的元素
	{
     
		cout << arr[i] << endl;
	}

	cout << "*****************" << endl;

	int brr[5] = {
      10,20,30,40,50 };//第二种
	/*cout << brr[0] << endl;
	cout << brr[1] << endl;
	cout << brr[2] << endl;
	cout << brr[3] << endl;
	cout << brr[4] << endl;*/

	for (int i = 0; i < 5; i++)
	{
     
		cout << brr[i] << endl;
	}

	cout << "*****************" << endl;

	int crr[5] = {
      1,2,3 };//剩余两个会用0来填补
	for (int i = 0; i < 5; i++)
	{
     
		cout << crr[i] << endl;//1  2  3  0  0
	}

	cout << "*****************" << endl;

	int drr[] = {
      90,80,70,60,50,40,30,20,10 };//第三种,可以自动推导出数组中数据元素的个数
	for (int i = 0; i < 9; i++)
	{
     
		cout << drr[i] << endl;
	}

	return 0;
}

注意:

  • 给数组起名时不要和变量重名
  • 数组的下标是从0号下标开始的

一维数组名称用途:

  • 可以统计整个数组在内存中的长度
  • 可以获取数组在内存中的首地址

练习代码如下:

#include 
using namespace std;

int main()
{
     
	int arr[5] = {
      1,2,3,4,5 };

	cout << sizeof(arr) << endl;//统计整个数组在内存中的长度
	cout << sizeof(arr[0]) << endl;//统计数组中第一个元素所占内存的长度
	cout << sizeof(arr) / sizeof(arr[0]) << endl;//统计数组中元素的个数

	cout << (int)arr << endl;//数组的首地址
	cout << (int)&arr[0] << endl;//数组第一个元素的地址
	//数组的首地址就是数组第一个元素的地址
	
	return 0;
}

【C++】学习笔记[三]_第1张图片
注意:数组名是一个常量,不能进行赋值操作。

案例练习

  • 五只小猪称体重:在一个数组中记录了五只小猪的体重,如int arr[5]={300,350,200,400,250},找出并打印最重的小猪体重

案例代码如下:

#include 
using namespace std;

int main()
{
     
	//五只小猪称体重,在数组中找到最大值

	int arr[5] = {
      250,500,350,400,200 };

	int max = 0;//认定0就是最大值

	for (int i = 0; i < 5; i++)
	{
     
		if (arr[i] > max)//依次遍历找最大值
		{
     
			max = arr[i];
		}
	}

	cout << max << endl;//打印最大值

	return 0;
}

【C++】学习笔记[三]_第2张图片

  • 数组元素逆置:请声明一个五个元素的数组,并且将元素逆置

案例代码如下:

#include 
using namespace std;

int main()
{
     
	int arr[5] = {
      1,2,3,4,5 };
	for (int i = 0; i < 5; i++)
	{
     
		cout << arr[i] << endl;
	}

	int start = 0;//第一个元素下标
	int end = sizeof(arr) / sizeof(arr[0]) - 1;//最后一个元素下标

	//实现数组逆置
	while (start < end)
	{
     
		int tmp = arr[start];
		arr[start] = arr[end];
		arr[end] = tmp;
		start++;
		end--;
	}

	for (int i = 0; i < 5; i++)
	{
     
		cout << arr[i] << endl;
	}
	return 0;
}

【C++】学习笔记[三]_第3张图片

(二)二维数组

二维数组就是在一维数组的基础上加一个维度

练习代码如下:


#include 
using namespace std;

int main()
{
     
	//二维数组的定义方式 四种
	//定义一个两行三列的数组

	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;

	int brr[2][3] = {
      {
     1,2,3},{
     4,5,6} };//第二种

	int crr[2][3] = {
      1,2,3,4,5,6 };//第三种 根据行数和列数可以自动推导出元素在对应的位置

	int drr[][3] = {
      1,2,3,4,5,6 };//第四种,可以根据元素个数和列数推导出有几行


	for (int i = 0; i < 2; i++)//外层循环打印行数
	{
     
		for (int j = 0; j < 3; j++)//内层循环打印列数
		{
     
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	cout << "*************************" << endl;

	for (int i = 0; i < 2; i++)
	{
     
		for (int j = 0; j < 3; j++)
		{
     
			cout << brr[i][j] << " ";
		}
		cout << endl;
	}
	cout << "*************************" << endl;

	for (int i = 0; i < 2; i++)
	{
     
		for (int j = 0; j < 3; j++)
		{
     
			cout << crr[i][j] << " ";
		}
		cout << endl;
	}

	cout << "*************************" << endl;

	for (int i = 0; i < 2; i++)
	{
     
		for (int j = 0; j < 3; j++)
		{
     
			cout << drr[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

二维数组的数组名

  • 查看二维数组所占内存空间
  • 获取二维数组首地址

练习代码如下:

#include 
using namespace std;

int main()
{
     
	int arr[2][3] = {
      {
     1,2,3},{
     4,5,6} };

	cout << sizeof(arr) << endl;//查看该数组所占内存空间有多大
	cout << sizeof(arr[0]) << endl;//查看二维数组第一行占用内存空间大小
	cout << sizeof(arr[0][0]) << endl; //二维数组第一个元素占用内存空间大小

	//二维数组的行数
	cout << sizeof(arr) / sizeof(arr[0]) << endl;

	//二维数组的列数
	cout << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;

	//查看二维数组的首地址
	cout << arr << endl;
	cout << (int)arr << endl;

	//二维数组第一行首地址
	cout << arr[0] << endl;

	//二维数组第一行第一个元素的首地址
	cout << &arr[0][0] << endl;

	//二维数组第二行首地址
	cout << arr[1] << endl;
	return 0;
}

【C++】学习笔记[三]_第4张图片

二维数组应用案例

请输出下面三名同学的总成绩

【C++】学习笔记[三]_第5张图片

案例代码如下:

#include 
#include 
using namespace std;

int main()
{
     
	int arr[3][3] = {
      {
     100,100,100},{
     90,50,100},{
     60,70,80} };
	string name[3] = {
      "张三","李四","王五" };

	for (int i = 0; i < 3; i++)
	{
     
		int sum = 0;
		for (int j = 0; j < 3; j++)
		{
     
			sum += arr[i][j];//计算每个人的总分
		}
		cout << name[i] << "的总分为:" << sum << endl;
	}
	return 0;
}

【C++】学习笔记[三]_第6张图片

二、算法:冒泡排序

冒泡排序

  • 比较相邻元素,如果第一个比第二个大就交换他们
  • 对每一个相邻元素做同样的工作,执行完毕后找到第一个最大的值
  • 重复以上的步骤,每次比较次数-1,直到不需要比较

冒泡排序代码如下:

#include 
using namespace std;

int main()
{
     
	//利用冒泡排序实现升序序列

	int arr[9] = {
      4,3,6,8,10,1,2,9,7 };

	for (int i = 0; i < 9; i++)
	{
     
		cout << arr[i] << " ";
	}
	cout << endl;
	cout << "**********************" << endl;

	for (int i = 0; i < 9 - 1; i++)//总共排序的轮数:元素的个数-1
	{
     
		for (int j = 0; j < 9 - i - 1; j++)//每轮比较的次数=元素个数-当前轮数-1
		{
     
			if (arr[j] > arr[j + 1])
			{
     
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}

	for (int i = 0; i < 9; i++)
	{
     
		cout << arr[i] << " ";
	}
	return 0;
}

【C++】学习笔记[三]_第7张图片
✨✨✨
坚持!

你可能感兴趣的:(#,c++笔记,c++)