C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 字符数组输入输出 数组 字符数组与字符串 多维数组在内存中的映像 枚举类型 枚举类型内存空间 结构类型内存空间 数组 枚举类型 结构类型 联合类型 字符数组与字符串 多维数组 冒泡排序 结构数组 C++语言程序设计
4.3 结 构 类 型 结构类型 把现实生活中意义密切相关的一组数据组合成一个整体,即由各种数据类型(可以是基本数据类型或已声明的自定义数据类型)的数据组成一个集合,称为结构类型。 例如,一个学生的学号、姓名、年龄、成绩等,虽然分别属于不同的数据类型,但它们之间是密切相关的,因为每一组信息属于一个人。 C++语言程序设计
4.3 结 构 类 型 结构类型的定义和初始化 结构的声明形式: struct 结构类型名 { 数据类型标识符1 成员名1; 4.3 结 构 类 型 结构类型的定义和初始化 结构的声明形式: struct 结构类型名 { 数据类型标识符1 成员名1; 数据类型标识符2 成员名2; ┇ 数据类型标识符n 成员名n; }; struct student { long num; //学号 char name[20]; //姓名 char sex; //性别 int age; //年龄 float score; //成绩 char addr[30]; //住址 }; //必须以分号结束结构的定义 C++语言程序设计
4.3 结 构 类 型 结构变量的定义和使用 结构变量名.成员名 结构成员的访问: 例: student s1; s1.num=1; 4.3 结 构 类 型 结构变量的定义和使用 结构成员的访问: 结构变量名.成员名 例: student s1; s1.num=1; cout<<s1.num<<endl; cout<<s1.name<<endl; 如同使用一个变量 如同使用一个数组 C++语言程序设计
4.3 结 构 类 型 结构变量的初始化 定义结构变量时直接初始化 student s2={20041118,”Li Li”,18,90}; 4.3 结 构 类 型 结构变量的初始化 定义结构变量时直接初始化 student s2={20041118,”Li Li”,18,90}; 分别给各个成员赋值 student s1; s1.num=20041118; strcpy(s1.name, “Li Li”); C++语言程序设计
结构类型的声明,变量的定义和初始化 C++语言程序设计 #include <iostream> #include <iomanip> using namespace std; struct student //声明新的数据类型 { long num; //学号 char name[20]; //姓名 char sex; //性别 int age; //年龄 }stu={20041118,"Li Li",'F',18}; void main() { cout<<setw(8)<<stu.num<<setw(10)<<stu.name <<setw(3)<<stu.sex<<setw(3)<<stu.age<<endl; } 运行结果: 20041118 Li Li F 18 C++语言程序设计
4.3 结 构 类 型 结构体可以由不同数据类型的成员构成,这些成员可能是基本数据类型,也可能是自定义的数据类型,例如已声明的另一个结构类型。 结构的赋值运算 属于同一结构类型的各个变量之间可以相互赋值。 这一点和数组不同,C++规定,不能直接进行数组名的赋值,因为数组名是一个常量,而结构类型的变量可以赋值。 不同结构的变量不允许相互赋值。 即使这两个变量可能具有同样的成员。 C++语言程序设计
有时需要使几个不同类型的变量共用同一组内存单元,这时可以声明一个联合型(Union)数据类型,语法形式为: 4.4 联 合 类 型 有时需要使几个不同类型的变量共用同一组内存单元,这时可以声明一个联合型(Union)数据类型,语法形式为: union 联合类型名 { 数据类型说明符1 成员名1; 数据类型说明符2 成员名2; …… 数据类型说明符n 成员名n; }; C++语言程序设计
4.4 联 合 类 型 联合类型变量定义形式: 在某时刻,只能使用多个成员的其中之一,联合成员的引用形式为: C++语言程序设计 4.4 联 合 类 型 联合类型变量定义形式: 联合类型名 联合变量名; 在某时刻,只能使用多个成员的其中之一,联合成员的引用形式为: 联合变量名.成员名 例如: union uarea { char c_data; short s_data; long l_data; }ux; 联合类型可以不声明名称,称为无名联合,常用做结构类型的内嵌成员。 C++语言程序设计
C++语言程序设计 设有若干个人员的信息,其中有学生和教师。从键盘输入相关人员的信息。 #include <iostream> using namespace std; struct person { int num; char name[10]; char sex; char job; //人员的类别 union //无名联合作为结构体的内嵌成员 { int classes; //为学生存放班级 char position[10]; //为教师存放职称 }; } p[2]; C++语言程序设计
C++语言程序设计 设有若干个人员的信息,其中有学生和教师。从键盘输入相关人员的信息。 void main() { int i; for (i=0;i<2;i++) {cin>>p[i].num>>p[i].name>>p[i].sex>>p[i].job; if (p[i].job == 's') cin>>p[i].classes; else if (p[i].job == 't') cin>>p[i].position; else cout<<"input error!"<<endl; } C++语言程序设计
C++语言程序设计 设有若干个人员的信息,其中有学生和教师。从键盘输入相关人员的信息。 for (i=0;i<2;i++) //按学生或教师显示信息 { if (p[i].job == 's') cout<<p[i].name<<" is a student of class" <<p[i].classes<<"."<<endl; else if (p[i].job == 't') cout<<p[i].name<<" is a teacher, he is a" <<p[i].position<<".\n"; } 运行结果: 9910401 zhang m s 104↙ 2355 wang f t prof↙ zhang is a student of class 104. wang is a teacher, he is a prof. C++语言程序设计
4.4 联 合 类 型 C++语言程序设计 联合型变量的特点如下 4.4 联 合 类 型 联合型变量的特点如下 (1)同一段内存用来存放几种不同类型的成员,但在某一时刻只能存放其中一种,而不是同时存放几种; (2)联合变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后,原有的成员就会失去作用; (3)联合变量的地址和它的各个成员的地址是同一地址; (4)不能对联合变量名赋值,也不能在定义时初始化; (5)不能用联合变量作为函数参数或返回值。 C++语言程序设计