第4讲 C++数组及自定义数据类型的使用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015年6月21日11时23分 10
1.一维数组的定义和引用
C.如果想使一个数组中全部元素值为1,可以写成 int a[10]={1,1,1,1,1,1,1,1,1,1}; 不能写成 int a[10]={1*10};
D.在对全部数组元素赋初值时,可以不指定数组长 度。 例如 int a[5]={1,2,3,4,5}; 可以写成 int a[]={1,2,3,4,5};
13
2.二维数组的定义和引用
C++中,二维数组中元素排列的顺序是:按行存放 图2表示对a[3][4]数组存放的顺序。
图2
2015年6月21日11时23分 14
2.二维数组的定义和引用
C++允许使用多维数组。 例如,定义三维数组的方法是: float a[2][3][4]; 定义float型三维数组a,它有2×3×4=24个元素。
2015年6月21日11时23分
15
2.二维数组的定义和引用
(2)二维数组的引用 二维数组的元素的表示形式为 数组名 [下标][下标]
例如: B[1][2]=a[2][3] / 2; 在使用数组元素时,应该注意下标值应在已定义的数 组大小的范围内。
2015年6月21日11时23分
16
2.二维数组的定义和引用
普通高等教育“十一五”国家级规划教材 中国高等院校计算机基础教育课程体系规划教材
谭浩强 编著
C++面向对象程序设计
2015年6月21日11时23分
1
第4讲
C++数组及自定义数据类型
4.1 授课内容 C++数组及自定义数据类型的使用。主要包括: 1.一维和二维数组; 2.字符数组与字符串; 3.字符串函数; 4.结构体的定义; 5.结构变量的定义、初始化、结构成员的访问等; 6.结构体与数组; 7.结构与链表; 8.共用体和枚举类型。
0 10 0 0
在定义时也可以只对部分元素赋初值而省略第一维的长度, 但应分行赋初值。如 int a[][4]={{0,0,3},{},{0,10}};
2015年6月21日11时23分
19
2.二维数组的定义和引用
(4)二维数组程序举例 例2 将一个二维数组行和列元素互换,存到另一个二 维数组中。 例如: a= 1 2 3 b=1 4 4 5 6 2 5 3 6
2015年6月21日11时23分
}
24
3.用数组名作函数参数
关于用数组名作函数参数有两点要说明: A.如果函数实参是数组名,形参也应为数组名(或指 针变量) 。 //指定元素个数与 B.数组名代表数组首元素的地址,并不代表数组中 //不指定元素个数 实参数组相同 的全部元素。 C++实际上只把形参数组名作为一个指针变量
2015年6月21日11时23分
5
1.一维数组的定义和引用
说明: A.数组名定名规则和变量名相同,遵循标识符定名 规则。 B.用方括号括起来的常量表达式表示下标值,如下 面的写法是合法的: int a[10]; int a[2*5]; int a[n*2]; //假设前面已定义了n为常变量
2015年6月21日11时23分
2015年6月21日11时23分 25
4.字符数组
用来存放字符数据的数组是字符数组,字符数组中 的一个元素存放一个字符。 定义字符数组的方法与前面介绍的类似。 例如:char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′; c[3]=′m′;c[4]=′ ′;c[5]=′h′; c[6]=′a′;c[7]=′p′;c[8]=′p′; c[9]=′y′;
(3)二维数组的初始化 A.分行给二维数组赋初值。如: int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}}; B.可以将所有数据写在一个花括号内,按数组排列的顺序对 各元素赋初值。如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11, 12}; 效果与前相同。但以第1种方法为好,一行对一行,界限清楚。
23
2015年6月21日11时23分
3.用数组名作函数参数
#include <iostream> using namespace std; int main( ) void select_sort(int array[ ], int {void select_sort(int array[],int n); //函数声明 n) //形参array是数组名 int a[10],i; {int i,j,k,t; cout<<″enter the originl array:″<<endl; for(i=0;i<n-1;i++) for(i=0;i<10;i++) //输入10个数 cin>>a[i]; { k=i; cout<<endl; for(j=i+1;j<n;j++)
2015年6月21日11时23分
11
2.二维数组的定义和引用
具有两个下标的数组称为二维数组。 (1)定义二维数组 定义二维数组的一般形式为: 类型标识符 数组名[常量表达式][常量表达式] 例如: float a[3][4],b[5][10]; 定义a为3×4(3行4列)的单精度数组,b为5×10(5行 10列)的单精度数组。 注意:不能写成“float a[3,4],b[5,10];”。
2015年6月21日11时23分 12
2.二维数组的定义和引用
可以把二维数组看作是一种特殊的一维数组:它的元 素又是一个一维数组。
例如: 可以把a看作是 一个一维数组, 它有3个元素: a[0] a[1], a[2],每个 元素又是一个 包含4个元素的 一维数组,
2015年6月21日11时23分
图1。
2015年6月21日11时23分 2
第4讲
C++数组及自定义数据类型
4.2 授课要求 1.掌握数组的基本概念; 2.掌握一维数组和二维数组的使用; 3.掌握字符数组与字符串的关系以及字符串变量的 表示; 4.掌握结构体的概念和结构类型的定义; 5.掌握结构体变量的定义和初始化; 6.掌握结构体成员的访问、结构体赋值的含义以及 结构体与指针的关系; 7.掌握共用体和枚举类型。
2015年6月21日11时23分
8
1.一维数组的定义和引用
例1 数组元素的引用。 #include <iostream> using namespace std; int main( ) {int i,a[10]; for (i=0;i<=9;i++) a[i]=i; for (i=9;i>=0;i--) cout<<a[i]<<″ ″; cout<<endl; return 0; }
2015年6月21日11时23分 17
2.二维数组的定义和引用
C.可以对部分元素赋初值,其余元素值自动置为0。 如:int a[3][4]={{1},{0,6},{0,0,11}}; 初始化后的数组元素如下: 1 0 0 0 0 6 0 0 0 0 11 0 也可以只对某几行元素赋初值: int a[3][4]={{1},{5,6}}; 数组元素为 1 0 0 0 第3行不赋初值。也可以对第2行不 5 6 0 0 赋初值: 0 0 0 0 int a[3][4]={{1},{},{9}};
D.常量表达式中可以包括常量、常变量和符号常量, 但不能包含变量。 即:C++不允许对数组的大小作动态定义。
2015年6月21日11时23分 7
1.一维数组的定义和引用
(2)引用一维数组的元素 数组必须先定义,然后使用。只能逐个引用数组元 素的值而不能一次引用整个数组中的全部元素的值。
数组元素的表示形式为: 数组名[下标] 下标可以是整型常量或整型表达式。例如 a[0]= a[5]+ a[7]- a[2*3]
6
1.一维数组的定义和引用
C.常量表达式的值表示元素的个数,即数组长度。 例如:在“int a[3];” 中,3表示a数组有3个元素,下 非法定义数组: int n; a[0],a[1],a[2]。 标从0开始,这3个元素是: cin>>n; 注意最后一个元素是a [2]而不是a[3]。
//输入a数组的长度 int a[n]; //企图根据n的值决定数组的长度
2015年6月21日11时23分 18
2.二维数组的定义和引用
D.如果对全部元素都赋初值(即提供全部初始数据),则定义数 组时对第一维的长度可以不指定,但第二维的长度不能省。 如 int a[3][4]={1,2,3,4,5,6,7, 8,9,10,11, 数组各元素为 : 12}; 0 0 3 0 可以写成 0 0 0 0 int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2015年6月21日11时23分
cout<<endl; } cout<<″array b: ″<<endl; for (i=0;i<=2;i++) { for(j=0;j<=1;j++) cout<<b[i][j] <<″ ″; cout<<endl; } return 0; }
21
2.二维数组的定义和引用
2015年6月21日11时23分
20
2.二维数组的定义和引用
程序如下: #include <iostream> using namespace std; int main( ) { int a[2][3] ={{1,2,3},{4,5,6}}; int b[3][2],i,j; cout<<″array a:″<<endl; for (i=0;i<=1;i++) { for (j=0;j<=2;j++) { cout<<a[i][j]<<″ ″; b[j][i]=a[i][j]; }
2015年6月21日11时23分
26
4.字符数组
(1)字符串和字符串结束标志 C++规定了一个“字符串结束标志,以字符’\0’代表。 例如:字符串″I am happy″共有10个字符,但在内存中它共占 11个字节,最后一个字节′\0′是由系统自动加上的。 如果用以下语句输出一个字符串: cout<<″How do you do?″; 系统在执行此语句时逐个地输出字符, 提问:那么它怎么判断应该输出到哪个字符就停止了呢? 解答:系统会自动在″How do you do?″字符串的 结尾加上字节′\0′,作为结束标记。
运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6
2015年6月21日11时23分
22
Βιβλιοθήκη Baidu
3.用数组名作函数参数
数组名也可以作实参和形参,传递的是数组的起始地 址。 例3 用选择法对数组中10个整数按由小到大排序。 根据此思路编写程序如下:
所谓选择法就是先将10个 数中最小的数与a[0]对 换;再将a[1]到a[9] 中最小的数与a[1]对 换……每比较一轮,找出 一个未经排序的数中最小 的一个。共比较9轮。
2015年6月21日11时23分
运行结果如下: 9876543210 程序使a[0]~a[9] 的值为0~9,然后按逆 序输出。
9
1.一维数组的定义和引用
(3)一维数组的初始化 A.在定义数组时分别对数组元素赋予初值。 例如 int a[10]={0,1,2,3,4,5,6,7,8,9}; B.可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; //剩余的元素值为0
来处理,用来接收从实参传过来的地址。
函数首部的下面几种写法都合法,作用相同。 void select_sort(int array[10],int n) //指定元素个数与 实参数组不同 void select_sort(int array[],int n) void select_sort(int array[5],int n)
select_sort(a,10); //函数调用,数组名作实参 if(array[j]<array[k])
cout<<″the sorted array:″<<endl; k=j; for(i=0;i<10;i++) //输出10个已排好序的数 t=array[k]; cout<<a[i]<<″ ″; array[k]= array[i]; cout<<endl; array[i]=t; return 0; } }
2015年6月21日11时23分 3
第4讲
C++数组及自定义数据类型
4.3 授课重点 1.一维数组和二维数组的定义及使用; 2.结构的定义和使用。
4.4 授课难点 1.数组名作函数的参数; 2.结构体与指针的结合。
2015年6月21日11时23分
4
1.一维数组的定义和引用
(1)定义一维数组 格式为: 类型标识符 数组名[常量表达式]; 例如: int a[10]; 它表示数组名为a,此数组为整型,有10个元素。
1.一维数组的定义和引用
C.如果想使一个数组中全部元素值为1,可以写成 int a[10]={1,1,1,1,1,1,1,1,1,1}; 不能写成 int a[10]={1*10};
D.在对全部数组元素赋初值时,可以不指定数组长 度。 例如 int a[5]={1,2,3,4,5}; 可以写成 int a[]={1,2,3,4,5};
13
2.二维数组的定义和引用
C++中,二维数组中元素排列的顺序是:按行存放 图2表示对a[3][4]数组存放的顺序。
图2
2015年6月21日11时23分 14
2.二维数组的定义和引用
C++允许使用多维数组。 例如,定义三维数组的方法是: float a[2][3][4]; 定义float型三维数组a,它有2×3×4=24个元素。
2015年6月21日11时23分
15
2.二维数组的定义和引用
(2)二维数组的引用 二维数组的元素的表示形式为 数组名 [下标][下标]
例如: B[1][2]=a[2][3] / 2; 在使用数组元素时,应该注意下标值应在已定义的数 组大小的范围内。
2015年6月21日11时23分
16
2.二维数组的定义和引用
普通高等教育“十一五”国家级规划教材 中国高等院校计算机基础教育课程体系规划教材
谭浩强 编著
C++面向对象程序设计
2015年6月21日11时23分
1
第4讲
C++数组及自定义数据类型
4.1 授课内容 C++数组及自定义数据类型的使用。主要包括: 1.一维和二维数组; 2.字符数组与字符串; 3.字符串函数; 4.结构体的定义; 5.结构变量的定义、初始化、结构成员的访问等; 6.结构体与数组; 7.结构与链表; 8.共用体和枚举类型。
0 10 0 0
在定义时也可以只对部分元素赋初值而省略第一维的长度, 但应分行赋初值。如 int a[][4]={{0,0,3},{},{0,10}};
2015年6月21日11时23分
19
2.二维数组的定义和引用
(4)二维数组程序举例 例2 将一个二维数组行和列元素互换,存到另一个二 维数组中。 例如: a= 1 2 3 b=1 4 4 5 6 2 5 3 6
2015年6月21日11时23分
}
24
3.用数组名作函数参数
关于用数组名作函数参数有两点要说明: A.如果函数实参是数组名,形参也应为数组名(或指 针变量) 。 //指定元素个数与 B.数组名代表数组首元素的地址,并不代表数组中 //不指定元素个数 实参数组相同 的全部元素。 C++实际上只把形参数组名作为一个指针变量
2015年6月21日11时23分
5
1.一维数组的定义和引用
说明: A.数组名定名规则和变量名相同,遵循标识符定名 规则。 B.用方括号括起来的常量表达式表示下标值,如下 面的写法是合法的: int a[10]; int a[2*5]; int a[n*2]; //假设前面已定义了n为常变量
2015年6月21日11时23分
2015年6月21日11时23分 25
4.字符数组
用来存放字符数据的数组是字符数组,字符数组中 的一个元素存放一个字符。 定义字符数组的方法与前面介绍的类似。 例如:char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′; c[3]=′m′;c[4]=′ ′;c[5]=′h′; c[6]=′a′;c[7]=′p′;c[8]=′p′; c[9]=′y′;
(3)二维数组的初始化 A.分行给二维数组赋初值。如: int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}}; B.可以将所有数据写在一个花括号内,按数组排列的顺序对 各元素赋初值。如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11, 12}; 效果与前相同。但以第1种方法为好,一行对一行,界限清楚。
23
2015年6月21日11时23分
3.用数组名作函数参数
#include <iostream> using namespace std; int main( ) void select_sort(int array[ ], int {void select_sort(int array[],int n); //函数声明 n) //形参array是数组名 int a[10],i; {int i,j,k,t; cout<<″enter the originl array:″<<endl; for(i=0;i<n-1;i++) for(i=0;i<10;i++) //输入10个数 cin>>a[i]; { k=i; cout<<endl; for(j=i+1;j<n;j++)
2015年6月21日11时23分
11
2.二维数组的定义和引用
具有两个下标的数组称为二维数组。 (1)定义二维数组 定义二维数组的一般形式为: 类型标识符 数组名[常量表达式][常量表达式] 例如: float a[3][4],b[5][10]; 定义a为3×4(3行4列)的单精度数组,b为5×10(5行 10列)的单精度数组。 注意:不能写成“float a[3,4],b[5,10];”。
2015年6月21日11时23分 12
2.二维数组的定义和引用
可以把二维数组看作是一种特殊的一维数组:它的元 素又是一个一维数组。
例如: 可以把a看作是 一个一维数组, 它有3个元素: a[0] a[1], a[2],每个 元素又是一个 包含4个元素的 一维数组,
2015年6月21日11时23分
图1。
2015年6月21日11时23分 2
第4讲
C++数组及自定义数据类型
4.2 授课要求 1.掌握数组的基本概念; 2.掌握一维数组和二维数组的使用; 3.掌握字符数组与字符串的关系以及字符串变量的 表示; 4.掌握结构体的概念和结构类型的定义; 5.掌握结构体变量的定义和初始化; 6.掌握结构体成员的访问、结构体赋值的含义以及 结构体与指针的关系; 7.掌握共用体和枚举类型。
2015年6月21日11时23分
8
1.一维数组的定义和引用
例1 数组元素的引用。 #include <iostream> using namespace std; int main( ) {int i,a[10]; for (i=0;i<=9;i++) a[i]=i; for (i=9;i>=0;i--) cout<<a[i]<<″ ″; cout<<endl; return 0; }
2015年6月21日11时23分 17
2.二维数组的定义和引用
C.可以对部分元素赋初值,其余元素值自动置为0。 如:int a[3][4]={{1},{0,6},{0,0,11}}; 初始化后的数组元素如下: 1 0 0 0 0 6 0 0 0 0 11 0 也可以只对某几行元素赋初值: int a[3][4]={{1},{5,6}}; 数组元素为 1 0 0 0 第3行不赋初值。也可以对第2行不 5 6 0 0 赋初值: 0 0 0 0 int a[3][4]={{1},{},{9}};
D.常量表达式中可以包括常量、常变量和符号常量, 但不能包含变量。 即:C++不允许对数组的大小作动态定义。
2015年6月21日11时23分 7
1.一维数组的定义和引用
(2)引用一维数组的元素 数组必须先定义,然后使用。只能逐个引用数组元 素的值而不能一次引用整个数组中的全部元素的值。
数组元素的表示形式为: 数组名[下标] 下标可以是整型常量或整型表达式。例如 a[0]= a[5]+ a[7]- a[2*3]
6
1.一维数组的定义和引用
C.常量表达式的值表示元素的个数,即数组长度。 例如:在“int a[3];” 中,3表示a数组有3个元素,下 非法定义数组: int n; a[0],a[1],a[2]。 标从0开始,这3个元素是: cin>>n; 注意最后一个元素是a [2]而不是a[3]。
//输入a数组的长度 int a[n]; //企图根据n的值决定数组的长度
2015年6月21日11时23分 18
2.二维数组的定义和引用
D.如果对全部元素都赋初值(即提供全部初始数据),则定义数 组时对第一维的长度可以不指定,但第二维的长度不能省。 如 int a[3][4]={1,2,3,4,5,6,7, 8,9,10,11, 数组各元素为 : 12}; 0 0 3 0 可以写成 0 0 0 0 int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2015年6月21日11时23分
cout<<endl; } cout<<″array b: ″<<endl; for (i=0;i<=2;i++) { for(j=0;j<=1;j++) cout<<b[i][j] <<″ ″; cout<<endl; } return 0; }
21
2.二维数组的定义和引用
2015年6月21日11时23分
20
2.二维数组的定义和引用
程序如下: #include <iostream> using namespace std; int main( ) { int a[2][3] ={{1,2,3},{4,5,6}}; int b[3][2],i,j; cout<<″array a:″<<endl; for (i=0;i<=1;i++) { for (j=0;j<=2;j++) { cout<<a[i][j]<<″ ″; b[j][i]=a[i][j]; }
2015年6月21日11时23分
26
4.字符数组
(1)字符串和字符串结束标志 C++规定了一个“字符串结束标志,以字符’\0’代表。 例如:字符串″I am happy″共有10个字符,但在内存中它共占 11个字节,最后一个字节′\0′是由系统自动加上的。 如果用以下语句输出一个字符串: cout<<″How do you do?″; 系统在执行此语句时逐个地输出字符, 提问:那么它怎么判断应该输出到哪个字符就停止了呢? 解答:系统会自动在″How do you do?″字符串的 结尾加上字节′\0′,作为结束标记。
运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6
2015年6月21日11时23分
22
Βιβλιοθήκη Baidu
3.用数组名作函数参数
数组名也可以作实参和形参,传递的是数组的起始地 址。 例3 用选择法对数组中10个整数按由小到大排序。 根据此思路编写程序如下:
所谓选择法就是先将10个 数中最小的数与a[0]对 换;再将a[1]到a[9] 中最小的数与a[1]对 换……每比较一轮,找出 一个未经排序的数中最小 的一个。共比较9轮。
2015年6月21日11时23分
运行结果如下: 9876543210 程序使a[0]~a[9] 的值为0~9,然后按逆 序输出。
9
1.一维数组的定义和引用
(3)一维数组的初始化 A.在定义数组时分别对数组元素赋予初值。 例如 int a[10]={0,1,2,3,4,5,6,7,8,9}; B.可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; //剩余的元素值为0
来处理,用来接收从实参传过来的地址。
函数首部的下面几种写法都合法,作用相同。 void select_sort(int array[10],int n) //指定元素个数与 实参数组不同 void select_sort(int array[],int n) void select_sort(int array[5],int n)
select_sort(a,10); //函数调用,数组名作实参 if(array[j]<array[k])
cout<<″the sorted array:″<<endl; k=j; for(i=0;i<10;i++) //输出10个已排好序的数 t=array[k]; cout<<a[i]<<″ ″; array[k]= array[i]; cout<<endl; array[i]=t; return 0; } }
2015年6月21日11时23分 3
第4讲
C++数组及自定义数据类型
4.3 授课重点 1.一维数组和二维数组的定义及使用; 2.结构的定义和使用。
4.4 授课难点 1.数组名作函数的参数; 2.结构体与指针的结合。
2015年6月21日11时23分
4
1.一维数组的定义和引用
(1)定义一维数组 格式为: 类型标识符 数组名[常量表达式]; 例如: int a[10]; 它表示数组名为a,此数组为整型,有10个元素。