C大学基础教程第4章课件

上传人:我*** 文档编号:144990149 上传时间:2020-09-15 格式:PPT 页数:55 大小:324KB
返回 下载 相关 举报
C大学基础教程第4章课件_第1页
第1页 / 共55页
C大学基础教程第4章课件_第2页
第2页 / 共55页
C大学基础教程第4章课件_第3页
第3页 / 共55页
C大学基础教程第4章课件_第4页
第4页 / 共55页
C大学基础教程第4章课件_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《C大学基础教程第4章课件》由会员分享,可在线阅读,更多相关《C大学基础教程第4章课件(55页珍藏版)》请在金锄头文库上搜索。

1、C+大学基础教程,第4章 数组,北京科技大学,-2-,第4章 数组,4.1数组概述 4.2 一维数组 4.3 二维数组 4.4 字符数组与字符串 4.5 数组应用举例,-3-,本章教学要求,掌握数组定义、数组元素的引用以及初始化数组的知识和方法 学会把数组用作函数参数 学会二维数组的使用 初步掌握使用数组实现一些典型算法:排序、矩阵操作、用字符数组处理字符串等。,-4-,4.1 数组概述,在+语言中,数组属于构造数据类型。数组是用一个名字表示的一组同类型的数据,这个名字就称为数组名。为了区分数组中不同的数据,把存放不同数据的变量用下标来区分,因此数组中的每个变量又叫下标变量或数组元素。一个数组

2、可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型,不同类型的数据按一定的规则分别构成数值数组、字符数组、指针数组、结构数组等各种类别数组。本章介绍数值数组和字符数组。,-5-,4.2 一维数组,数组是具有一定顺序关系的若干相同类型变量的集合。 组成数组的变量称为该数组元素。 数组元素都有相同的变量名(数组名),但是有不同的下标。 数组属于构造类型。,-6-,一维数组的定义与引用,一维数组的定义 类型说明符 数组名 常量表达式 ; 例如: int a10; 1)a为整型数组名; 2)a数组有10个元素,每个元素都是整数数据:a0.a9,上C+课程的学生成绩(180个学生) fl

3、oat scoresCPlus180;,scoresCPlus0,scoresCPlus179,-7-,说明:,类型说明符是任一种基本数据类型或构造数据类型,说明数组中每一个元素的类型。 数组名是用户定义的数组标识符,书写规则应符合标识符的书写规定。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度, 必须是整型表达式,不能出现变量。 数组元素是组成数组的基本单元。数组下标从0开始,因此,若定义int ia5; 则ia数组的5个元素是:ia0、ia1、ia2、ia3、ia4。它们是存放在一片连续的内存单元中的,如图4-1所示,存放数组在内存中,两个相邻元素间没有空闲单元。数组的首地址就

4、是ia0的地址。数组名也代表数组的首地址,即ia的值与ia0的地址值相同。,一维数组的存储顺序,数组元素在内存中顺序存放,它们的地址是连续的。 Eg.int a10; 具有10个元素的数组 a,在内存中的存放次序如下:,数组名字是数组首元素的内存地址。 数组名是一个常量,不能被赋值。,-9-,一维数组的初始化,在定义数组时给数组元素赋初值称为数组的初始化。对于没有初始化的数组,有两种情况: 一种是全局数组和静态数组,其定义类似于全局变量和静态变量,也就是在函数外部定义的,或加上static修饰得数组,其元素初值全为0; 另一种是局部数组,就是在一个函数内定义的数组,其数组元素的初值是不确定。,

5、-10-,给一个没有确定初值的一维数组的初始化有3种情况: 一种是全部数组元素赋初值,初值元素个数与数组大小相等。 例如: int a5=1,2,3,4,5; a0的值为1,a1的值为2,a4的值为5。 全部数组元素赋初值时,可以省略数组长度,例如: int a =1,2,3,4,5; 系统根据初值的个数确定a数组的长度为5,上面2种形式等价。,-11-,另一种是,部分数组元素赋初值,初值个数少于数组元素的个数时,系统将后面没赋初值的元素自动赋0值,例如: int a5=1,2,3; a0的值为1,a1的值为2,a2的值为3,其余元素的值为0。 还有一种情况,初值的个数多于数组元素的个数时,编

6、译系统会给出出错信息。,-12-,错误例子,例如下面的代码对数组进行初始化是错误的: 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语法格式错误,-13-,数组越界,数组的大小是固定的,使用数组时,要注意不能越界。 如:char sal_codes5=a,b,c,d,e; int exemptions5=1,2,3,4,5

7、; c+编译器对于数组越界是不报错的。 如程序中有语句:exemptions6=65; 不会出现编译错误,但此操作可能造成不可预料的错误。 防止数组越界操作的责任就落在编程者的身上。,-14-,一维数组的引用,引用 数组必须先定义,后使用。 只能逐个引用数组元素,而不能一次引用整个数组 数组元素的引用是通过下标变量实现的。 元素的引用形式为: 数组名下标表达式 例如1:int a10; a0=a5+a7-a2*3; 2:int salaries 6; int a=5; salariesa=900;,-15-,错误的数组定义语句,void VoidArray10; /void不可以做数组类型 i

