C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】

目录

5 数组

5.1 概述

5.2 一维数组

5.2.1 一维数组定义方式

——示例

5.2.2 一维数组数组名

——示例

——练习案例1:五只小猪称体重

——练习案例2:数组元素逆置

5.2.3 冒泡排序

5.3 二维数组

5.3.1 二维数组定义方式

——示例

5.3.2 二维数组数组名

——示例

5.3.3 二维数组应用案例


5 数组

5.1 概述

所谓数组,就是一个集合,里面存放了相同类型的数据元素。

特点1:数组中的每个数据元素都是相同的数据类型。

特点2:数组是由连续的内存位置组成的。

5.2 一维数组

5.2.1 一维数组定义方式

一维数组定义的三种方式:

  1. 数据类型 数组名[ 数组长度 ]; int score[10];

  2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...}; int score2[6] = {3, 2, 1}; //如果{}内不足6个数据,剩余数据用0补全

  3. 数据类型 数组名[ ] = { 值1,值2 ...}; int score3[] = {30, 20, 10};

——示例

#include <iostream>
using namespace std;
/*
一维数组定义的三种方式:
1. 数据类型 数组名[ 数组长度 ];
2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
3. 数据类型 数组名[ ] = { 值1,值2 ...};
*/
int main() //数组
{//定义方式1:数据类型 数组名[元素个数];int score[10];//利用下标给数组中的元素进行赋值//数组元素的下标是从0开始索引的score[0] = 100;score[1] = 99;score[2] = 85;//利用下标输出 访问数据元素cout << score[0] << endl;cout << score[1] << endl;cout << score[2] << endl;cout << "\n" << endl;//定义方式2:数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};//如果{}内不足10个数据,剩余数据用0补全//如果在初始化数据时候,没有全部填写完,会用0来填补剩佘数据int score2[10] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};//逐个输出//cout << score2[0] << endl;//cout << score2[1] << endl;//一个一个输出太麻烦,因此可以利用循环进行输出for (int i = 0; i < 10; i++) //利用循环输出数组中的元素{cout << score2[i] << endl;}cout << "\n" << endl;//定义方式3:数据类型 数组名[] = {值1,值2 ,值3 ...};//定义数组的时候,必须有初始长度int score3[] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};for (int i = 0; i < 10; i++){cout << score3[i] << endl;}system("pause");return 0;
}

总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名。

总结2:数组中下标是从0开始索引。

5.2.2 一维数组数组名

一维数组名称的用途

  1. 可以统计整个数组在内存中的长度。

  2. 可以获取数组在内存中的首地址。

——示例

 

#include <iostream>
using namespace std;int main() //数组名用途
{//1、可以通过数组名统计整个数组占用内存大小 可以获取整个数组占用内存空间大小int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};cout << "整个数组所占内存空间为:" << sizeof(arr) << endl;cout << "每个元素所占内存空间为:" << sizeof(arr[0]) << endl;cout << "数组的元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;//2、可以通过数组名获取到数组首地址 可以通过数组名查看数组首地址cout << "数组首地址为:" << arr << endl; //数组首地址为:0x61fdf0 一般用十六进制数来表示首地址cout << "数组首地址为:" << (int)arr << endl; //将十六进制数强转为十进制数cout << "数组首地址为:" << (long)arr << endl;//数组中第一个元素地址 与 数组的首地址 是 重合的!&:取地址符cout << "数组中第一个元素地址为:" << &arr[0] << endl; //&:查看一个元素的首地址 十六进制表示地址cout << "数组中第一个元素地址为:" << (int)&arr[0] << endl; //&:查看一个元素的首地址 转为十进制的地址表示cout << "数组中第二个元素地址为:" << &arr[1] << endl;cout << "数组中第二个元素地址为:" << (int)&arr[1] << endl;//arr = 100; // 错误!数组名是常量,因此不可以进行赋值操作。return 0;
}

注意:数组名是常量,不可以赋值。

总结1:直接打印数组名,可以查看数组所占内存的首地址。

总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小。

——练习案例1:五只小猪称体重

练习案例1:五只小猪称体重

案例描述:

在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};

找出并打印最重的小猪体重。

 

