C大学基础教程第五章zh.ppt
《C大学基础教程第五章zh.ppt》由会员分享,可在线阅读,更多相关《C大学基础教程第五章zh.ppt(63页珍藏版)》请在三一办公上搜索。
1、C+大学基础教程,第5章 数组北京科技大学 计算机系,2023/11/7,北京科技大学计算机系,-2-,数组基本概念,数组是具有一定顺序关系的若干相同类型变量的集合。组成数组的变量称为该数组的元素。数组元素都有相同的变量名(数组名),但是有不同的下标。数组属于构造类型,一个人N门课的成绩怎样存储和处理?一个班N门课的成绩怎样存储和处理?.,2023/11/7,北京科技大学计算机系,-3-,一维数组的定义与引用,一维数组的定义类型说明符 数组名 常量表达式;例如:int a10;1)a 为整型数组名;2)a数组有10个元素,每个元素都是整数数据:a0.a9,数 组,上C+课程的学生成绩(120个
2、学生)float scoresCPlus120;,scoresCPlus0,scoresCPlus119,一维数组的存储顺序,数组元素在内存中顺次存放,它们的地址是连续的。Eg.int a10;具有10个元素的数组 a,在内存中的存放次序如下:,数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。,数 组,2023/11/7,北京科技大学计算机系,-5-,一维数组的定义与引用,引用数组必须先定义,后使用。只能逐个引用数组元素,而不能一次引用整个数组数组元素的引用是通过下标变量实现的。元素的引用形式为:数组名下标表达式例如1:int a10;a0=a5+a7-a2*3 2:int sa
3、laries 6;int a=5;salariesa=900;,数 组,2023/11/7,北京科技大学计算机系,-6-,注意,在使用数组元素时需要注意:数组元素的下标表达式其结果必须正整数(0)。数组元素的下标值从0开始,不得超过声明时所定义的上界。,2023/11/7,北京科技大学计算机系,-7-,数组的下标,数组元素的下标是数组元素到数组开始地址的偏移量。第1个元素的下标为0,其地址是数组的首地址,第2个元素的下标为1,偏移量距离首地址是1个数组元素大小,依次类推。因此,数组元素是一系列大小相同的连续项,每项到公共基点(数组起始地址)的偏移量是固定的。,2023/11/7,北京科技大学计
4、算机系,-8-,错误的数组定义语句,void VoidArray10;/void不可以做数组类型int a=9;float floatArraya;/数组的长度不可以是变量char charArray1.5+1.5;/3.0不是整数,2023/11/7,北京科技大学计算机系,-9-,例5.1 定义一个10个整数的数组,解:以ARRAY命名的数组,用100至109对数组元素赋值,并对其求和。需要在一个循环中使用数组。这是使用数组最经常的方式。void main()int ARRAY 10;int sum=0;for(int i=0;i10;i+)ARRAYi=100+i;sum+=ARRAYi;
5、,2023/11/7,北京科技大学计算机系,-10-,注意,不能直接把一个数组赋给另一个数组。假设要将数组total_sales的值拷贝到数组saved_sales中,使用下面的赋值方法就是错误的:saved_sales=total_sales;/error 应使用一个循环语句将total_sales中的元素的值逐个赋给数组saved_sales中的每个元素。如下面的代码所示:for(int i=0;iARRAY_SIZE;i+)saved_salesi=total_salesi;,2023/11/7,北京科技大学计算机系,-11-,一维数组的初始化,可以使数组得到初值:在声明数组时对数组元素
6、赋以初值。例如:int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分元素赋初值。其他元素自动赋值为0例如:int a10=0,1,2,3,4;在对全部数组元素赋初值时,可以不指定数组长度。长度为初值的个数。例如:int a=1,2,3,4,5 等价于 int a5=1,2,3,4,5,数 组,2023/11/7,北京科技大学计算机系,-12-,大括号的使用,通过使用大括号,可初始化任何一种类型的数组。例如,要记录前三年的销售总额,则可以如下定义并初始化一个数组:double sales=4323.43,122355.32,343324.96 注意:上面这种使用大括号来初始化数
7、组的方法只能在定义数组时使用。在数组定义之后,就不能用这种方法了,而只能逐个元素地赋值。double sales3;sales=4323.43,122355.32,343324.96,2023/11/7,北京科技大学计算机系,-13-,全局数组初始化,C+自动将全局数组变量中的所有元素初始化为0或null。如果未赋初值,那么一个全局的字符数组中的所有元素将为null(空),一个全局的数字数组中的所有元素将为0。程序中应尽量限制全局数组变量的使用。如果要用,也最好在程序中用语句将其显式初始化为0,以明确表示编程者的意图。,2023/11/7,北京科技大学计算机系,-14-,错误例子,例如下面的代
8、码对数组进行初始化是错误的:int array15=0,1,2,3,4,5;/error初始化值个数多于数组元素个数int array25,1,2,3;/error不能加入“,”来跳过不赋值的元素。int array25=0,2,3,4;/error不能加入“,”来跳过不赋值的元素。int array35=;/error语法格式错误,2023/11/7,北京科技大学计算机系,-15-,例5.2初始化全局和局部数组,#include using namespace std;int array15=1,2,3;static int array25=1;void main()int arr15=2;
9、static int arr25=1,2;int n;cout global:;for(n=0;n5;n+)cout array1n;运行结果为:global:1 2 3 0 0/全局数组初始化的结果global static:1 0 0 0 0/全局静态数组初始化的结果local:2 0 0 0 0/局部数组初始化的结果local static:1 2 0 0 0/局部静态数组初始化的结果,cout nglobal static:;for(n=0;n5;n+)cout array2n;cout nlocal:n;for(n=0;n5;n+)cout arr1n;cout nlocal sta
10、tic:;for(n=0;n5;n+)cout arr2n;cout endl;,2023/11/7,北京科技大学计算机系,-16-,例5.3 将5个温度值赋给数组,#include stdafx.h#includevoid main()float temp5;temp0=31.3;temp1=28.7;temp2=32.2;temp3=34.5;temp4=19.7;coutDaily temperature for 5 daysn;for(int i=0;i 5;i+)couttempin;,2023/11/7,北京科技大学计算机系,-17-,数组的大小和数组越界,定义数组时,编译器必须知
11、道数组的大小。如果数组定义时省略了大小,由初始化的值的个数来决定数组大小。在程序中怎么知道数组的大小呢?sizeof操作解决了该问题。,2023/11/7,北京科技大学计算机系,-18-,sizeof,sizeof()能够返回传递给它的数据类型所占用内存的字节数。如果将一个数组变量传给sizeof(),则它将返回系统为此数组在内存中预留的字节数。因此,数组的大小可用用以下公式来计算:数组大小=sizeof(数组名)/sizeof(数组类型),2023/11/7,北京科技大学计算机系,-19-,例5.7 用sizeof确定数组的大小,#include using namespace std;vo
12、id main()int a=1,2,4,8,16;for(int i=0;i(sizeof(a)/sizeof(int);i+)cout ai;cout endl;运行结果为:1 2 4 8 16,2023/11/7,北京科技大学计算机系,-20-,一维数组的举例,例:6个整数排列顺序,从小到大排列输出。1)定义存放6个数的变量 int a6;2)先从6个数中找到最小,放到a0中。for(i=1;iai)swap(a0,ai);3)再从5个数中找到最小,放到a1中。for(i=2;iai)swap(a1,ai);,数 组,2023/11/7,北京科技大学计算机系,-21-,以6个数:3、7、
13、5、6、8、0为例。思路:第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。第二趟:将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数;。,选择法序排序(从小到大)。,2023/11/7,北京科技大学计算机系,-22-,不交换,不交换,不交换,不交换,第一趟 j=0,交换,选择法序排序(续)。,2023/11/7,北京科技大学计算机系,-23-,j=1,j=2,j=3,j=4,j=0,选择法序排序(续)。,2023/11/7,北京科技大学计算机系,-24-,一维数组的举例,例:
14、6个整数排列顺序,从小到大排列输出。算法的实现使用二重循环:for(j=0;jai)swap(ai,aj);,数 组,2023/11/7,北京科技大学计算机系,-25-,理解多维数组(5.7),一维数组是多个数值的单列表示,而多维数组则是数值的表格,甚至多表格表示,它具有多个下标值,最常用的表格是二维表格(具有两个下标)。,2023/11/7,北京科技大学计算机系,-26-,例子,假定要记录一个垒球队中每个队员的击球数。队中有6个队员,进行了3场比赛。表中所示为击球记录。,2023/11/7,北京科技大学计算机系,-27-,三维表的图示,C+提供存储多维数据的能力,尽管现实世界很少碰到三维以上
15、的情况。,存储顺序按行存放,上例中数组a的存储顺序为:,二维数组的声明类型说明符 数组名常量表达式常量表达式例如:float a34;,引用例如:b12=a23/2,下标不要越界,二维数组的定义及引用,数 组,2023/11/7,北京科技大学计算机系,-29-,表5.2球队数组的下标,team表具有18个元素,定义:int team63元素下标值如下表,2023/11/7,北京科技大学计算机系,-30-,C+按行存储多维数组,二维数组实际上是“数组的数组”,它以行和列的形式出现,实际上还是一个一维数组,只不过数组的每个元素的类型不是整型,浮点型或字符型,而是另外一个数组。数组元素也是连续存储的
16、,按行存储,即最右边的下标变化最快,最左边的下标变化最慢。,2023/11/7,北京科技大学计算机系,-31-,二维数组看作是一维数组的一维数组,一维数组的4个元素是ara_name0 ara_name3。每一个元素则是其对应的一维数组的首地址。,2023/11/7,北京科技大学计算机系,-32-,二维表的内存映象,C+按行把多维数组映射到线性内存图示一个44的数组int table33的内存映象,分行给二维数组赋初值例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;将所有数据写在一个内,按顺序赋值例如:int a34=1,2,3,4,5,6,7,8,9,10,11,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 基础教程 第五 zh
链接地址:https://www.31ppt.com/p-6503563.html