8、nt a=9; float floatArraya; /数组的长度不可以是变量 char charArray1.5+1.5; /3.0不是整数,-16-,说明:,下标用方括号“”括起,“”是下标运算符,例如,a0表示a数组中的第0号元素。 在+语言中只能逐个地使用下标变量,而不能一次引用整个数组。 例如,输出有20个元素的数组必须使用循环语句逐个输出各下标变量: int ia20; for(i=0; i20; i+) coutiai); 而不能用一个语句输出整个数组。 下面的写法是错误的: couta;,-17-, 数组下标从0开始,称为下界,数组的最大下标,称为上界,等于数组长度减l。但由于

9、C+编译系统不做越界检查,因此如果引用的数组元素超出数组范围就会破坏其它变量的值。例如: int ia20; cinia20; /下标越界 在使用数组时,不能同时对数组元素整体操作,只能对数组元素单独使用,因此通常数组的操作是与for循环相联系,遍历数组中的每一个元素,实现数组的输入、输出和整体操作,这也是数组能够大量处理相同类型数据的优势所在。,-18-,【例4-2】一维数组的输入和输出。,#include using namespace std; const int N=5; int main() float fscoreN; coutfscorei; cout输出数组:; for(i=0

10、; i=N-1; i+) coutfscorei ; coutendl; return 0; ,运行情况如下: 输入数组:11.1 22.2 33.3 44.4 54.5 输出数组:11.1 22.2 33.3 44.4 54.5,-19-,4.3 二维数组,一维数组是多个数值的单列表示,而多维数组则是数值的表格,它具有多个下标值,最常用的表格是二维表格,它用来存放一组同一类型的有规律地按行和列排列的数据,二维数组的元素有两个下标,一个是行下标,另一个是列下标。,存储顺序 按行存放,上例中数组a的存储顺序为:,二维数组的声明 类型说明符 数组名常量表达式常量表达式 例如:float a34;,

11、二维数组的定义,-21-,说明:,上面定义的二维数组fx的数组元素的在内存中也占用连续的存储空间, 二维数组实际上是“数组的数组”,它以行和列的形式出现,实际上还是一个一维数组,只不过数组的每个元素的类型不是整型、实型或字符型,而是另外一个数组。可以把二维数组的一行看作是一个一维数组。同一维数组相同,二维数组名代表二维数组的首地址,也是地址常量。,-22-,C+按行存储多维数组,二维数组实际上是“数组的数组”,它以行和列的形式出现,实际上还是一个一维数组,只不过数组的每个元素的类型不是整型,浮点型或字符型,而是另外一个数组。 数组元素也是连续存储的,按行存储,即最右边的下标变化最快,最左边的下

12、标变化最慢。,-23-,二维数组看作是一维数组的一维数组,一维数组的4个元素是ara_name0 ara_name3。每一个元素则是其对应的一维数组的首地址。,-24-,二维表的内存映象,C+按行把多维数组映射到线性内存 图示一个44的数组 int table44 的内存映象,-25-,二维数组的初始化,二维数组的初始化也有下面3种情况。 一种情况是全部赋初值,按行赋初值,例如 int ia23=1,2,3,4,5,6; 内层2个花括号分别赋给第1行的元素,ia00=1,ia0l=2,ia02=3和第2行的元素,ia10= 4,ia11=5,ia12=6。 也可以将内层的花括号省略,系统会按初

13、值的顺序赋值个对应的元素, 例如:int ia23=1,2,3,4,5,6; 将所有的初值写在一对花括号中,按照元素在内存中的排列顺序给数组元素赋初值。,-26-,二维数组的初始化,另一种情况是给部分元素赋初值,例如: int a23=1,4; 数组初始化时,数组的行长度可以省略,但列长度不能省略 例如:int ia3=1,2,3, 在最外面一对花括号中有两个花括号,表明ia数组有两行,因此行长度为2。 第三种情况,是初值的个数多于数组元素的个数,会编译出错。,二维数组的 类型说明符 数组名行下标表达式列下标表达式,例如:b12=a23/2,下标不要越界,二维数组的引用,-28-,【例4-3】

14、二维数组数据输入和输出。,程序如下: #include #include const int M=3; const int N=3; using namespace std; int main() int iaMN; int i,j; coutiaij;,-29-,cout输出数组:endl; for(i=0;iM;i+) for(j=0;jN;j+) coutsetw(8)iaij; coutendl; coutendl; return 0; ,程序运行情况如下: 输入数组: 11 22 33 44 55 66 77 88 99 输出数组: 11 22 33 44 55 66 77 88 9

15、9,-30-,4.4 字符数组与字符串,字符串常量:是用一对双引号括起来的字符序列,每个字符占一个字节,并在末尾添加0作为结尾标记。例如:china 没有字符串变量,用字符数组来存储和处理字符串,-31-,字符数组的定义,Eg. 字符数组: char a 5; 存储该数组占5个字节。每个元素的类型是字符型。数组下标从0开始,分别是a0,a1,a2,a3,a4。,格式: char 数组名常量表达式 ;,-32-,用字符数组存储和处理字符串,例: static char str8=112,114,111,103,114,97,109,0;static char str8=p,r,o,g,r,a,m

16、,0;static char str8=program;static char str =program;,字符数组的初始化,static char str7 可否?,对数组进行初始化赋值时,在末尾放置一个0,便构成了C+字符串。,例: static char str7=p,r,o,g,r,a,m;,-33-,例子,#include using namespace std; void main() char a6=hello; char b=program; char c8=p,r,o,g,r,a,m,0; char d7=p,r,o,g,r,a,m; coutabendl cdendl; for(int i=0;i7;i+) coutdi; coutendl; ,-34-,注意,不要忘记为最后的 0分配

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号