第10章构造数据类型.ppt
《第10章构造数据类型.ppt》由会员分享,可在线阅读,更多相关《第10章构造数据类型.ppt(48页珍藏版)》请在三一办公上搜索。
1、第10章 构造数据类型,南开大学非计算机专业理工科面向对象程序设计课程,2,课程内容安排(2课时),结构体枚举类型重定义typedef,3,结构体,数组是由若干同一类型的数据元素构成的有序集合。例如可以用一个数组表示某个学生所有科目的成绩,但是如果想要表示某个学生的学号、姓名、性别、年龄、成绩等不同类型的数据集合,用数组显然无法实现。这时程序员可以定义一个表示学生数据的结构体数据类型,即学生结构体类型,其中包括学生的各项数据说明,然后再根据新定义的结构体类型定义相应的结构体变量,用来表示和存储某个具体的学生数据。下面分别介绍结构体类型的定义、结构体变量的定义及其它们的使用。,4,结构体,10.
2、1.1 结构体类型的定义结构体类型定义的一般形式为:struct 结构体类型名成员列表;其中,struct是关键字,表示结构体类型的开始。struct后面就是定义的结构体类型的名称。大括号中是若干个成员的说明,每个成员说明的形式为:类型 成员名;整个定义的最后以分号结束。,5,结构体,在这段结构体类型的定义中,Student是结构体类型名,即新定义的一种构造数据类型。大括号中列出了学生结构体中包含的各成员的类型及名称,即学生类型包含的各项信息。定义了结构体类型Student之后,就可以定义相应的结构体变量表示具体的学生数据了。,例如学生结构体类型定义如下:struct Studentchar
3、num8;char name10;char sex;int age;float score;,6,结构体,提示:结构体类型定义以关键字struct开头,一对大括号不能少,尤其不要忘记最后以分号结束。结构体类型的定义一般放在程序开始的文件包含语句后面,也可以放到某个函数内部。结构体中的成员可以是前面学过的任意类型,甚至可以是结构体类型。结构体类型定义只是定义了一种新的数据类型,并不是变量,不占用内存空间。,7,结构体,10.1.2 结构体变量的定义和初始化1.结构体变量的定义结构体变量的定义方法有三种(1)先定义结构体类型,再定义结构体变量 如前面定义过结构体类型Student后,可以用以下形式
4、定义变量:Student s1,s2;该语句定义了Student类型的结构体变量s1和s2。s1和s2表示具体的两个学生变量,它们各自有学号、姓名、性别、年龄和成绩等数据成员。,8,结构体,(2)定义结构体类型的同时定义结构体变量struct Studentchar num8;char name10;char sex;int age;float score;stu1,stu2;在定义结构体类型的同时定义两个结构体变量,然后再以分号结束。,9,结构体,(3)不声明结构体类型名,直接定义结构体变量struct char num8;char name10;char sex;int age;float
5、 score;stu;直接定义上面这种结构体类型的变量stu,但是没有给出类型名,以后就不能再定义该类型的变量了。,10,结构体,2.结构体变量的初始化和其他类型的变量一样,定义结构体变量的同时可以对其进行初始化,例如:Student s1=0911001,Zhang San,M,18,606;或struct Studentchar num8;char name10;char sex;int age;float score;s2=0911002,Wang Li,F,17,666;,11,结构体,10.1.3 结构体变量的引用定义结构体变量之后,系统为其分配内存并可以对其引用,即对其赋值和其他操
6、作。但是要注意一个结构体变量由若干成员组成,所以引用结构体变量一般是对其各个成员的引用。引用结构体变量的成员的形式如下:结构体变量名.成员名其中,“.”是成员运算符。,12,结构体,如已有定义“Student stu;”,则可以进行如下操作:strcpy(stu.num,0912003);cinstu.name;stu.sex=F;stu.age=16;cinstu.score;,13,结构体,另外,相同类型的结构体变量之间可以整体赋值,例如:Student s1,s2=0911001,Zhang San,M,18,606;s1=s2;这样,s1和s2两个变量的内容完全相同,相当于将s2的各成
7、员的值依次赋值给s1的各成员。,14,结构体,【例10-1】编写程序,记录某学生的学号、姓名和三科成绩,计算并输出其平均成绩。/p10_1.cpp#include using namespace std;struct Student char num8;char name10;float score3;stu=0910128,Li Ming,86,91,78;,15,结构体,int main()float s=0;for(int i=0;i3;i+)s=s+stu.scorei;coutstu.numendlstu.nameendls/3endl;return 0;运行结果为:0910128L
8、i Ming85,16,结构体,注意:1结构体中的成员不是变量,不能单独使用,它们从属于某个结构体变量,必须通过“结构体变量名.成员名”的形式来引用。2对结构体变量只有初始化和变量之间赋值时可以整体引用,其他情况下只能引用成员。例10-1中如果没有初始化,定义后再为变量stu赋值,则只能对成员分别赋值或分别输入,如“strcpy(stu.num,0910128);”“cinstu.score0;”等形式。如果写成“stu=0910128,Li Ming,86,91,78;”则是错误的,不能同时对结构体变量整体输入输出,如“cinstu;”“coutstu;”等都是错误的。,17,结构体,3如果
9、结构体成员仍然是结构体类型的,则要对数据成员进行多层引用。如:struct Dateint year,month,day;struct Student char num8,name10;Date birthday;float score3;stu;则要引用学生stu的出生年份,就应该表示为:stu.birthday.year。,18,结构体,10.1.4 结构体指针结构体变量定义后,系统为其分配内存空间,具体分配的字节数可由sizeof(结构体类型名)或者sizeof(变量名)求得。结构体变量的内存空间的首地址表示为:&结构体变量名。可以定义结构体类型的指针变量,让其指向结构体变量,指针变量访
10、问结构体变量的成员时借助箭头成员运算符“-”,形式为:指针变量-成员名。,19,结构体,【例10-2】利用结构体指针变量实现:输入学生数据,然后输出平均成绩。/p10_2.cpp#include using namespace std;struct Student char num8;char name10;float score3;,20,结构体,int main()Student stu,*p;p=例题中,p-num等价于stu.num,也可以表示为(*p).num。其他成员的访问同理。,21,结构体,10.1.5 结构体数组如果要操作多个学生的信息,可以定义学生类型的结构体数组,如语句“
11、Student stu3;”定义了结构体数组stu,它有3个元素stu0、stu1、stu2,这3个元素就是3个结构体变量,表示3个学生,而每个元素都有学号、姓名等成员,用stui.num、stui.name(其中i的取值为0、1、2)等形式引用。,22,结构体,对结构体数组可以在定义的同时进行初始化,例如:struct Student char num8;char name10;float score3;stu2=0910127,Li Ming,86,91,78,0910128,Zhou Xun,88,81,79;,23,结构体,【例10-3】学生结构体类型包括学号、姓名、英语成绩、数学成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 构造 数据类型
链接地址:https://www.31ppt.com/p-4875440.html