1、C语言程序设计语言程序设计学习目标:学习目标:为后续专业课为后续专业课(数据结构、面向对象程序设计、单片机数据结构、面向对象程序设计、单片机与嵌入式系统、物联网技术等课程与嵌入式系统、物联网技术等课程)奠定程序设计基础。奠定程序设计基础。第第1 1章:章:C C语言语法基础语言语法基础第第2 2章:章:C C程序设计基础程序设计基础第第3 3章:数组章:数组第第4 4章:函数章:函数第第5 5章:指针章:指针第第6 6章:结构体、共用体、枚举类型章:结构体、共用体、枚举类型第第7 7章:文件章:文件 教学内容:教学内容:C语言程序设计语言程序设计第第6 6章章 结构体、共用体、枚举类型结构体、
2、共用体、枚举类型【学习目标学习目标】1.1.掌握结构体类型的声明方法;掌握结构体类型的声明方法;2.2.掌握结构体变量的定义、初始化及成员引用方法;掌握结构体变量的定义、初始化及成员引用方法;3.3.掌握结构体数组及应用;掌握结构体数组及应用;4.4.掌握结构体指针及应用;掌握结构体指针及应用;5.5.掌握共用体、枚举类型及应用;掌握共用体、枚举类型及应用;6.6.掌握掌握typedef声明新类型名的方法;声明新类型名的方法;7.7.掌握链表的概念及其操作方法。掌握链表的概念及其操作方法。6.1 6.1 结构体类型概述结构体类型概述6.2 6.2 结构体变量结构体变量6.3 6.3 结构体数组
3、结构体数组6.4 6.4 结构体指针结构体指针6.5 6.5 共用体类型共用体类型6.6 6.6 枚举类型枚举类型6.7 6.7 用用typedeftypedef声明新类型名声明新类型名6.8 6.8 链表及其操作链表及其操作【学习内容学习内容】第第6 6章章 结构体、共用体、枚举类型结构体、共用体、枚举类型6.1 结构体类型概述结构体类型概述 6.2 结构体变量结构体变量 6.2.1 定义定义结构体变量的结构体变量的方法方法1、先先声明结构体类型,声明结构体类型,再再定义结构体变量定义结构体变量6.2 结构体变量结构体变量 2、在声明结构体类型的在声明结构体类型的同时同时定义结构体变量定义结
4、构体变量 6.2.1 定义定义结构体变量的结构体变量的方法方法6.2 结构体变量结构体变量 3、不指定结构体名而不指定结构体名而直接直接定义结构体变量定义结构体变量 6.2.1 定义定义结构体变量的结构体变量的方法方法6.2 结构体变量结构体变量 说明:说明:6.2.1 定义定义结构体变量的结构体变量的方法方法6.2 结构体变量结构体变量 6.2.2 结构体变量的结构体变量的初始化初始化6.2 结构体变量结构体变量 6.2.3 结构体变量的结构体变量的引用引用6.2 结构体变量结构体变量【例例6.1】结构体变量的初始化和引用。结构体变量的初始化和引用。6.2.3 结构体变量的结构体变量的引用引
5、用void main()6.2 结构体变量结构体变量 6.2.3 结构体变量的结构体变量的引用引用6.3 结构体数组结构体数组 6.3.1 定义定义结构体数组的结构体数组的方法方法6.3 结构体数组结构体数组 6.3.2 结构体数组的结构体数组的初始化初始化例如:例如:6.3 结构体数组结构体数组 6.3.2 结构体数组的结构体数组的应用应用【例例6.2】计算学生的平均成绩,并统计不及格的人数。计算学生的平均成绩,并统计不及格的人数。void main()6.3 结构体数组结构体数组【例例6.3】建立同学通讯录。建立同学通讯录。6.3.2 结构体数组的结构体数组的应用应用void main()
6、6.4 结构体指针结构体指针 6.4.1 指向指向结构体变量结构体变量的指针的指针6.4 结构体指针结构体指针【例例6.4】通过通过3种方式访问结构体变量中的成员。种方式访问结构体变量中的成员。6.4.1 指向指向结构体变量结构体变量的指针的指针void main()6.4 结构体指针结构体指针 6.4.2 指向指向结构体数组结构体数组的指针的指针【例例6.5】用结构体指针变量输出结构体数组。用结构体指针变量输出结构体数组。void main()6.4 结构体指针结构体指针 6.4.3 结构体指针变量结构体指针变量作函数参数作函数参数6.4 结构体指针结构体指针【例例6.6】计算一组学生的平均
7、成绩和不及格人数。要求用计算一组学生的平均成绩和不及格人数。要求用结构体指针变量作函数参数结构体指针变量作函数参数编程。编程。6.4.3 结构体指针变量结构体指针变量作函数参数作函数参数void main()6.5 共用体类型共用体类型 6.5.1 共用体类型的共用体类型的概念概念声明一个共同体类型的一般形式为:声明一个共同体类型的一般形式为:union 共用体名共用体名成员列表成员列表;6.5 共用体类型共用体类型 6.5.2 共用体类型的共用体类型的变量变量1、定义定义共用体变量的共用体变量的方法方法(1 1)先先声明共用体类型,声明共用体类型,再再定义共用体变量定义共用体变量6.5 共用
8、体类型共用体类型(2 2)在声明共用体类型的)在声明共用体类型的同时同时定义共用体变量定义共用体变量 6.5.2 共用体类型的共用体类型的变量变量1、定义定义共用体变量的共用体变量的方法方法6.5 共用体类型共用体类型(3 3)不指定共用体名而)不指定共用体名而直接直接定义共用体变量定义共用体变量 6.5.2 共用体类型的共用体类型的变量变量1、定义定义共用体变量的共用体变量的方法方法6.5 共用体类型共用体类型 2、共用体变量的共用体变量的引用方法引用方法6.5.2 共用体类型的共用体类型的变量变量6.5 共用体类型共用体类型 3、结构体与、结构体与共用体的共用体的比较比较6.5.2 共用体
9、类型的共用体类型的变量变量6.5 共用体类型共用体类型 4、共用体变量的共用体变量的赋值赋值(1)共用体变量的初始化赋值)共用体变量的初始化赋值例如:例如:union UData d1=a;union UData d1=a,12,345;/a赋给变量赋给变量d1的第的第1个成员个成员cunion UData d1=a;/错误错误,中只能有一个值中只能有一个值/错误错误,初值必须用,初值必须用 括起来括起来6.5.2 共用体类型的共用体类型的变量变量6.5 共用体类型共用体类型(2)共用体变量在程序中赋值)共用体变量在程序中赋值 d1.i=12;例如:例如:union UData d1,d2,d
10、10;/定义共用体类型的变量、数组定义共用体类型的变量、数组d1 =a,12,345;/错误错误,不能对变量整体赋值,不能对变量整体赋值d0.c=a;/将将12赋给赋给d1的成员的成员i/同类型的共用体变量相互赋值同类型的共用体变量相互赋值d2=d1;/将将a 赋给赋给d0的成员的成员c6.5.2 共用体类型的共用体类型的变量变量4、共用体变量的共用体变量的赋值赋值6.5 共用体类型共用体类型 6.5.2 共用体类型的共用体类型的变量变量4、共用体变量的共用体变量的赋值赋值6.5 共用体类型共用体类型 6.5.3 共用体的共用体的应用举例应用举例【例例6.7】利用共用体类型测试利用共用体类型测
11、试CPU的大端、小端模式。的大端、小端模式。6.5 共用体类型共用体类型【例例6.7】利用共用体类型测试利用共用体类型测试CPU的大端、小端模式。的大端、小端模式。6.5.3 共用体的共用体的应用举例应用举例void main()6.5 共用体类型共用体类型【例例6.9】设有一个教师与学生通用的表格,教师数据有姓名、年龄、职业、教研室设有一个教师与学生通用的表格,教师数据有姓名、年龄、职业、教研室4项,学生有姓名、年龄、职业、班级项,学生有姓名、年龄、职业、班级4项。编程输入人员数据,项。编程输入人员数据,再以表格输出。再以表格输出。程序代码请链接:程序代码请链接:例例6_9.c6.5.3 共
12、用体的共用体的应用举例应用举例6.6 枚举类型枚举类型 6.6 枚举类型枚举类型 6.6 枚举类型枚举类型 四点说明:四点说明:6.6 枚举类型枚举类型 四点说明:四点说明:6.6 枚举类型枚举类型 四点说明:四点说明:6.7 用用typedef声明新类型名声明新类型名 1、用、用“简单且见名知意简单且见名知意”的新类型名替代已有的类型名的新类型名替代已有的类型名(1 1)替代)替代基本类型基本类型6.7 用用typedef声明新类型名声明新类型名(2 2)替代)替代结构体类型结构体类型参考程序:参考程序:type声明新类型名1、用、用“简单且见名知意简单且见名知意”的新类型名替代已有的类型名
13、的新类型名替代已有的类型名6.7 用用typedef声明新类型名声明新类型名(4 4)替代)替代指针类型指针类型(5 5)替代)替代指向函数的指针类型指向函数的指针类型(3 3)替代)替代数组类型数组类型1、用、用“简单且见名知意简单且见名知意”的新类型名替代已有的类型名的新类型名替代已有的类型名6.7 用用typedef声明新类型名声明新类型名(1)用)用typedef声明一个新的类型名的方法步骤:声明一个新的类型名的方法步骤:2、几点说明、几点说明(2)用)用typedef只是对已经存在的类型指定一个新的类型名,只是对已经存在的类型指定一个新的类型名,而没有创造新的类型。而没有创造新的类型
14、。6.7 用用typedef声明新类型名声明新类型名 2、几点说明、几点说明6.8 链表及其操作链表及其操作 6.8.1 链表链表概述概述 但数组也存在以下几个缺点:但数组也存在以下几个缺点:6.8 链表及其操作链表及其操作 6.8.1 链表链表概述概述6.8 链表及其操作链表及其操作 6.8.1 链表链表概述概述6.8 链表及其操作链表及其操作 6.8.1 链表链表概述概述6.8 链表及其操作链表及其操作 插入字符插入字符c的详细过程:的详细过程:c6.8.2 链表的链表的建立建立6.8 链表及其操作链表及其操作 6.8.2 链表的链表的建立建立6.8 链表及其操作链表及其操作 /函数参数:
15、链表的头指针函数参数:链表的头指针head6.8.3 链表的链表的输出输出6.8 链表及其操作链表及其操作 1、按按序号序号查找查找6.8.3 链表的链表的查找查找6.8 链表及其操作链表及其操作/函数参数:链表的头指针函数参数:链表的头指针head、待查找节点的序号、待查找节点的序号i/函数返回:查找成功,返回待查找节点的地址;否则,返回函数返回:查找成功,返回待查找节点的地址;否则,返回NULL 1、按按序号序号查找查找6.8.3 链表的链表的查找查找6.8 链表及其操作链表及其操作 2、按按值值查找查找/函数参数:链表的头指针函数参数:链表的头指针head、待查找节点的值、待查找节点的值
16、x、记录节点序号的指针变量、记录节点序号的指针变量pi/函数返回:查找成功,返回待查找节点的地址和序号;否则,返回函数返回:查找成功,返回待查找节点的地址和序号;否则,返回NULL。6.8.3 链表的链表的查找查找6.8 链表及其操作链表及其操作 6.8.5 链表的链表的插入插入6.8 链表及其操作链表及其操作/函数参数:链表的头指针函数参数:链表的头指针head、插入位置、插入位置 i、待插节点的值、待插节点的值 x/函数返回:插入成功,返回函数返回:插入成功,返回1;否则返回;否则返回06.8.5 链表的链表的插入插入6.8 链表及其操作链表及其操作 6.8.6 链表的链表的删除删除6.8 链表及其操作链表及其操作/函数参数:链表的头指针函数参数:链表的头指针head、待删除节点的位置、待删除节点的位置i/函数返回:删除成功,返回函数返回:删除成功,返回1;否则返回;否则返回06.8.6 链表的链表的删除删除