C 程序设计简明教程》-雷新贤 c09

上传人:E**** 文档编号:89423199 上传时间:2019-05-25 格式:PPT 页数:60 大小:552KB
返回 下载 相关 举报
C 程序设计简明教程》-雷新贤 c09_第1页
第1页 / 共60页
C 程序设计简明教程》-雷新贤 c09_第2页
第2页 / 共60页
C 程序设计简明教程》-雷新贤 c09_第3页
第3页 / 共60页
C 程序设计简明教程》-雷新贤 c09_第4页
第4页 / 共60页
C 程序设计简明教程》-雷新贤 c09_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《C 程序设计简明教程》-雷新贤 c09》由会员分享,可在线阅读,更多相关《C 程序设计简明教程》-雷新贤 c09(60页珍藏版)》请在金锄头文库上搜索。

1、中国铁道出版社,第9章 结构类型和链表,9.1结构体引例 9.2结构体类型 9.3链表 9.4链表应用案例 9.5自主学习,中国铁道出版社,9.1 结构体引例,问题定义: 有时需要将不同类型的数据组合成一个有机 的整体,以便于引用。如: 一个学生有学号/姓名/性别/年龄/成绩、地址等属性 int num; char name20; char sex; int age; float score; int char addr30;,应当把它们组织成一个组合项,在一个组合 项中包含若干个类型不同(当然也可以相同) 的数据项。,中国铁道出版社,9.2 结构体类型,1 结构体类型的定义: struct

2、结构体名 成员表列; 如:struct student int num;char name20;char sex; int age;float score;char addr30; ,结构体名,类型名,成员名,中国铁道出版社,2 结构体类型变量定义: (1)先声明结构体类型再定义变量名 例如:struct student student1, student2; | | | 结构体类型名 结构体变量名 定义了student1和student2为struct student类型的变量,即它们具有struct student类型的结构.,中国铁道出版社,在定义了结构体变量后,系统会为之分配内存单元。

3、 例如:student1和student2在内存中各占59个字节(2+20+1+2+4+30=59)。,注意: 将一个变量定义为标准类型(基本数据类型)与定义为结构体类型不同之处在于后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型,因为可以定义出许许多多种具体的结构体类型。,中国铁道出版社,(2) 在声明类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 成员表列 变量名表列;,中国铁道出版社,例如: struct student int num; char name20; char sex; int age; float score; char ad

4、dr30; student1,student2;,它的作用与第一种方法相同,即定义了两个struct student 类型的变量student1, student2,中国铁道出版社,(3) 直接定义结构体类型变量 其一般形式为: struct 成员表列 变量名表列; 即不出现结构体名。,注意: (1) 类型与变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。,注意: (2)对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。 (3)成员也可以是一个结构体变量。 (4) 成员名可以与程

5、序中的变量名相同,二者不代表同一对象。,中国铁道出版社,例如:struct date /*声明一个结构体类型*/ int month; int day; int year; ; struct student int num; char name20; char sex; int age; float score; struct date birthday; /*birthday是struct date类型*/ char addr30; student1,student2;,先声明一个struct date类型,它代表“日期”,包括3个成员:month(月)、day(日)、year(年)。然后在

6、声明struct student类型时,将成员birthday指定为struct date类型。,中国铁道出版社,3 结构体变量赋初值,但不能用以下语句整体读入结构体变量, 例如: scanf(%d,s,c,d,f,s,student1); 结构体变量的地址主要用作函数参数,传递结构体变量的地址。,例 对结构体变量初始化. #include void main() struct student long int num; char name20; char sex; char addr20; a=10101,”LiLin”,M,123 Beijing Road; /* 对结构体变量a赋初值*/

7、 printf(No.:%ldnname:%snsex:%cnaddress:%sn,a.num,a.name,a.sex,a.addr); ,运行结果: No.:10101 name:LiLin sex: address:123 Beijing Road,中国铁道出版社,4 结构体变量的使用,在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则: 不能将一个结构体变量作为一个整体进行输入和输出。 例如: 已定义student1和student2为结构体变量并且它们已有值。 printf(%d,%s,%c,%d,%f,%n,student1);,中国铁道出版社,(1)通过结构体变量名

