C大学基础教程第五章zhou.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C大学基础教程第五章zhou.ppt》由会员分享,可在线阅读,更多相关《C大学基础教程第五章zhou.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+大学基础教程大学基础教程第第5 5章章 数组数组北京科技大学北京科技大学 计算机系计算机系2023/1/161北京科技大学计算机系数组基本概念数组是具有一定顺序关系的若干相同类型变量数组是具有一定顺序关系的若干相同类型变量的集合。的集合。组成数组的变量称为该数组的组成数组的变量称为该数组的元素元素。数组元素都有相同的变量名(数组名),但是数组元素都有相同的变量名(数组名),但是有不同的下标。有不同的下标。数组属于构造类型数组属于构造类型一个人一个人N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?一个班一个班N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.2023/1/
2、162北京科技大学计算机系一维数组的定义与引用一维数组的定义一维数组的定义类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ;例如:例如:int a10;int a10;1)1)a a 为整型数组名;为整型数组名;2 2)a a数组有数组有1010个元素,每个元素都是整数数据:个元素,每个元素都是整数数据:a0.a9a0.a9数组名的构成方法与一般变量名相同,必须是合法的标识符。数 组上C+课程的学生成绩(120个学生)float scoresCPlus120;scoresCPlus0scoresCPlus1192023/1/163北京科技大学计算机系一维数组的存储顺序一维数组的存储顺
3、序数组元素数组元素在内存中顺次存放,它们的在内存中顺次存放,它们的地址是连续的地址是连续的。Eg.int a10;Eg.int a10;具有具有1010个元素的数组个元素的数组 a a,在内存中的存放次序,在内存中的存放次序如下:如下:数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。a0 a1a2 a3 a4a5 a6 a7a8 a9a 数 组2023/1/164北京科技大学计算机系一维数组的定义与引用l引用引用1.数组必须先定义,后使用。2.只能逐个引用数组元素,而不能一次引用整个数组3.数组元素的引用是通过下标变量实现的。元素的引用形式为:元素的引用形式为:数组名数组名 下标
4、表达式下标表达式 例如1:int a10;a0=a5+a7-a2*3 2:int salaries 6;int a=5;salariesa=900;数 组2023/1/165北京科技大学计算机系注意在使用数组元素时需要注意:在使用数组元素时需要注意:数组元素的下标表达式其结果必须正整数数组元素的下标表达式其结果必须正整数(00)。)。数组元素的下标值从数组元素的下标值从0 0开始,不得超过声明时开始,不得超过声明时所定义的上界。所定义的上界。2023/1/166北京科技大学计算机系数组的下标数组元素的下标是数组元素到数组开始地址的数组元素的下标是数组元素到数组开始地址的偏移量。偏移量。第第1
5、1个元素的下标为个元素的下标为0 0,其地址是数组的首地址,其地址是数组的首地址,第第2 2个元素的下标为个元素的下标为1 1,偏移量距离首地址是,偏移量距离首地址是1 1个个数组元素大小,依次类推。数组元素大小,依次类推。因此,数组元素是一系列大小相同的连续项,因此,数组元素是一系列大小相同的连续项,每项到公共基点(数组起始地址)的偏移量是每项到公共基点(数组起始地址)的偏移量是固定的。固定的。2023/1/167北京科技大学计算机系错误的数组定义语句void VoidArray10;void VoidArray10;/void/void不可以做数组类型不可以做数组类型int a=9;flo
6、at floatArraya;int a=9;float floatArraya;/数组的长度不可以是变量数组的长度不可以是变量char charArray1.5+1.5;char charArray1.5+1.5;/3.0/3.0不是整数不是整数2023/1/168北京科技大学计算机系例5.1 定义一个10个整数的数组解:以解:以ARRAYARRAY命名的数组,用命名的数组,用100100至至109109对数组元素赋值,并对数组元素赋值,并对其求和。需要在一个循环中使用数组。这是使用数组最对其求和。需要在一个循环中使用数组。这是使用数组最经常的方式。经常的方式。void main()void
7、 main()int ARRAY 10;int ARRAY 10;int sum=0;int sum=0;for(int i=0;i10;i+)for(int i=0;i10;i+)ARRAYi=100+i;ARRAYi=100+i;sum+=ARRAYi;sum+=ARRAYi;2023/1/169北京科技大学计算机系注意不能直接把一个数组赋给另一个数组。假设要将不能直接把一个数组赋给另一个数组。假设要将数组数组total_salestotal_sales的值拷贝到数组的值拷贝到数组saved_salessaved_sales中,中,使用下面的赋值方法就是错误的:使用下面的赋值方法就是错误的
8、:saved_sales=total_sales;saved_sales=total_sales;/error/error 应使用一个循环语句将应使用一个循环语句将total_salestotal_sales中的元素的值中的元素的值逐个赋给数组逐个赋给数组saved_salessaved_sales中的每个元素。如下面中的每个元素。如下面的代码所示:的代码所示:for(int i=0;iARRAY_SIZE;i+)for(int i=0;iARRAY_SIZE;i+)saved_salesi=total_salesi;saved_salesi=total_salesi;2023/1/1610北
9、京科技大学计算机系一维数组的初始化可以使数组得到初值:可以使数组得到初值:n在声明数组时对数组元素赋以初值。在声明数组时对数组元素赋以初值。例如:例如:int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4,5,6,7,8,9;n可以只给一部分元素赋初值。其他元素自动赋值为可以只给一部分元素赋初值。其他元素自动赋值为0 0例如:例如:int a10=0,1,2,3,4;int a10=0,1,2,3,4;n在对全部数组元素赋初值时,可以不指定数组长度。在对全部数组元素赋初值时,可以不指定数组长度。长度为初值的个数。长度为初值的个数。例如:例如:int a=1
10、,2,3,4,5 int a=1,2,3,4,5 等价于等价于 int a5=1,2,3,4,5 int a5=1,2,3,4,5 数 组2023/1/1611北京科技大学计算机系大括号的使用 通过使用大括号,可初始化任何一种类型的数组。通过使用大括号,可初始化任何一种类型的数组。例如,要记录前三年的销售总额,则可以如下定义例如,要记录前三年的销售总额,则可以如下定义并初始化一个数组:并初始化一个数组:double sales=4323.43double sales=4323.43,122355.32122355.32,343324.96343324.96 注意:上面这种使用大括号来初始化数组
11、的方法注意:上面这种使用大括号来初始化数组的方法只能在定义数组时使用。在数组定义之后,就不能只能在定义数组时使用。在数组定义之后,就不能用这种方法了,而只能逐个元素地赋值。用这种方法了,而只能逐个元素地赋值。double sales3;double sales3;sales=4323.43sales=4323.43,122355.32122355.32,343324.96343324.962023/1/1612北京科技大学计算机系全局数组初始化C+C+自动将全局数组变量中的所有元素初始化为自动将全局数组变量中的所有元素初始化为0 0或或nullnull。n如果未赋初值,那么一个全局的字符数组中
12、的所有元如果未赋初值,那么一个全局的字符数组中的所有元素将为素将为null(null(空空),一个全局的数字数组中的所有元素将,一个全局的数字数组中的所有元素将为为0 0。程序中应尽量限制全局数组变量的使用。如果要程序中应尽量限制全局数组变量的使用。如果要用,也最好在程序中用语句将其显式初始化为用,也最好在程序中用语句将其显式初始化为0 0,以明确表示编程者的意图。,以明确表示编程者的意图。2023/1/1613北京科技大学计算机系错误例子例如下面的代码对数组进行初始化是错误的:例如下面的代码对数组进行初始化是错误的:int array15=0,1,2,3,4,5;int array15=0,
13、1,2,3,4,5;/error/error初始化值个数多于数组元素个数初始化值个数多于数组元素个数int array25int array25,1,2,3,1,2,3;/error/error不能加入不能加入“,”,”来跳过不赋值的元素。来跳过不赋值的元素。int array25=0,2,3,4;int array25=0,2,3,4;/error/error不能加入不能加入“,”,”来跳过不赋值的元素。来跳过不赋值的元素。int array35=;int array35=;/error/error语法格式错误语法格式错误2023/1/1614北京科技大学计算机系例例5.25.2初始化全局和
14、局部数组#include using namespace std;int array15=1,2,3;static int array25=1;void main()int arr15=2;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/局部数组初始化的结果局部数组初始化的结果loca
15、l 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 static:;for(n=0;n5;n+)cout arr2n;cout endl;2023/1/1615北京科技大学计算机系例5.3 将5个温度值赋给数组#include stdafx.h#includevoid main()float temp5;temp0=31.3;temp1=28.7;temp2=32
16、.2;temp3=34.5;temp4=19.7;coutDaily temperature for 5 daysn;for(int i=0;i 5;i+)couttempin;2023/1/1616北京科技大学计算机系数组的大小和数组越界定义数组时,编译器必须知道数组的大小。定义数组时,编译器必须知道数组的大小。如果数组定义时省略了大小,由初始化的值的个如果数组定义时省略了大小,由初始化的值的个数来决定数组大小。数来决定数组大小。在程序中怎么知道数组的大小呢?在程序中怎么知道数组的大小呢?sizeof sizeof操作解决了该问题。操作解决了该问题。2023/1/1617北京科技大学计算机系
17、sizeofsizeof()sizeof()能够返回传递给它的数据类型所占用内存的能够返回传递给它的数据类型所占用内存的字节数。字节数。如果将一个数组变量传给如果将一个数组变量传给sizeof()sizeof(),则它将返回系统,则它将返回系统为此数组在内存中预留的字节数。为此数组在内存中预留的字节数。因此,数组的大小可用用以下公式来计算:因此,数组的大小可用用以下公式来计算:数组大小数组大小 =sizeof(=sizeof(数组名数组名)/sizeof()/sizeof(数组类型数组类型)2023/1/1618北京科技大学计算机系例5.7 用sizeof确定数组的大小#include usi
18、ng namespace std;void 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 162023/1/1619北京科技大学计算机系一维数组的举例例例:6个整数排列顺序,从小到大排列输出。个整数排列顺序,从小到大排列输出。1)定义存放定义存放6个数的变量个数的变量 int a6;2)先从先从6个数中找到最小,放到个数中找到最小,放到a0中。中。for(i=1;iai)swap(a0,ai);3)再从再从5个数中找到最小,放到个数中找到最
19、小,放到a1中。中。for(i=2;iai)swap(a1,ai);数 组2023/1/1620北京科技大学计算机系以以6 6个数:个数:3 3、7 7、5 5、6 6、8 8、0 0为例。为例。思路:思路:第一趟:将第一个数依次和后面的数比较,如第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。结束后,第一个数则是最小的数。第二趟:将第二个数依次和后面的数比较,如第二趟:将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较果后面的某数小于第二个数,则两个数交换,
20、比较结束后,第二个数则是次小的数;结束后,第二个数则是次小的数;。选择法序排序(从小到大)。选择法序排序(从小到大)。2023/1/1621北京科技大学计算机系 3 3 7 7 5 5 5 5 6 6 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7 7 5 5 6 6 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7 7 5 5 5 5 6 6 8 8 8 8 0 0 0 0 3 3 7 7 7 7 5 5 5 5 6 6 6 6 8 8 0 0 0 0 3 3 7 7 7 7 5 5 5 5 6 6 6 6 8 8 8 8 0 0 0 0 7 7 7 7 5 5 5 5
21、 6 6 6 6 8 8 8 8 3 3 3 3 不交换不交换不交换不交换 a1a2a3a4a5 a0第一趟第一趟 j=0交换选择法序排序(续)。2023/1/1622北京科技大学计算机系 0 0 7 7 7 7 5 6 8 35 6 8 35 6 8 35 6 8 3 0 30 3 7 6 8 57 6 8 57 6 8 57 6 8 5 j=1 0 30 3 5 5 7 8 67 8 67 8 67 8 6 j=2 0 3 5 60 3 5 6 8 78 78 78 7 j=3 0 3 5 6 70 3 5 6 7 8 8 8 8 j=4j=0 a1a2a3a4a5 a0选择法序排序(续)
22、。2023/1/1623北京科技大学计算机系一维数组的举例例例:6个整数排列顺序,从小到大排列输出。个整数排列顺序,从小到大排列输出。算法的实现使用二重循环:算法的实现使用二重循环:for(j=0;j5;j+)for(i=j+1;iai)swap(ai,aj);数 组2023/1/1624北京科技大学计算机系理解多维数组(5.7)一维数组是多个数值的单列表示,而多维数组一维数组是多个数值的单列表示,而多维数组则是数值的表格,甚至多表格表示,它具有多则是数值的表格,甚至多表格表示,它具有多个下标值,最常用的表格是二维表格个下标值,最常用的表格是二维表格(具有两个具有两个下标下标)。2023/1/
23、1625北京科技大学计算机系例子假定要记录一个垒球队中每个队员的击球数。队中有假定要记录一个垒球队中每个队员的击球数。队中有6 6个队员,个队员,进行了进行了3 3场比赛。表中所示为击球记录。场比赛。表中所示为击球记录。队员姓名队员姓名1 12 23 3张大明张大明2 21 12 2李方春李方春3 33 33 3林志松林志松2 22 22 2崔明东崔明东1 11 11 1刘屈武刘屈武0 00 00 0安度璧安度璧1 11 11 12023/1/1626北京科技大学计算机系三维表的图示C+C+提供存储多提供存储多维数据的能力,维数据的能力,尽管现实世界很尽管现实世界很少碰到三维以上少碰到三维以上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 基础教程 第五 zhou
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内