数组笔记"/>
速成数组笔记
数组
特点 :
1、数组中的每个数据元素都是相同的数据类型
2、数组是由连续的内存位置组成的
一维数组
1、一维数组定义方式(3种)
(1)数据类型 数组名[数组长度];
(2)数据类型 数组名[数组长度]={值1,值2…};
(3)数据类型 数组名[ ]={值1,值2…};
注意:定义数组的时候,必须有初始长度
2、数组的定义与输出
#include <iostream>
using namespace std;
int main() {int arr2[5] = { 10,20,30,40,50 };//等于 int arr2[ ] = { 10,20,30,40,50 };for (int i = 0; i < 5; i++) {cout << arr2[i] << " "; //双引号间有空格符,打印的时候不同数字之间也就会出现空格}return 0;
}
3、数组地址问题
1、sizeof(arr2):表示的大小为数组起始位置到结束位置大小
sizeof(arr[1]):数组中统计某一元素的内存空间大小
4、一维数组名称用途
(1)、可以统计整个数组在内存中的长度
#include <iostream>
using namespace std;int main() {int arr[5] = { 0,1,2,3,4 };cout << "整个数组占用内存空间为:" << sizeof(arr) << endl;cout << "每个元素占用内存空间为:" << sizeof(arr[0]) << endl;cout << "统计数组中元素的个数:" << sizeof(arr) / sizeof(arr[0]) << endl;return 0;
}
(2)、可以获取数组在内存中的首地址
int main() {int arr[5] = { 0,1,2,3,4 };cout << "数组的首地址为:" << (int)arr << endl;cout << "数组中第1个元素地址为:" << (int)&arr[0] << endl;cout << "数组中第2个元素地址为:" << (int)&arr[1] << endl; //添加(int)的目的是把数组内存地址16进制为强转为10进制,使用&就是取地址
注意:数组名是常量,因此不可以赋值操作
5、一维数组练习案例
1、五只小猪称体重
案例描述:在一个数组中记录了五只小猪的体重,如:int arr[5]={300,280,350,400,200}找出并打最重小猪体重
#include <iostream>
using namespace std;int main() {//1、创建5只小猪体重的数组int arr[5] = { 300,280,350,400,200 };//2、从数组中找到最大值int max = 0; //先认定一个最大值为0for (int i = 0; i < 5; i++) {//如果访问的数组中的元素比我认定的最大值还要大,更新最大值if (arr[i] > max) {max = arr[i];}}//3、打印最大值cout << "最重的小猪体重为:" << max << endl;system("pause");return 0;
}
2、数组元素逆置
案例描述:请先声明一个5元素的数组,并且将元素逆置。(如原数组元素为:1,3,2,5,4逆置后输出结果为:4,5,2,3,1)
#include <iostream>
using namespace std;int main() {//1、创建数组int arr[5] = { 1,3,2,5,4 };cout << "数组逆置前的顺序为:";for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}cout << endl;
//2、实现逆置//2.1记录起始下标位置int start = 0; //起始位置下标//2.2记录结束下标位置int end = (sizeof(arr) / sizeof(arr[0])) - 1; //结束位置下标//2.3起始下标与结束下标的元素互换while (start < end) { // //2.5循环执行2.1操作,直到起始位置>=结束位置//实现元素互换int temp = arr[start];arr[start] = arr[end];arr[end] = temp; //2.4起始位置++,结束位置--,下标更新start++;end--;}
//3、打印逆置后的数组cout << "数组元素逆置后顺序为:";for (int i = 0; i < 5; i++) {cout << arr[i]<<" ";}return 0;
}
6、冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1、比较相邻的元素。如果第一个比第二个打,就交换她们两个
2、对每一对相邻元素做同样的工作,执行完毕后,找到一个最大值
3、重复以上的步骤,每次比较次数-1,直到不需要比较
示例:将数组{4,2,8,0,5,7,1,3,9}进行升序排序
#include <iostream>
using namespace std;int main() {int arr[9] = { 4,2,8,0,5,7,1,3,9 };int m = sizeof(arr) / sizeof(arr[0]); //统计数组个数cout << "排序前:" << endl;for (int i = 0; i < 9; i++) {cout << arr[i] << " ";}cout << endl;//开始冒泡排序//总排序轮数为元素-1for (int i = 0; i < m - 1; i++) {//内层循环对比,次数=元素个数-当前轮数-1for (int j = 0; j <m - 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] << " ";}cout << endl;system("pause");return 0;
}
二维数组
1、二维数组定义方式及输出
(1)数据类型 数组名[行数],[ 列数 ];
#include <iostream>
using namespace std;int main() {//1、数据类型 数组名[行数], [列数];int arr[2][3];arr[0][0] = 1; //第1行,第1列数值arr[0][1] = 2;//第1行,第2列数值arr[0][2] = 3;arr[1][0] = 4;//第2行,第1列数值arr[1][1] = 5;arr[1][2] = 6;//外层循环打印行数,内存循环数打印列数for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {cout << arr[i][j]<<" ";}cout << endl;}system("pause");return 0;
}
(2)数据类型 数组名[行数],[ 列数 ]={{数据1,数据2},{数据3,数据4}};
#include <iostream>
using namespace std;int main() {//数据类型 数组名[行数],[ 列数 ]={{数据1,数据2},{数据3,数据4}};int arr2[2][3] = {{1,2,3},{4,5,6}};//外层循环打印行数,内存循环数打印列数for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {cout << arr2[i][j] << " ";}cout << endl;}system("pause");return 0;
}
(3)数据类型 数组名[行数],[ 列数 ]={数据2,数据2,数据3,数据4};
//数据类型 数组名[行数],[ 列数 ]={数据2,数据2,数据3,数据4};int arr3[2][3] = {1,2,3,4,5,6};//外层循环打印行数,内存循环数打印列数for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {cout << arr2[i][j] << " ";}cout << endl;}
(4)数据类型 数组名[],[ 列数 ]={数据1,数据2,数据3,数据4};
//数据类型 数组名[行数],[ 列数 ]={数据2,数据2,数据3,数据4};int arr4[][3] = {1,2,3,4,5,6};//外层循环打印行数,内存循环数打印列数for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {cout << arr4[i][j] << " ";}cout << endl;}
2、二维数组数组名
(1)查看二维数组所占内存空间
//二维数组名称用途//1、可以查看占用内存空间大小int arr[2][3] = {{1,2,3},{4,5,6}};cout << "二维数组占用内存空间为:" << sizeof(arr)<<endl;cout << "二维数组第1行占用内存为:" << sizeof(arr[0]) << endl;cout << "二维数组第1行第1列占用内存为:" << sizeof(arr[0][0]) << endl;cout << "二维数组行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;cout << "二维数组列 数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
(2)获取二维数组首地址
cout << "二维数组首地址为:" << (int)arr << endl;cout << "二维数组第1行首地址为:" << (int)arr[0] << endl;cout << "二维数组第1行第2列地址为:" << (int)&arr[0][1] << endl;
cout << "二维数组第2行第2列地址为:" << (int)&arr[1][1] << endl;
3、应用案例
1、考试成绩统计
案例描述;有3名同学(张三、李四、王五),在一次考试中得成绩分别如下表,请分别输出三名同学得总成绩
语文 | 数学 | 英语 | |
---|---|---|---|
张三 | 99 | 100 | 100 |
李四 | 90 | 65 | 100 |
王五 | 72 | 80 | 90 |
#include<iostream>
#include <string>
using namespace std;int main() {int arr[3][3] = {{99,100,100},{90,65,100},{72,80,90}};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;}system("pause");return 0;
}
更多推荐
速成数组笔记
发布评论