#include <iostream>
using namespace std;int main()
{//1、创建5只小猪的体重数组int arr[5] = {300, 350, 200, 400, 250};//2、从数组中找到最大值int max = 0; //先认定一个最大值为0for (int i = 0; i < 5; i++){cout << arr[i] << endl;//如果访问的数组中的元素比我认定的最大值还要大,更新最大值if (arr[i] > max){max = arr[i];}}//3、打印最大值cout << "最重的小猪体重为:" << max << endl;system("pause");return 0;
}

——练习案例2:数组元素逆置

练习案例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, 5, 7, 9};cout << "数组逆置前:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << "  ";}//2、实现逆置//2.1、记录起始下标的位置//2.2、记录结束下标的位置//2.3、起始下标与结束下标的元素互换//2.4、起始位置++ ;结束位置--//2.5、循环执行2.1操作,直到起始位置>=结束位置int start = 0;                                //起始下标int end = sizeof(arr) / sizeof(arr[0]) - 1; //结束下标while (start < end){//实现元素互换int temp = arr[start];arr[start] = arr[end];arr[end] = temp;//下标更新start++;end--;}//3.打印逆置后的数组cout << "\n数组逆置后:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << "  ";}cout << endl;system("pause");return 0;
}

5.2.3 冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序。

  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};//打印排序前的数字cout << "排序前:" << endl;for (int i = 0; i < 9; i++){cout << arr[i] << "  ";}cout << endl;//开始冒泡排序//总共排序轮次 = 元素个数 — 1for (int i = 0; i < 9 - 1; i++){//内层循环对比:次数 = 元素个数 - 当前轮次 - 1for (int j = 0; j < 9 - 1 - i; 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;
}

5.3 二维数组

二维数组就是在一维数组上,多加一个维度。

5.3.1 二维数组定义方式

二维数组定义的四种方式:

  1. 数据类型 数组名[ 行数 ][ 列数 ];

  2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };

  3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

  4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性。

——示例

 

#include <iostream>
using namespace std;int main() //二维数组的定义方式
{//方式1:数组类型 数组名 [行数][列数]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;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] << " ";}cout << endl;}cout << "---" << endl;//方式2:数据类型 数组名[行数][列数] = { {数据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;}cout << "---" << endl;//方式3:数据类型 数组名[行数][列数] = { 数据1, 数据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 << arr3[i][j] << " ";}cout << endl;}cout << "---" << endl;//方式4:数据类型 数组名[][列数] = { 数据1, 数据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;}system("pause");return 0;
}

总结:在定义二维数组时,如果初始化了数据,可以省略行数。

5.3.2 二维数组数组名

  • 查看二维数组所占内存空间。

  • 获取二维数组首地址。

——示例


三个地址是重合的:

  1. 二维数组的首地址
  2. 第一行数据的首地址
  3. 第一个数据的首地址(第一行第一个元素的首地址)
#include <iostream>
using namespace std;int main()
{//二维数组数组名int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};//1、可以查看占用内存空间大小cout << "二维数组(占用内存空间)大小为:" << sizeof(arr) << endl;                  //24cout << "二维数组第一行(占用内存空间)大小为:" << sizeof(arr[0]) << endl;           //12cout << "二维数组第一个元素(占用内存空间)大小为:" << sizeof(arr[0][0]) << endl; //4cout << "二维数组行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;       //2cout << "二维数组列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; //3//2、可以查看二维数组的首地址cout << "二维数组首地址为:" << arr << endl; //0x61fe00cout << "二维数组第一行地址:" << arr[0] << endl;cout << "二维数组第二行地址:" << arr[1] << endl; //第一二行相差3个数据cout << "二维数组首地址:" << (int)arr << endl;cout << "二维数组第一行地址:" <<(int) arr[0] << endl;cout << "二维数组第二行地址:" << (int)arr[1] << endl;cout << "二维数组第一个元素地址:" << &arr[0][0] << endl; //访问具体元素的地址,要加&cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;cout << "二维数组第一个元素地址:" <<(int) &arr[0][0] << endl;cout << "二维数组第二个元素地址:" <<(int) &arr[0][1] << endl;// system("pause");return 0;
}

总结1:二维数组名就是这个数组的首地址。

总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小。

5.3.3 二维数组应用案例

考试成绩统计:

案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩

姓名 语文 数学 英语
张三 100 100 100
李四 90 50 100
王五 60 70 80

参考答案:

 

