西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举

上传人:zjm****gmk 文档编号:295537190 上传时间:2022-05-20 格式:PPT 页数:88 大小:628KB
返回 下载 相关 举报
西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举_第1页
第1页 / 共88页
西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举_第2页
第2页 / 共88页
西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举_第3页
第3页 / 共88页
西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举_第4页
第4页 / 共88页
西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举》由会员分享,可在线阅读,更多相关《西南交通大学希望学院《C语言程序设计》课件-第9章 结构体、共用体与枚举(88页珍藏版)》请在金锄头文库上搜索。

1、第第9章章 结构体、共用体与枚举结构体、共用体与枚举 用用户户定定义义类类型型结结构构体体、共共用用体体和和枚枚举举类类型型,包括它们的定义、变量的说明和应用。包括它们的定义、变量的说明和应用。 结结构构体体类类型型:结结构构体体数数组组和和指指针针、结结构构体体变变量量和和指指针针作作为为函函数数参参数数、返返回回结结构构体体类类型型数数据据的的函函数数、动动态态内内存存分分配配、链链表表;类类型型定定义义符符typedef; 了了解解结结构构体体、共共用用体体和和枚枚举举类类型型数数据据的的特特点点,熟熟练练掌掌握握结结构构体体类类型型、变变量量、数数组组、指指针针变变量量的的定定义义、初

2、初始始化化和和成成员员的的引引用用方方法法;掌掌握握共共用用体体和和枚枚举举类类型型、变变量量的的定定义义和和引引用用;掌掌握握用用户户自自定定义义类型的定义和使用。类型的定义和使用。 西南交通大学希望学院C语言程序设计9.1结构体结构体【问题】什么是结构体类型?什么是结构体变量?结【问题】什么是结构体类型?什么是结构体变量?结构体类型与数组类型有什么区别和联系?构体类型与数组类型有什么区别和联系? 姓名姓名年龄年龄 性别性别身份身份证号证号民族民族住址住址电话电话号码号码(字符数组字符数组)(整型整型)(字符字符)(长整型长整型)(字符字符)(字符数组字符数组)(长整型长整型)9.1.1 结

3、构体类型的定义结构体类型的定义结构体类型的定义形式为:结构体类型的定义形式为:struct 类型类型名名成员项表列成员项表列;例如包含上图中全部类型数据的结构体类型的定义如下:例如包含上图中全部类型数据的结构体类型的定义如下: struct person /* 结构体类型名结构体类型名 */ char name20; /* 以下定义成员项的类型和名字以下定义成员项的类型和名字 */ int age; char sex; long num; char nation; char address20; long tel;9.1.2 结构体变量的说明结构体变量的说明结构体变量的说明有三种方法:结构体变

4、量的说明有三种方法:1.用已定义的结构体类型名定义变量。用已定义的结构体类型名定义变量。 例如:例如: struct person student,worker; /* 定义了两个结构体变量定义了两个结构体变量student和和worker */ 用上面的结构体类型还可再定义变量:用上面的结构体类型还可再定义变量: struct person men,women;2.在定义结构体类型的同时定义结构体变量。例如:在定义结构体类型的同时定义结构体变量。例如: struct person char name20; int age; long tel; student,worker;一般的形式为:一般

5、的形式为: struct 类型名类型名 成员项表列成员项表列 变量名表列;变量名表列;这样定义的结构体类型也还可多次使用,如:这样定义的结构体类型也还可多次使用,如: struct person men,women;9.1.2 结构体变量的说明结构体变量的说明3.不定义结构体类型名,直接定义结构体变量。不定义结构体类型名,直接定义结构体变量。一般形式为:一般形式为:struct 成员项表列成员项表列变量名表列;变量名表列; 9.1.2 结构体变量的说明结构体变量的说明9.1.3 结构体变量的初始化结构体变量的初始化 在以上结构体变量的三种定义的同时都可以进行初始化在以上结构体变量的三种定义的同

6、时都可以进行初始化赋值,例如:赋值,例如:struct person stud1=Wang Li,18, M,34011, h,12,13 Bejing Road,2098877,stud2=Yu Ping,19, F,34082, h,12,25 Hefei Road,5531678; 注意初始化数据应与类型中的各个成员在位置上一一对注意初始化数据应与类型中的各个成员在位置上一一对应。对于嵌套的结构体类型变量,初始化是对各个基本类型应。对于嵌套的结构体类型变量,初始化是对各个基本类型的成员赋初值,例如:的成员赋初值,例如:struct person student=Wang Li,12,5,

7、1974,M,340201,h,12,13 Bejing Road,2098877;9.1.4 结构体变量的引用结构体变量的引用1.引用结构体成员引用结构体成员 在在无无嵌嵌套套的的情情况况下下,引引用用结结构构体体变变量量成成员员的的形形式式为:为: 结构体变量名结构体变量名成员名成员名 其中的其中的“.”叫叫“结构体成员运算符结构体成员运算符”,这样引,这样引用的结构体成员相当于一个普通变量用的结构体成员相当于一个普通变量 ,例如:,例如: student.num /* 结构体变量结构体变量student的成员的成员num,相当于一个长整型变量相当于一个长整型变量 */ student.n

8、ame /* 结构体变量结构体变量student的成员的成员name,相当于一个字符数组名相当于一个字符数组名 */ 在在有有嵌嵌套套的的情情况况下下,访访问问的的应应是是结结构构体体的的基基本本成成员员,因因为为只只有有基基本本成成员员直直接接存存放放数数据据,且且数数据据是是基基本本类类型型或或上上面面介介绍绍的的数数组组类类型型,引引用用形形式式为:为: 结构体变量名结构体变量名结构体成员名结构体成员名结构体成员名结构体成员名基本成员名基本成员名 即即从从结结构构体体变变量量开开始始,用用成成员员运运算算符符“.”逐逐级级向向下下连连接接嵌嵌套套的的成成员员直直到到基基本本成成员员,不不

