第9章 结构体与枚举类型.ppt_第1页
第9章 结构体与枚举类型.ppt_第2页
第9章 结构体与枚举类型.ppt_第3页
第9章 结构体与枚举类型.ppt_第4页
第9章 结构体与枚举类型.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章结构与枚举类型,【主要内容】,掌握结构体的概念、结构体的定义、初始化、结构体变量的引用、结构体数组的运用、学会使用结构体类型的数据,解决实际问题。,【学习重点】,结构数组。,第一节 结构体变量,第二节 结构体数组,第三节 枚举类型,第9章结构与枚举类型,第一节 结构体变量,什么是“结构体”呢?,就像自定义函数一样,C语言也提供了一种方法让程序员自己定义数据类型,这就是“结构体”。,第一节 结构体变量,一、结构体规则,1结构体类型的定义,结构体是一种新数据类型,属构造类型,它由若干类型各异的“成员”组成;描述这些“成员”可以使用任何基本数据类型,甚至是另外一种构造数据类型都行。,打个比方,

2、我们定义一种结构类型(person)描述青年,青年由几个基本属性(即成员)决定(name,color,sex,age等),我们可以用这个结构类型person去定义一个具体的青年人zhangshan 。,该怎么定义?,第一节 结构体变量,定义结构类型使用关键字“struct”。,struct person char name20; /* 定义姓名 */ char color10; /* 定义肤色 */ char sex2; /* 定义性别 */ int age; /* 定义年龄 */ ; /* 注意这里有分号 */ struct person zhangshan, class_one100;,定

3、义了结构类型person,并用该类型定义结构变量zhangshan和结构数组class_one100。,第一节 结构体变量,你来试试!,定义一个商品结构类型goods,设商品包含属性有:商品名、商品代码、厂商、单价、质量。,struct goods char goodsname15; char goodcode15; char companyname30 ; float price, weight ; ;,第一节 结构体变量,综上,结构体类型简称为结构类型,其定义格式为:,struct 类型 成员1; 类型 成员2; ;,第一节 结构体变量,2结构体类型变量的定义,结构体变量简称为结构变量,它

4、由结构类型定义,有三种定义方法。, 先定义结构类型,再定义结构变量,struct book /* 定义结构体类型 */ char bookname20; float price; char publisher20; char author10; ; struct book mybook, storybook;,用这种方法定义结构变量,是最常用的方法,但不能省略关键字“struct”。, 定义结构类型的同时定义结构变量,struct book /* 定义结构体类型 */ char bookname20; float price; char publisher20; char author10;

5、struct book mybook, storybook;,第一节 结构体变量, 不定义结构体名,直接定义结构变量,struct /* 不定义结构体名 */ char bookname20; float price; char publisher20; char author10; struct book mybook, storybook;,第一节 结构体变量,补充说明: 当某结构类型的成员又是另外一个结构类型时,称嵌套定义。,struct brith_date int month ; int day ; int year ; ; struct char name10 ; char add

6、ress30; char tel12; int age; struct data birth_day; char sex3; student_01, employee;,定义了student_01和employee两个变量,但是没有定义此结构体的名字,因此不能再定义与student_01和employee同类的其它结构变量了!,第一节 结构体变量,提示:,成员名可以与程序中的其它变量名相同,两者有不同的从属关系,系统并不会混淆;,编程时,常用“sizeof(struct 结构名 结构变量名)”计算得出。,结构体类型是抽象的,它仅告诉系统这个类型由那些类型的成员构成,它并不占内存空间;结构体变量

7、是具体的,它占有一片连续的内存空间,空间大小是所有成员变量所占的字节数的总和。,第一节 结构体变量,3访问结构体变量成员的方法,对结构体成员的访问要用成员运算符“”,成员运算符虽然写法同小数点,但是完全没有小数点的含义。,在C运算符中,它与括号一样有最高的优先级。,如果一个结构体内又嵌套了一个结构体类型,则访问一个成员时,应采取从外到内、逐级访问的方法,直达要访问的成员为止。,例如: employee. age = 18; gets(employee. name);,第一节 结构体变量,【例9-1】分析以下代码及输出结果。,源代码: /* 例9-1,9-1.c */ #include #inc

