C++自定义数据类型

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18
3.二维数组的初始化 对二维数组变量的初始化可以采用以下的格式。 (1) 分行初始化。如: int a[2][3] = {{3,4,5}, {7,8,9}} 这种方式比较直观,用第一个括号{3,4,5}对第0行进行初始化,因为a[0]代表 的是一个有3个元素的一维数组,用{7,8,9}对第1行a[1]进行初始化,…,依 次类推。每个括号内的初始值列表都按照一维数组的方式对二维数组的对应 行进行初始化。
11
2. 一维数组元素的访问 一个一维数组包含n多个相同类型的元素,每个元素都可以单独访问,访问 一维数组元素的格式为:
<一维数组变量名>[<下标>] 其中<下标>为一个整型表达式,它的值表示访问一维数组的第几个元素。 C++中,一维数组的第一个元素的下标是0。例如,对于下面定义的一个一维 数组变量d: double d[10]; d[0]表示该数组的第一个元素,d[1]表示第二个元素,d[9]表示最后一个元素 。一维数组的最后一个元素的下标是数组的<元素个数>-1。d[0]、d[1]、d[2] 、…、d[9]都是double 型的变量.
第5章 自定义数据类型
1
本章学习要求:
自定义数据类型与基本数据类型的区别 自定义数据类型变量的定义与使用 参数传递的两种方式 指针类型的使用 链表的操作
2
5.1 自定义数据类型概述
除了基本数据类型的数据外,程序还经常需要描述一些复杂的概念,如 线性表、员工等,一个员工有多个属性需要描述,如姓名、工作部门、工资、职 务等。因此仅仅使用一个基本数据类型的变量不能描述,必须要由多个基本数据 类型变量一起才能描述一个较复杂的员工的概念。C++除了提供基本数据类型( int、char、float、double、bool)外,还提供了用基本数据类型构造自定义的数 据类型的机制,使得程序能够对复杂数据如,员工等进行描述与处理。 本章将对C++提供的自定义类型的构造机制进行分别介绍,他们包括:枚举、数 组、结构、联合以及指针与引用。
20
4.二维数组的存储 对于二维数组变量,编译器也将在内存中分配连续的存储空间来存储数组元素 。在C++中,二维数组是按照行的顺序连续存储的,即先是第0行元素,再是第 1行元素,…,依次类推。例如,对于下面的二维数组变量a: int a[10][4]; 其内存空间分配如图所示。
a[0][0] … a[0][3] a[1][0] … a[1][3] …… a[9][0] … a[9][3]
15
5.3.2 二维数组
1.二维数组变量的定义 二维数组变量的定义格式为: <元素类型> <二维数组变量名>[<行数>][<列数>];
例如: int a[4][6]; 定义了一个由4×6个整型数所构成的二维数组类型的变量a。
第0列 第0行 第1行 第2行 第3行
第1列
第2列
第3列
第4列
第5列
16
访问二维数组元素的格式为: <二维数组变量名>[<下标1>][<下标2>] 其中,<下标1>和<下标2>分别为一个整型表达式,它们分别表示所访问的元 素在二维数组中的行与列,第一行与第一列的序号均为0。 例如,对于前面的二维数组变量a,a[0][0]表示该数组中第0行和第0列的元素 ,a[i][j]表示第i行和第j列的元素,…,a[3][5]表示最后一行和最后一列的元素 。这些元素都可以看成是一个int 型变量,可对它们实施int型所允许的所有操 作。
5.3 数组类型
10
5.3.1 一维数组
一维数组通常用于表示由固定多个同类型的具有线性次序关系的数据。 1. 一维数组变量的定义 一维数组变量定义时,的格式为: <元素类型> <一维数组变量名> [<元素个数>]; 例如,下面定义了一个由10个长整型数所构成的一维数组变量a: long a[10]; 即a中可存放10个长整数。
13
3. 一维数组变量的初始化
程序中定义的每个变量在使用前都要有确定的值。在定义一维数组变量时, 可以对其进行初始化,初始化值用一对大括号({})括起来,有以下几种初始 化方式。 (1) 定义数组变量时,对每个元素进行初始化。例如: int a[5]={11,13,14,15,16}; 各数组元素的初始化结果为:a[0]为11,a[1]为13,a[2]为14,a[3]为15,a[4] 为16。大括号以及其内的值称为数组变量的初始化列表。 (2) 初始化表中的值可以少于数组元素个数,不足部分的数组元素初始化成0 。例如: int b[5]={20, 34}; 数组元素b[0]、b[1]、b[2]、b[3]、b[4]分别初始化成:20、34、0、0、0。 (3) 如果在定义数组时对每个元素都进行了初始化,则数组元素个数可以省略 ,其元素个数由所提供的初始化值的个数决定。例如: int c[] = {55, 2, 6, 4}; 初始化的结果为:c[0]为55,c[1]为2,c[2]为6,c[3]为4。 14
5
枚举类型变量定义的格式如下: <枚举类型名> <变量名列表>; 例如,下面是一些枚举类型变量的定义: Position p1, p2; DAY workday; Month v; 除此之外,枚举类型的变量也可以在定义枚举类型的同时定义。例如下面定义 了3个Color类型的变量c1、c2、c3: enum Color {RED, BLUE, GREEN } c1, c2, c3; 定义枚举类型时,可以省略枚举类型名,此时,必须在定义枚举类型时,定义 变量,否则以后无法定义。例如: enum { RUNNING, STOPPING, PAUSE} r1, r2;
19
(2) 可以将所有元素写在一个花括号内,系统按照数组元素排列的顺序对各元 素进行初始化。如: int a[2][3] = {3,4,5,7,8,9};
(3) 在定义二维数组时,若给出了所有元素的初始化值,则数组的行数可以省 略,其行数由初始值的个数来决定。例如,下面的二维数组a有3行: int a[][3] = {1,2,3,4,5,6,7,8,9}; 编译器知道数组每行有3列,则总共给出了9个元素,则编译器能够计算出数 组有3行。初始化后数组各元素的值为: 1 2 3 4 5 6 7 8 9
3
5.2 枚举类型
1.枚举类型的定义 C++基本数据类型变量的取值范围是语言预先定义好的,而枚举类型变量的 取值范围是由程序定义的。在定义一个枚举类型时,需要列出其变量所能取 的每个值。枚举类型的定义通过关键字enum实现,格式如下: enum <枚举类型名> {<枚举值列表>}; 例如,下面定义了两个枚举类型: enum Month {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; enum Position {LEFT, RIGHT, TOP, BOTTOM};
用sizeof(a)可以计算出二维数组a所占用的内存字节数。
21
例 有一个4×5的矩阵,编程求出其中值最大的那个元素的值,以及其所在的行号和列号。 解:可以采用“打擂台”的方式,程序中,将a[0][0]作为第一个人。 #include <iostream> using namespace std; int main(){ int max; int row=0, colum=0; //保存最大值的行和列 int a[4][5]={{3,10,3,50},{45,11,47,39},{29,45,33,4}, {23,-29,-23,1}}; max = a[0][0]; for(int i=0; i<=2; i++){ for (int j=0; j<=3; j++){ if (max<a[i][j]) { max = a[i][j]; row = i; colum = j; } } } cout <<"最大的值为:"<< max <<"其所在的行:"<<row<<" 列:"<<colum << endl; return 0; }
4.一维数组的存储 对于一维数组变量,编译器将会在内存中为其分配连续的存储空间来存储数 组的元素。例如,下面的一维数组变量a: int a[10]; 其内存空间分配如图所示。
a[0] a[1] … a[9]
一维数组所占用的存储单元大小可以用sizeof运算符来计算。例如,下面将输出 一维数组a所占用的内存字节数。 cout << sizeof(a);
6
2.枚举类型的运算 能够对枚举类型施与整型所能够进行的所有运算,只是有些运算过程中,会有 些限制,如赋值运算和输入输出。 (1) 赋值运算 可以使用一个枚举值对枚举变量赋值,例如: Position p17
(2) 输入输出操作 不能直接对枚举类型变量进行输入。例如,下面的操作是错误的: Day d; cin >> d; //错误 通常采用输入整型值,然后强制转换到枚举类型。例如: int i; cin >> i; d = (Day)i; //强制转换 对枚举变量输出的是该变量枚举值对应的整数值。 Day d; d = SUN; cout << d; //输出对应的整数值7
12
例 从键盘输入10个整数,统计并输出这10个整数的和。 #include <iostream> using namespace std; int main(){ int a[10]; int index = 0; cout << "输入10个整数值:"; while(index<10){ cin >> a[index]; index++; } int sum = 0; for (index=0; index<10; index++) sum += a[index]; cout << "你所输入的10个整数的和为:" << sum; return 0; }
17
例 输入一个的矩阵,求出两条对角线元素值之和。 解:一个矩阵有两条对角线,一条对角线的元素为:a[0][0]、a[1][1]、…、a[n-1][n-1]。另外一条 对角线的元素为:a[n-1][0]、a[n-2][1]、…、a[0][n-1]。 #include <iostream> using namespace std; int main(){ const int n = 4; int m[n][n]; int i,j; cout << "输入矩阵 (" << n << "x" << n << "):\n"; //遍历二维数组需要双重循环,给每个元素输入值 for (i=0; i<n; i++) for (j=0; j<n; j++) cin >> m[i][j]; int sum = 0; for (i=0,j=0; i<n; i++,j++) sum += m[i][j]; //求对角线和 for (i=n-1,j=0; j<n; i--,j++) sum += m[i][j];//求对角线和 cout << "sum = " << sum; return 0; }
4
枚举类型的每一个枚举值都对应着一个整型值,通常情况下,第一个 枚举值对应常量0,第二个枚举值对应常量1,依次类推,如上述定义中JAN值 为0,FEB值为1,…,DEC值为11;LEFT值为0,RIGHT值为1,…, BOTTOM值为3。在定义枚举类型时,也可以给枚举值指定对应的整数值,例 如: enum DAY{SUN=7, MON=1,TUE,WED,THU,FRI,SAT}; 这时,SUN对应7,MON对应1,TUE对应2,WEB对应3,依次类型 。可以给几个枚举值指定相同的整数值。如: enum Parameter{MAX_ID_LEN=10, MAX_NAME_LEN=10}; 枚举值MAX_ID_LEN和MAX_NAME_LEN对应的整数值都是10。
8
(3) 除(1)、(2)外的其他任何整型能够参与的运算 除了赋值操作和输入/输出操作有所限制外,可以对枚举类型的值进行任何整 型值能够进行的运算。在运算时,系统首先把它们转换成对应的整型值,然后 按照整型的操作进行。如,可以对两个枚举值进行大小比较: bool b = WED<THU; //结果为true。 系统利用WED对应的整数值3和THU对应的整数值4,进行比较。 再如,可以对枚举类型进行算术运算,在运算时,枚举值将转换成对应的整型 值,然后进行算术运算。对枚举类型进行算术运算的结果类型为算术类型。例 如: Day d1, d2; d1 = MON; d2 = d1+1;//错误,因为d1+1的结果为int类型 d2 = (Day)(d1+1); //正确 可以将枚举类型的每个枚举值当作一个整型符号常量。如: int const MAX_LEN1 = 20; enum {MAX_LEN2=20}; 在使用MAX_LEN1的地方可以使用MAX_LEN2来代替。 9
相关文档
最新文档