《(本科)第十章 结构体、共用体与枚举型ppt课件.ppt》由会员分享,可在线阅读,更多相关《(本科)第十章 结构体、共用体与枚举型ppt课件.ppt(123页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程主讲人:第十章 结构体、共用体与枚举型第一节 结构体类型的基本概念(5大点) 【注】其中“文化程度”用上学年数来表示,如“12”表示高中毕业,“16”表示大学毕业。学生证号和电话号因为都超过65535,故用long型。 对于这样一个由不同类型数据组成的“复杂类型”,语言用右面的形式定义一个“结构体”类型。struct person char name20; /* 姓名 */ int age; /* 年龄 */ char sex; /* 性别 */ long num; /* 身份证号码 */ char nat; /* 民族 */ int edu; /* 文化程度 */ char addr20
2、; /* 地址 */ long tel; /* 电话号码 */;运行情况如下:stu1:Wang Li,12/15/1974.stu2:Wang Li,12/15/1974.returnstruct STU char name20; long num; int age; char sex; float score;运行情况如下: 输入第1个学生的所有档案信息: He Jing(回车) 96001(回车) 18(回车) m(回车) 78.5(回车) 输入第2个学生的所有档案信息: Han Meng(回车) 96002(回车) 19(回车) w(回车) 82.5(回车) 输入第3个学生的所有档案信
3、息: Wu Xiao Ming(回车) 96003(回车) 18(回车) m(回车) 77(回车)#include struct STU char name20; long num; int age; char sex; float score; 实参studi中各成员的值能够完整地传递给形参,在函数list中可以使用这些值。运行情况如下: 输入第1个学生的所有档案信息: He Jing(回车) 96001(回车) 18(回车) m(回车) 78.5(回车) 输入第2个学生的所有档案信息: Han Meng(回车) 96002(回车) 19(回车) w(回车) 82.5(回车) 输入第3个学生
4、的所有档案信息: Wu Xiao Ming(回车) 96003(回车) 18(回车) m(回车) 77(回车)#include struct STU char name20; long num; int age; char sex; float score;struct STU fun1(void) struct STU stud; char numstr20; printf(输入学生的所有档案信息:n); gets(stud.name); gets(numstr);stud.num=atol(numstr); gets(numstr);stud.age=atoi(numstr); stud.
5、sex=getchar();getchar(); gets(numstr);stud.score=atof(numstr); return(stud);#include struct STU char name20; long num; int age; char sex; float score;运算结果如下: 姓名:Zhang Chi 学号:96001 年龄:23 性别:m 分数:75.50可以将程序中的输出语句(等效地)改写为: printf(n姓名:%sn学号:%ldn年龄:%dn性别: %cn分数:%6.2fn, p-name,p-num,p-age,p-sex,p-score);
6、4.引用一个成员的地址的方法 注意,既然p 已定义为指向一个结构体类型的指针变量,那么它只能指向结构体变量而不能指向它其中一个成员。例如,下面的语句在本程序中是不合法的: p=&stud.num; /二者类型不匹配。 若引用一个成员的地址,应使该指针变量具有与该成员相同的类型。例如: long *pt; pt=&stud.num;#include struct STU char name20; long num; int age; char sex; float score; 这个链表包含4个结点,在每个结点内都设置了一个指针项,它用来存放下一个结点的地址,从而使前一个结点与下一个结点之间建立
7、了联系。 那么第一个结点的地址又存放在什么地方呢?C语言中是这样处理的,再设一个指针变量,用来存放第一个结点的地址,这个指针被称为“头指针”,一般以head命名。 链表最后一个结点的指针项不应指向任何一个结点,于是系统将其赋予NULL,表示最后一个结点不指向任何数据。 如果想增加一个结点B到第二、三个结点(B和C)之间,那么只需将结点B中的地址改为新结点B的地址,而将结点C的地址赋给新结点B中的地址项即可。此时链表就具有5个结点。而且还可以根据需要不断增加结点。这就实现了动态存储分配。 二、 用包含指针项的结构体变量构成结点。实际上,一个包含指向自身类型的指针项的结构体变量就是一个结点。returnreturn程序设计时,也可以把共同体变量作为函数参数,将其中的数据传给相应的形参。returnreturn