1 概述
所谓数组,是一个存放了相同类型元素的集合
特点1:数组中每个元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
2 一维数组
2.1 定义数组
定义一个数组:
1、数据类型 数组名[数组长度];
2、数据类型 数组名[数组长度]={值1,值2……};
3、数据类型 数组名[]={值1,值2,……};
注意1:数组下标从0开始
注意2:在初始化数据时,如果没有全部填写完,会用0来填补剩余数据
注意3:定义数组时必须有一个初始的长度
注意4:数组名的命名规范与变量一致,不要和变量重名
2.2 数组名
用途:
1、统计整个数组在内存中的长度 sizeof(arr)
2、获取数组在内存中的首地址 cout<<arr;
整个数组长度/首地址长度=数组元素个数
#include<iostream>
using namespace std;
#include<math.h>
int main()
{
int arr[] = { 1,23,4,51,23 };
int num;
num = sizeof(arr) / sizeof(arr[0]);
cout << num << endl;
system("pause");
return 0;
}
2.3 练习1:五只小猪称体重
案例描述:
在一个数组中记录了五只小猪的体重
如:int arr[5]={300,350,200,400,250};
打印并找出最重的小猪体重
#include <iostream>
using namespace std;
int main()
{
int pig[] = { 100,200,3000,400,500 };
int max = 0, mid = 0,name;
for (int i = 0; i < 5; i++)
{
mid = pig[i];
if (max < mid) {
max = mid;
name = i+1;
}
}
cout << "最重的是第" << name << "只小猪" << endl;
cout << "体重为" << max << endl;
}
2.4 练习2:数组元素逆置
描述:
声明一个数组,并将元素逆置。
#include <iostream>
using namespace std;
int main()
{
int list[] = { 1,2,3,4,5 };
int num_long = 0, start = 0, end;
num_long = sizeof(list) / sizeof(list[0]);
end = num_long - 1;
int n = num_long / 2, temp;
cout << n << endl;
for (int i = 0; i < n; i++)
{
temp = list[start];
list[start] = list[end];
list[end] = temp;
start++; end--;
}
for (int j = 0; j < num_long; j++)
{
cout << list[j];
}
}
2.5 冒泡排序
1、比较相邻元素,如果第一个比第二个大,交换它俩
2、对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3、重复以上步骤,每次比较次数-1,直到不需要排序。
#include <iostream>
using namespace std;
int main()
{
//冒泡排序
int list[] = { 0,2,1,4,3 };
int numlong = sizeof(list) / sizeof(list[0]);
cout << "排序前:" << endl;
for (int a = 0; a < numlong; a++)
{
cout << list[a] << " ";
}
for (int i = 0; i < numlong - 1; i++)//总共循环轮次
{
for (int j = 0; j < numlong - i - 1; j++)//对比次数
{
if (list[j] < list[j + 1])
{
int temp = 0;
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
cout << "排序后:" << endl;
for (int a = 0; a < numlong; a++)
{
cout << list[a] << " ";
}
}umlong = sizeof(list) / sizeof(list[0]);
int pknum = numlong - 1;
do
{
for (int i = 0; i < pknum; i++)
{
int start = 0, temp = 0;
if (list[start] <= list[start + 1])
{
temp = list[start];
list[start + 1] = list[start];
list[start] = temp;
}
start++;
}
pknum--;
}while(pknum==0);
for (int j = 0; j < numlong; j++) {
cout << list[j] << "\t";
}
}
3 二维数组
3.1 定义数组
1、数据类型 数组名[行数][列数];
2、数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}};
3、数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};
4、数据类型 数组名[][列数]={数据1,数据2,数据3,数据4};
第二种定义方式更直观,提高代码可读性
int main()
{
int arr[2][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;
}
}
3.2数组名称
int arr[2][3]=
{
{1,2,3}
{4,5,6}
};
1、查看占用内存空间大小
总共占用内存sizeof(arr)
第一行占用内存sizeof(arr[0])
第一个内存占用内存sizeof(arr[0][0])
2、查看二维数组首地址(int)arr
3.3考试成绩统计
描述:
请三位同学输入自己的成绩,最终输出三位同学的总成绩。
语文 | 数学 | 英语 | |
---|---|---|---|
A | 100 | 100 | 100 |
B | 90 | 50 | 100 |
C | 60 | 70 | 80 |
#include <iostream>
using namespace std;
int main()
{
int arr[3][3] = {
{100,100,100},
{90,50,100},
{60,70,80}
};
for (int i = 0; i < 3; i++)
{
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += arr[i][j];
}
cout << sum << endl;
}
}