c++基础入门自学笔记总结2---C++入门(上)
好的,又到了一周检验学习成果的时候,本周主要学习了c++的数组,函数以及指针,由于这周开始上课了,于是学习的进度开始变缓,不过不管学了多少我也会坚持下去,多也好,少也好,能坚持学下去对我来说也是一种成功。
定义:所谓数组,就是一个集合,里面存放了相同类型的数据元素//可以将数组简单理解为数学中的集合
特点:
特点1:数组中的每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
1.一维数组
定义的三种方式:
I.数据类型 数组名[数组长度];
例:int arr[9]
2.数据类型 数组名[数组长度]={值1,值2一.};
例:int arr[9]={3,6,9,2,5,8,1,4,7}
3.数据类型 数组名[]={值1,值2,一};
例:int arr[]={3,6,9,2,5,8,1,4,7}
一维数组名的用途
1.可以统计整个数组在内存中的长度
cout<<"整个数组所占内存空间为:"<<sizeof(arr)<<endl;
//数组所占用的内存空间与数组中的数据多少有关,一个数据占4个字节(在64位window系统下)。
2.可以获取数组在内存中的首地址
cout<<"数组的首地址为"<<arr<<endl;(地址由十六进制表示)
//可以在数组前加 int 换算成十进制
cout<<"数组的首地址为"<<(int)arr<<endl;
cout<<"数组中第一个元素地址为"<<(int)&arr[0]<<endl;
//arr[0]前要加入“&”符否则会输出数组中的第一个元素而非元素地址
//数组名是一个常量不可以进行赋值操作
案例练习1:
五只小猪称体重
案例描述:
找出并打印最重的小猪体重。
实现思路:
代码如下:
输出结果:
结果没问题。
案例练习2:
数组元素逆置
案例描述:
请声明一个5个元素的数组,并且将元素逆置.
(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1);
实现思路:
第一步和最后一步都比较简单,这个练习的key自然是第二步,即怎么实现数组元素逆置?
元素逆置,怎么逆置?那自然是第一位与末尾调换,然后第二位与倒数第二位进行调换,依此类推,这里我们就需要一种很重要的交换元素位置的思路,由于直接将末尾元素放到首位元素位置上时会把原来首位元素值覆盖,所以我们就需要引入一个额外空间,先把第一个元素复制到一个额外的空间再让末尾元素代替首位元素,最后把额外空间中保存的首位元素放置在末尾元素位置上完成位置交换。其他元素在此基础上向左或者相右移动,可以利用for循环实现,再利用while语句判断,防止出现二次换位。
代码实现如下:
输出结果如下:
结果没问题。
完成以上案例练习后就可以开始学习冒泡排序。
冒泡排序
作用:最常用的排序算法,对组内的元素进行排序
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
3.重复以上的步骤,每比较次数-1,直到不需要比较。
//冒泡排序的实现思路与上面大致相似
初次代码实现如下:
输出结果如下:
初次代码虽然可以输出我们想要的结果,不过却还是存在一定的问题,如:实现交换时的for循环次数需要人工敲上去,假如换成别的数组,该程序可能无法成功输出,原代码灵活性不高,可以改进;
改进后代码实现如下:
输出结果如下:
2.二维数组
定义方式
1. 数据类型 数组名[ 行数 ][ 列数 ];
例:int arr [3][2];
2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
例:int arr[2][3]=
{
{2,6,9},
{5,4,7}
};
3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
例:int arr[2][2]={2,3,5,6};
4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
例:int arr[][3]={4,5,6,9,8,7};
//一般推荐第二种写法,比较直观。
//用嵌套循环进行打印,外层循环打印行数,内层循环打印列数
二维数组数组名
作用:
1.查看二维数组所占内存空间
2.获取二维数组首地址
实现方式与一维数组相似,这里就不再赘述。
总结1:二维数组名就是这个数组的首地址
总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小
案例练习:
案例描述:
有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,
实现思路:
首先创建一个数组,然后可以用for嵌套循环将每个人的三科成绩进行相加再各自输出结果
//如果想要输出各自的名字就需要利用string类型的数组,不过在使用string数据类型时需要先写出头文件
#include<string>程序才能正常运行。
代码实现如下:
输出结果: