文章目录
- 一、数组
- (一)一维数组
- (二)二维数组
- 二维数组应用案例
- 二、算法:冒泡排序
一、数组
(一)一维数组
数组就是一个集合,里面存放了相同类型的数据元素
- 数组中每个数据元素都是相同的数据类型
- 数组是由连续的内存位置组成的
练习代码如下:
#include <iostream>
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 <iostream>
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;
}
注意:数组名是一个常量,不能进行赋值操作。
案例练习
- 五只小猪称体重:在一个数组中记录了五只小猪的体重,如
int arr[5]={300,350,200,400,250}
,找出并打印最重的小猪体重
案例代码如下:
#include <iostream>
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;
}
- 数组元素逆置:请声明一个五个元素的数组,并且将元素逆置
案例代码如下:
#include <iostream>
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;
}
(二)二维数组
二维数组就是在一维数组的基础上加一个维度
练习代码如下:
#include <iostream>
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 <iostream>
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;
}
二维数组应用案例
请输出下面三名同学的总成绩
案例代码如下:
#include <iostream>
#include <string>
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;
}
二、算法:冒泡排序
冒泡排序
- 比较相邻元素,如果第一个比第二个大就交换他们
- 对每一个相邻元素做同样的工作,执行完毕后找到第一个最大的值
- 重复以上的步骤,每次比较次数-1,直到不需要比较
冒泡排序代码如下:
#include <iostream>
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;
}
✨✨✨
坚持!