#include <iostream>
#include <string>
using namespace std;int main() //二维数组案例-考试成绩统计
{//1、创建二维数组int scores[3][3] = {{100, 100, 100}, //张三{90, 50, 100},  //李四{60, 70, 80}    //王五};//存放姓名的字符串一维数组string names[3] = {"张三", "李四", "王五"};//2、统计每个人的总和分数for (int i = 0; i < 3; i++) //行{int sum = 0;              //统计分数总和for (int j = 0; j < 3; j++) //列{sum += scores[i][j];// cout << scores[i][j] << " ";}// cout << endl;// cout << "第" << i + 1 << "个人的总分为:" << sum << " !" << endl;cout << names[i] << "的总分为:" << sum << " !" << endl;}system("pause");return 0;
}

ヾ(◍°∇°◍)ノ゙   

C++阶段01笔记05【数组(概述、一维数组、二维数组)】相关推荐

  1. php二维数组 转一维,php二维数组转一维数组方法

    如何将下面的二维数组转为一维数组. php二维数组转一维数组,下面介绍两种方法 $msg = array( array( 'id'=>'45s', 'name'=>'jacks' ), a ...

  2. JAVA笔记- JAVA一维、二维数组的遍历与使用详解

    1- 数组概述 需求:现在需要统计某公司员工的工资情况,例如计算平均工资.找到最高工资等.假设该公司有80名员工,用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作, ...

  3. 第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)...

    一维数组:1:/*数组:1. 数组是一种引用类型2. 数组是一种简单的数据结构,线性的机构3. 数组是一个容器,可以用来存储其他元素,4. 数组也是可以存储任意数据类型的元素5. 数组分为:一维数组, ...

  4. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  5. 10-20C#基础---一维、二维数组冒泡排序

    一.一维数组 1.定义:是某一种数据类型的数据的组合,数组用来分组基本类型或相同类型的对象.数组中的实体叫做数组的元素或成员. 2. 格式:int[ ] shuzu=new int[ 6];存放int ...

  6. C语言动态开辟数组(一维与二维)【malloc() free()】

    了解并熟悉malloc(),calloc(),realloc(),free()等动态开辟函数. 重点使用malloc()与free()进行数组的动态开辟! 一.认识malloc().free() C+ ...

  7. 13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

    13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中.二维数组中的数已在主函数中 ...

  8. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  9. js一维数组,api,二维数组

    1.定义数组 空数组 1.数组字面量:[ ] var 变量名 = [ ]://定义一个空的数组把数组保存到变量中 2.新的数组对象 var 变量名 = new Array()://定义一个新的数组对象 ...

最新文章

  1. skyline粒子效果xml获取
  2. resin安装与配置
  3. 谷歌浏览器翻译插件 saladict:沙拉查词
  4. saltStack运维工具的部署及master迁移实现的过程详解
  5. ADSL参数BITSWAP作用
  6. c++ vector 赋值_Vector 源码剖析
  7. CDN(内容分发网络)技术原理(转)
  8. 如何解决秒杀的性能问题和超卖的讨论
  9. IOS开发笔记(1)---Hello World
  10. itunes备份包括哪些内容_建筑工程的招标包括哪些内容?
  11. 缺陷管理工具JIRA和禅道对比
  12. 关于广告投放系统:竞价策略(2018)
  13. origin中画双y轴
  14. 搜集源码之github搜索语法,网盘搜索,搜索引擎等
  15. python soup attrs_python模块之beautifulSoup
  16. gvim中利用录制宏产生连续数字
  17. 【Java 设计模式】UML 之类图
  18. SRS4.0源码分析-RTMP入口
  19. java 水仙花数_如何理解Java中的水仙花数?
  20. 转:命令查看IPV6的IP,路由,邻居信息

热门文章

  1. for(;;)是什么,for(;;)的作用
  2. Windows10多桌面的理解和作用
  3. 远程开发 代码提示_VS Code 远程开发和代码评审实践
  4. 字符串从右截取_跟运维组学Python基础day04(字符串str的索引和切片)
  5. 入住两年的CSDN,在今天2020年8月27日,成为CSDN博客专家
  6. zip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable
  7. java 原子类能做什么_Java原子类中可以靠版本号比较为什么还需要CAS操作??
  8. 直播 | WWW 2021论文解读:基于隐私保护的模型联邦个性化
  9. FedML联邦机器学习框架正式开源,助力算法开发和性能比较
  10. 向预训练进一步:掩码式非自回归模型训练