第6章组
2021/2/24 1 第6章 数组
数组aray)的定义及应用 什么是数组保存相同类型数据的内存单元集合。 维数组的定义 定义格式 类型名数组名[常量表达式1 ,数组名2常量表达式2] 即: type Arraynamelsizel ArrayName2 size2] 2021/224
2021/2/24 2 数组(array)的定义及应用 什么是数组 保存相同类型数据的内存单元集合。 定义格式 类型名 数组名[常量表达式1] [, 数组名2[常量表达式2]……]; 即:type ArrayName1[size1], ArrayName2[size2],…; 一维数组的定义
如:inta5;∥定义了一个整数型数组,数组名为a,数组 /的大小为5,即有5个元素:a0l,a1la12,a|3],a4。 static float yl50];/定义了数组y,每个元素的 ∥值为实型,存储类型为静态的。 char strl10;∥定义了数组str,有10个元素, /每个元素的值为字符。 注:(1)数组必须先定义后使用。 (2)“数据类型”是指数组元素的数据类型, 如 int、char、 register、 static、auto等。 (3)数组名与变量名一样,必须遵循标识符命名 规则 (4)数组元素的下标,是元素相对于数组起始地 1a4址的偏移量,所以从0开始顺序编号
2021/2/24 3 注:(1)数组必须先定义后使用。 (2)“数据类型”是指数组元素的数据类型, 如 int、char、register、static、auto等。 (3)数组名与变量名一样,必须遵循标识符命名 规则。 (4)数组元素的下标,是元素相对于数组起始地 址的偏移量,所以从0开始顺序编号。 如: int a[5]; //定义了一个整数型数组,数组名为a,数组 //的大小为5,即有5个元素:a[0], a[1], a[2], a[3], a[4]。 static float y[50];//定义了数组y,每个元素的 //值为实型,存储类型为静态的。 char str[10]; //定义了数组str,有10个元素, //每个元素的值为字符
(5)“常量表达式”必须用方括号括起来,指的是 数组的元素个数(又称数组长度),它是一个整型 值,其中可以包含常数、符号常量,还可以用宏定 义标识符常量或用 const说明的标识符常量,但不能 包含变量。 如:# define asd256 const int SIzE=500 intx1[ASD*2];定义x1,含512个元素 float yyASD+SLEl;/定义y,含756个元素 char csa; 定义cs,含97个元素 如下说明不允许:intn; cin>>n float tn];∥定义t前不知道n的值 2021/224
2021/2/24 4 (5)“常量表达式”必须用方括号括起来,指的是 数组的元素个数(又称数组长度),它是一个整型 值,其中可以包含常数、符号常量,还可以用宏定 义标识符常量或用const说明的标识符常量,但不能 包含变量。 如:#define ASD 256 const int SIZE=500; … int x1[ASD*2]; //定义x1,含512个元素 float yy[ASD+SIZE];//定义yy,含756个元素 char cs[‘a’]; //定义cs,含97个元素 如下说明不允许:int n; cin>>n; float t[n];//定义t前不知道n的值
(6)数组元素的个数必须是一个正整数。 如:# define pi314 int al [ PI3];∥错误,因为P3是实数 float a2[int(PⅠ*3)l;∥正确 (7)数组名中存放的是一个地址常量,它代表整 个数组的首地址。同一数组中的所有元素, 按其下标的顺序占用一段连续的存储单元。 (8)数组名的作用域与变量的作用域相同。当把 数组定义为局部变量时,作用域为块作用域, 当定义为全局变量时,作用域为文件作用域。 2021/224 5
2021/2/24 5 (6)数组元素的个数必须是一个正整数。 如:#define PI 3.14 … int a1 [PI*3]; //错误,因为PI*3是实数 float a2[int(PI*3)]; //正确 (7)数组名中存放的是一个地址常量,它代表整 个数组的首地址。同一数组中的所有元素, 按其下标的顺序占用一段连续的存储单元。 (8)数组名的作用域与变量的作用域相同。当把 数组定义为局部变量时,作用域为块作用域, 当定义为全局变量时,作用域为文件作用域
维数组的使用 引用一维数组的形式: 数组名[下标表达式 注:1.“下标表达式”可以是任何非负整型数据, 取值范围是0~(元素个数-1) 如:inti,j float x20 y, Z; xi+j*2=+j;元素引用是合法的 Fxy*2: 元素引用是不允许的 2021/224 6
2021/2/24 6 一维数组的使用 引用一维数组的形式: 数组名[下标表达式] 注:1.“下标表达式”可以是任何非负整型数据, 取值范围是0~(元素个数-1)。 如:int i,j; float x[20],y,z; … x[i+j*2]=i+j; //元素引用是合法的 z=x[y*2]; //元素引用是不允许的
特别强调:在运行C++语言程序过程中,系统并不 自动检验数组元素的下标是否越界。因此在编写程 序时,保证数组下标不越界是十分重要的 如:intm,a|20; a|m*2+1=200;∥应保证0<=m*2+1<20 cout<<aa 21l /下标出界,输出一个不确定的值 2021/224
2021/2/24 7 特别强调:在运行C++语言程序过程中,系统并不 自动检验数组元素的下标是否越界。因此在编写程 序时,保证数组下标不越界是十分重要的。 如:int m,aa[20]; … aa[m*2+1]=200; //应保证0<=m*2+1<20 cout<<aa[21]; //下标出界,输出一个不确定的值
2.一个数组元素,实质上就是1个变量,它具有和相 同类型单个变量一样的属性,可以对它进行赋值和参 与各种运算。 3.在C++中,数组作为一个整体,不能参加数据运 算,只能对单个的元素进行处理。 如:inta|5,bb|5; cin>>aa ∥误 cout<<aa 误 4.同类型的数组之间不能相互赋值。 如:bb=a; 错误 2021/224 8
2021/2/24 8 2.一个数组元素,实质上就是1个变量,它具有和相 同类型单个变量一样的属性,可以对它进行赋值和参 与各种运算。 3.在C++中,数组作为一个整体,不能参加数据运 算,只能对单个的元素进行处理。 如:int aa[5],bb[5]; cin>>aa; //错误 cout<<aa; //错误 4 .同类型的数组之间不能相互赋值。 如: bb=aa; //错误
例:输入五个实数,并求出这五个实数的平均值。 61 若输入数:486.5610 则输出: 这五个数的平均值为:69 2021/224 9
2021/2/24 9 例1:输入五个实数,并求出这五个实数的平均值。 若输入数:4 8 6.5 6 10 则输出: 这五个数的平均值为:6.9 61
维数组的初始化 初始化格式: 数据类型数组名常量表达式={初值表} (1)如果对数组的全部元素赋以初值,定义时可以不 指定数组长度(系统根据初值个数自动确定)。 如果被定义数组的长度,与初值个数不同,则数 组长度不能省略。 如:intz={0,1,2,3,4,5,6,7,8}; ∥编译器认定z的元素个数为9 intx10}={0,1,2,3,4,5,6,7,8,%}; 2021/224 10
2021/2/24 10 一维数组的初始化 初始化格式: 数据类型 数组名[常量表达式]={初值表} (1)如果对数组的全部元素赋以初值,定义时可以不 指定数组长度(系统根据初值个数自动确定)。 如果被定义数组的长度,与初值个数不同,则数 组长度不能省略。 如:int z[ ]={0,1,2,3,4,5,6,7,8}; //编译器认定z的元素个数为9 int x[10]={0,1,2,3,4,5,6,7,8,9};