软件为visual studio2017,内容为C++学习笔记,以及相关的问题处理方法,目的是方便回顾和复习。
笔记来自于:黑马程序员C++教程。
所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点1:数组中的每个数组元素都是相同的类型
特点2:数组是由连续的内存位置组成的
一维数组定义的三种方式:
数据类型 数组名 [数组长度];//告知内存大小
数据类型 数组名[数组长度] = {值1,值2,...};//直接赋值
数据类型 数组名[] = {值1,值2...};//内存大小可由赋值个数进行推断
/*
数组的3种定义形式:
1、数据类型 数组名[数组长度];
2、数据类型 数组名[数组长度] = {值1,值2,值3,...}
3、数据类型 数组名[]={值1,值2,...}
*/
//1、数据类型 数组名[数组长度]
int arr[5];
//给数组中共的元素进行赋值
arr[0] = 10;
arr[1] = 15;
arr[2] = 16;
arr[3] = 13;
arr[4] = 12;
//访问素组元素
cout << arr[3] << endl;
//2、数据类型 数组名[数组长度] = {值1,值2,值3,...}
//如果在初始化数据时候,没有全部填写完,会用0来填补剩余数据
int arr2[5] = { 10,20,30,40,50 };
cout << arr2[0] << endl;
cout << arr2[1] << endl;
cout << arr2[2] << endl;
cout << arr2[3] << endl;
cout << arr2[4] << endl;
cout << "利用for循环来循环语句,如下所示:" << endl;
//使用for循环来循环下标
for (int i=0; i < 5; i++) {
cout << arr2[i] << endl;
}
//3、数据类型 数组名[] = {值1,值2,值3...}
//定义数组的时候,必须有初始长度。
int arr3[] = { 90,80,70,60,50,40,30,20,10};
for (int i = 0; i < 9; i++) {
cout <<arr3[i] <<endl;
}
//一维数组的数组名
//1、可以用来统计数组所占的内存空间
int arr5[] = { 1,2,3,4,5 };
cout << "数组所占的内存空间大小为:" <<sizeof(arr5)<< endl;
cout << "数组中的首元素所占的内存空间为:" << sizeof(arr5[0]) << endl;
cout <<"数组中的元素个数为:"<<sizeof(arr5)/sizeof(arr5[0])<<endl;
//2、可以获取数组在内存空间中的首地址,数组名直接代表首地址
cout << "数组的首地址为:" << (int)arr5 << endl;//一般返回的地址为十六进制,加上(int)获取的为十进制数
cout << "数组中的第1个元素地址为:" << (int)&arr5[0] << endl;
cout << "数组中的第2个元素地址为:" << (int)&arr5[1] << endl;
arr = 100;//错误
//五只小猪称重
int arr6[5] = {300,350,200,400,500};
int zhuzhu_max = 0;//先认定一个最大值为0
for (int i = 0; i < 4; i++) {
//相邻元素比较法,比较麻烦
/*if (arr6[i] <= arr6[i+1]) {
zhuzhu_max = arr6[i + 1];
}
else if (arr6[i] >= arr6[i + 1]) {
zhuzhu_max = arr6[i];
}*/
//使用zhuzhu_max = 0;一个元素不断比较即可。
//访问数组中的每个元素,如果这个元素比我认定的最大值要大,更新最大值
if (arr6[i] > zhuzhu_max) {
zhuzhu_max = arr6[i];//更新最大值
}
}
cout << zhuzhu_max << endl;
//数组元素逆置
//法1:创建新数组,实现数组元素逆置
int arr7[5] = { 1,2,3,4,5 };
int len = sizeof(arr7)/sizeof(arr7[0]);
cout << "数组长度为:"<< len << endl;
int res[5] = {};
for (int i=0; i<5; i++) {
res[i] = arr7[4 - i];
cout << res[i] << endl;
}
//法2:不创建新数组,而是在原有的数组基础上进行排序
int arr[5] = { 1,3,2,5,4 };
cout << "数组逆置前:" << endl;
for (int i = 0; i < 5; i++) {
cout << arr[i]<<endl;
}
//2、实现逆置(开头结尾开始处的双指针)
//2.1记录起始下标位置
//2.2记录结束下标位置
//2.3起始下标语与结束下标的元素互换
//2.4起始位置++ 结束位置-
//2.5循环执行2.1操作,直到起始位置>=结束位置
int start = 0;
int end = sizeof(arr) / sizeof(arr[0])-1;//结束时的下标为,长度减1
int temp = 0;
while(start<end) {
//实现元素互换
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;
}
//4、进行数组排序
int arr[] = { 3,5,2,1,4,6 };
//方式1:
for (int i = 5; i >=0; i--) {//找出前n个树中的最值,通过两两比较得到的
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
//对元素进行交换
int temp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = temp;
}
}
}
//方式2:
for (int i = 0; i < 6 - 1; i++) {//总排序个数为 元素个数-1
//内层循环对比 次数 = 元素个数-当前轮数 -1
for (int j = 0; j < 6 - 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 k = 0; k < 6; k++) {
cout << arr[k] << endl;
}
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = {{数据1,数据2},{数据3,数据4}};
数据类型 数组名[ 行数 ][ 列数 ] = {数据1,数据2,数据3,数据4};
数据类型 数组名[ 行数 ][ 列数 ] = {数据1,数据2,数据3,数据4}
//1、数据类型 数组名[行数][列数];
int arr[2][3];//定义一个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;
/*cout << arr[0][0] << endl;
cout << arr[0][1] << endl;
cout << arr[0][2] << endl;
cout << arr[1][0] << endl;
cout << arr[1][1] << endl;
cout << arr[1][2] << endl;*/
for (int i = 0; i < 2; i++) {//按行打印
for (int j = 0; j < 3; j++) {
cout << arr[i][j] << endl;
}
}
示例:
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;//换行
}
int arr3[2][3] = { 7,8,9,10,11,12 };// 根据元素个数进行处理为2行3列
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << arr3[i][j] <<" ";
}
cout << endl;
}
//4、数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
int arr4[][3] = { 1,2,3,4,5,6 };//[][3]行数虽然空着,但是可以通过数据进行仅计算数组的行数
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << arr4[i][j] << endl;
}
}
//1、可以查看占用内存空间大小
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;
//2、可以查看二维数组的首地址
cout << "二维数组的首地址:" << (int)arr<<endl;
cout << "二维数组第1行数据的首地址:" << (int)arr[0] << endl;
cout << "二维数组第一个元素的首地址:" << (int)&arr[0][0]<< endl;
cout << "二维数组第2行数据的首地址:" << (int)arr[1] << endl;
cout<<"二维数组第2个元素的地址"<<(int)&arr[0][1] << endl;//&为取址符
语文 | 数学 | 英语 | |
---|---|---|---|
张三 | 100 | 100 | 100 |
李四 | 90 | 50 | 100 |
王五 | 60 | 70 | 80 |
//二位数组案例-考试成绩统计
//1、创建二维数组
int scores[3][3]={
{100,100,100},
{90,50,100},
{60,70,80}
};
//2、统计每个人的总和分数
string name[3] = { "张三","李四","王五" };
//前面设置include
for (int i = 0; i < 3; i++) {
int sum = 0;//统计分数综合变量
for (int j = 0; j<3; j++) {
sum += scores[i][j];
};
cout << name[i] << "的总分为:" << sum << endl;
};
对一维数组和二维数组的定义方式进行了介绍,并通过案例对数组的使用进行了介绍。