8、lude struct curriculum char curname30 ; float curgrade; ;,struct student char name8 ; char stuid10 ; char department30 ; char semester10; struct curriculum course; stu1 = lihong, 200133420, computerdepartment, 200609, Clanguage, 87 ; /* stu1为全局变量,并在定义stu1时初始化成员 */,第一节 结构体变量,void main( ) struct stude

9、nt stu2; printf(“Enter stu2s information: n”); gets(); /* 从键盘输入数据初始化stu2 */ gets(stu2.stuid); gets(stu2.department); gets(stu2.semester); gets(stu2.course.curname); scanf(%f, ,第一节 结构体变量,运行输出:,liuliting 20060205 electronComputer 200703 English 76 lihong 200133420 computerdepartment 200609 Cl

10、anguage 87.000000 liuliting 20060205 electronComputer 200703 English 76.000000,第一节 结构体变量,【思考验证】 结构体类型、结构变量类型、结构体成员类型三者之间有无联系?,第一节 结构体变量,二、结构体的指针,如果一个指针变量存放的是结构体变量在内存中的地址,则该指针变量称为结构指针。通过指针访问结构体成员用“-”符号,它由一个减号和一个大于符号组成。 可以通过指针变量引用它所指向的结构体变量成员的值。,第一节 结构体变量,【例9-2】 分析以下代码及输出结果。,源代码: /* 例9-2,9-2.c */ #inc

11、lude #include struct curriculum char curname30 ; float curgrade; ;,第一节 结构体变量,void main( ) struct student sst ; struct student *ptrst1 = ,第一节 结构体变量,运行输出:,Enter the pionter ptrs information : zenqiong 200302043 EnglishDepartment 200503 English 68 Thet stu1s information is : zhangcheng 200333067 Comput

12、erDepartment 200409 JAVALanguage 87.000000 Thet ptrs information is : zenqiong 200302043 EnglishDepartment 200503 English 68.000000,第一节 结构体变量,【思考验证】 访问某个结构体变量的成员可以用运算符“.”或者“-”,这两个运算符分别在那种情况下用使用,它们的区别是什么?,【融会贯通】 把你自己的信息定义一个嵌套的结构体类型,包括:姓名、性别、生日、籍贯、家庭住址、联系方式等;其中,生日是结构体类型,包括:出生年、月、日;然后定义一个此类型的指针变量,用指针的方

13、法初始化此变量,并输出。,第一节 结构体变量,课堂练习9.1,1.定义一个水果结构体类型,包括水果名称、颜色、形状、味道、水分含量、矿物质含量、产地等。 2.接上题,输入N个水果的信息,统计其中红色水果的个数。,第一节 结构体变量,第二节 结构体数组,还记得以前学过的“数组”吗?,如果有多个相同结构体类型变量,逐个对其操作很不方便;因为数组是相同变量的集合,可以把多个相同结构体变量定义成一个结构体数组。,结构体数组中的每个元素都是该类型的一个结构体变量。,第二节 结构体数组,先定义结构体,再定义结构体数组。,struct curriculum char curname30 ; float cu

14、rgrade; ; struct student /* 定义结构体类型 */ char name15 ; char stuid10 ; char department30 ; char semester10; struct curriculum course; ; struct student varstu20 ; /* 定义结构体数组 */,定义结构体数组,第二节 结构体数组,假设结构体数组varstu20的内容如下图所示。,第二节 结构体数组,对结构体数组varstu20 的初始化如下: int i; for ( i = 0; i 20; i+ ) printf( 输入第 %d 名学生的姓

15、名 : n, i + 1); scanf(%s, ,第二节 结构体数组,当信息量不是太大时,也可以在定义结构体数组时初始化。,struct curriculum char curname30 ; float curgrade; ; struct student /* 定义结构体类型 */ char name15 ; char stuid10 ; char department30 ; char semester10; struct curriculum course; varstu3 = “ maomao”, “200502067”, “ computer”, “200503”, “C”, 6

16、8 , “ zhanglina”, “20050307” , “ electornr ”, “200503”, “C”, 78 , “ liuhai”, “20050467” , “ mathematics ”, “200503”, “C”, 82 ;,第二节 结构体数组,【例9-3】 简易学生成绩管理系统,设学生成绩表如图9-3,要求输入N位学生信息后,能输出每位学生的平均分、最高分,最后按学生成绩平均分降序排列后输出,并将原始数据存储到磁盘文件stu_grade.txt中。,第二节 结构体数组,【简要分析】 先定义符合题意要求的结构体类型,因为学生人数可能很多,所以可以考虑定义结构体数组,

17、本例中的课程已经给定,所以可以直接按固定顺序输入相应课程的成绩即可。, 设置环境; 定义结构体类型; 定义结构体类型数组变量; 初始化结构体数组; 计算每位学生的平均分、最高分; 按学生成绩平均分降序排列后输出,并写入文件; 结束,用自然语言描述程序逻辑:,第二节 结构体数组,参考源代码: /* 例9-3,9-3.c */ #include #include #define N 5 /* 学生数量 */ struct student char name15 ; int maths, java, asp; int aver_grade, max_grade; ;,/* 请自己完成以下三个函数 *

18、/ void average( struct student var ) void maxgrade( struct student var ) void output( struct student var ) void initialize( struct student var ) int i; for(i = 0; i N; i+ ) printf(请输入学生姓名: n ); scanf(%s, ,第二节 结构体数组,void writefile( struct student var ) int i; char ch=n; FILE *fp; if( (fp=fopen(E:stu_

19、grade.txt, w) != NULL ) for(i = 0; i N; i+ ) fwrite( ,void main( ) struct student stu5; initialize(stu); writefile(stu); ,提示:,结构体数组名作函数实参是“地址传递”方式的函数调用。,结构体变量作函数实参是“值传递”方式的函数调用。,结构体变量成员作函数实参是“值传递”方式的函数调用。,【思考验证】 请不用结构数组,仅用以前一般数组的方法编写本例代码。,【融会贯通】 对本例,找出每门课程的平均分和最高分,最后按学生姓名排序后输出。,第二节 结构体数组,课堂练习9.2,1.编

20、码实现一个“简单的生活计费系统”,把你每个月的收入和支出计一个流水帐;如:电话费、生活费、资料费、交通费、旅游费、勤工俭学费等等。 2.设计一个“学生档案记录系统”,把你们班所有同学的档案都记录在这个系统中,并能够添加、修改、删除等操作;学生的档案内容有:姓名、学号、入学时间、籍贯、出生年月、家庭住址、联系方式、奖励情况等。 3.编写一个简单的会议记录薄,记录每次会议的参与人员、开会时间、记录人、会议提要、发言人及简要内容等信息。,第二节 结构体数组,第三节 枚举类型,虽然枚举数据类型在形式上与结构体类型相似,但是两者在本质上是不同的。,枚举数据类型就是指这种类型变量的值被限定在一个有限的范围

21、内。,例如:性别只能是“男”或“女”;星期只有 “星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期天”七个值之一,等等。,第三节 枚举类型,一、枚举类型定义,枚举类型的定义和枚举类型变量的定义与上节的结构体类型相似。,声明枚举类型用关键字“enum” 。,枚举类型定义格式:,enum 枚举类型名 枚举表; ; enum 枚举名 枚举变量名列表;,enum weekday sun, mon, tue, wed, thu, fri, sat ; enum weekday week ;,第三节 枚举类型,二、枚举变量的引用,枚举变量定义后可以直接使用:,enum color red=1, blue, black, whi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论