8、和成员名访问数据 结构体变量名.成员名 例如, student1.num表示student1变量中的num成员,即student1的num(学号)项。可以对成员赋值,例如:student1.num=10010上面赋值语句的作用是将整数10010赋给student1变量中的成员num。,中国铁道出版社,如果成员本身又属一个结构体类型, 只能对最低级的成员进行赋值或存取以及运算。 例如: 对上面定义的结构体变量student1, 可以这样访问各成员: student1.num student1.birthday.month,注意: 不能用student1.birthday来访问student1变量

9、中的成员birthday,因为birthday本身是一个结构体变量。,中国铁道出版社,(2) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。 例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age+; +student2.age;,由于“”运算符的优先级最高,因此student1.age是对student1.age进行自加运算,而不是先对age进行自加运算。,中国铁道出版社,(3) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。 例如:

10、scanf(%d, (输入student1.num的值) printf(%o,student1); (输出student1的首地址),中国铁道出版社,但不能用以下语句整体读入结构体变量, 例如: scanf(%d,s,c,d,f,s,student1); 结构体变量的地址主要用作函数参数, 传递结构体变量的地址。,中国铁道出版社,【例9.1】阅读并运行程序,分析结果加深对结构体的理解。 #include struct staff int num; char name20; char sex; int age; st=100001,“ZhangShan“,M,45; void main() pr

11、intf(“num=%d name=%s sex=%c age=%dn“,st.num,st.name,st.sex,st.age); ,中国铁道出版社,1. 定义结构体数组 和定义结构体变量的方法相仿,只需说明其为数组即可。例如: struct student int num;char name20;char sex;int age; float score;char addr30; ; struct student stu3;,以上定义了一个数组stu,数组有个元素,均为struct student类型数据。,中国铁道出版社,也可以直接定义一个结构体数组,例如: struct studen

12、t int num; stu3; 或: strcut student int num; stu3;,图11-4,中国铁道出版社,结构体数组的初始化 与其他类型的数组一样,对结构体数组可以初始化。例如: struct student int num;char name20; char sex; int age; float score; char addr30; ;stu210101,LiLin,M,18,87.5,103 BeijingRoad,10102,Zhang Fun,M,19,99,130 Shanghai Road;,图11-5,中国铁道出版社,当然,数组的初始化也可以用以下形式:

13、 struct student int num; ; struct student str=,; 即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。,结构体数组初始化的一般形式是在定义数组的后面加上“初值表列;”。,中国铁道出版社,例9.2 应用结构体数组对学生成绩进行分析。,#include struct student /学生结构体类型说明 char name8; int chinese; int math; int eng; int aver; int count; ;,中国铁道出版社,void main() struct student s5=“赵军“,78, 92,

14、 67, “王庆“, 87, 73, 86, “丁一“, 65, 85, 93, “周文“, 85, 76, 83, “张然“, 95, 86, 88; struct student t1,t2; char *stu8=“姓名“,“语文“,“数学“,“英语“,“平均成绩“,“总成绩“; int i;,定义并初始化结构体数组,中国铁道出版社,printf(“ 成绩分析nn“); t1.count=0; t2.count=1000; for(i=0;isi.count) /将总成绩较小者存到t2 t2=si; ,中国铁道出版社,printf(“n“); for(i=0;i6;i+) /打印标题 p

15、rintf(“%-10s“,stui); printf(“n-n“); /输出成绩信息数据 for(i=0;i5;i+) printf(“n%-10s%-10d%-10d%-10d%-10d%-10dn“,si.name,si.chinese, si.math,si.eng,si.aver,si.count); printf(“n总成绩最高的是%s,分数为%dnn“,t1.name,t1.count); printf(“n总成绩最低的是%s,分数为%dnn“,t2.name,t2.count); ,运行结果P180 图9-4,中国铁道出版社,9.3 链 表,9.3.1 指向结构体自身的指针 例如:struct staff int num; struct staff *p; ;,成员p是一个指向其所在的结构体类型的指针,可以通过这种指针构造出各种动态数据结构,如链表、二叉树等。,中国铁道出版社,9.3.2 动态分配内存函数 常用的内存动态管理函数有3个: 1ma

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号