9、能能省省略,例如:略,例如: student.birthday.year /* 基本成员基本成员year ,相当于一个整型变量相当于一个整型变量 */ 9.1.4 结构体变量的引用结构体变量的引用2.结构体变量的赋值、输入和输出结构体变量的赋值、输入和输出 由于结构体各个成员的类型不同,对结构体变量由于结构体各个成员的类型不同,对结构体变量赋值也只能对其成员进行赋值也只能对其成员进行 结构体变量的输入和输出也都只能对其成员进行结构体变量的输入和输出也都只能对其成员进行 3.同一类型的结构体变量可相互赋值同一类型的结构体变量可相互赋值 同类型的两个结构体变量之间可以整体赋值同类型的两个结构体变量

10、之间可以整体赋值(请比较(请比较数组之间不能整体赋值)数组之间不能整体赋值) stud1=stud2; 9.1.4 结构体变量的引用结构体变量的引用【例【例9-19-1】输出结构体数据】输出结构体数据#include main() struct person char name20; struct int month; int day; int year;bd; char sex; long num;st=Wang Li,12,15,1974, M,340201;printf(%s,%d,%d,%d, ,st.name,st.bd.year,st.bd.month,st.bd.day);pri

11、ntf(%c,%ldn,st.sex,st.num); 9.1.5 结构体数组结构体数组1.结构体数组的定义结构体数组的定义 有三种方法。有三种方法。(1) 先先定定义义结结构构体体类类型型,用用结结构构体体类类型型名名定定义义结结构构体体数数组,如:组,如:struct stud_typechar name20; long num; int age; char sex; float score;struct stud_type student50;9.1.5 结构体数组结构体数组(2) 定义结构体类型名的同时定义结构体数组,如:定义结构体类型名的同时定义结构体数组,如:struct stud

12、_typestudent50;(3) 不定义结构体类型名,直接定义结构体数组,如:不定义结构体类型名,直接定义结构体数组,如:structstudent50;2.结构体数组的初始化结构体数组的初始化 结构体数组的一个元素相当于一个结构体变量,结构体数组的一个元素相当于一个结构体变量,结构体数组初始化即顺序对数组元素初始化。结构体数组初始化即顺序对数组元素初始化。 如:如:struct stud_type student3= Wang li,80101,18,M,89.5, Zhang Fun,89102,19,M,90.5, Li Ling,89103,20,F,98 ; 9.1.5 结构体数

13、组结构体数组9.1.5 结构体数组结构体数组3.结构体数组的引用。结构体数组的引用。 (1) 除除初初始始化化外外,对对结结构构体体数数组组赋赋常常数数值值、输输入入和和输输出出、各各种种运运算算均均是是对对结结构构体体数数组组元元素素的的成成员员(相相当当于于普普通通变变量量)进进行行的的。结结构构体体数数组组元元素素的的成员表示为:成员表示为:结构体数组名结构体数组名下标下标.成员名成员名在嵌套的情况下为:在嵌套的情况下为:结构体数组名结构体数组名下标下标结构体成员名结构体成员名结构体成结构体成员名员名成员名成员名 (2) 结构体数组元素可相互赋值结构体数组元素可相互赋值例如:例如:stu

14、dent1=student2;对对于于结结构构体体数数组组元元素素内内嵌嵌的的结结构构体体类类型型成成员员,情情况况也相同。如:也相同。如: student2.birthday=student1.birthday; (3) 其他注意事项也与结构体变量的引用相同,例如:其他注意事项也与结构体变量的引用相同,例如:不允许对结构体数组元素或结构体数组元素内嵌的结不允许对结构体数组元素或结构体数组元素内嵌的结构体类型成员整体赋(常数)值;不允许对结构体数构体类型成员整体赋(常数)值;不允许对结构体数组元素或结构体数组元素内嵌的结构体类型成员整体组元素或结构体数组元素内嵌的结构体类型成员整体进行输入输出

15、等。进行输入输出等。 9.1.5 结构体数组结构体数组9.1.5 结构体数组结构体数组在在处处理理结结构构体体问问题题时时经经常常涉涉及及字字符符或或字字符符串串的的输输入入,这时要注意:这时要注意:scanf()函函数数用用%s输输入入字字符符串串遇遇空空格格即即结结束束,因因此输入带空格的字符串可改用此输入带空格的字符串可改用gets函数。函数。在输入字符类型数据时往往得到的是空白符(空在输入字符类型数据时往往得到的是空白符(空格、回车等),甚至运行终止,因此常作相应处理,格、回车等),甚至运行终止,因此常作相应处理,即在适当的地方增加即在适当的地方增加getchar();空输入语句,以消

16、空输入语句,以消除缓冲区中的空白符。除缓冲区中的空白符。 【例【例9-2】输入】输入3个学生的信息然后输出。每个学个学生的信息然后输出。每个学生的信息包括学号、姓名和生的信息包括学号、姓名和4门课程的成绩门课程的成绩#include main()struct stu_type long num; char name20; float score4; st3; int i, j;float t; printf(Enter students datas:n); for(i=0; i3; i+)scanf(%ld,&sti.num); getchar(); gets(sti.name);【例【例9-2】for(j=0; j4; j+) scanf(%f,&t); sti.scorej=t; printf(No.ttNamettScore1tScore2tScore3tScore4n);for(i=0; i3; i+)printf(%ldt%st,sti.num,sti.name); for(j=0; jnum第二种表示与第一种表示等价,运算符第二种表示与第一种表示等价,运算符“-”与与“.”

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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