1 / 21

第九章 结构体

第九章 结构体. 学习目标. 掌握结构体类型的概念和声明结构体类型的方式 掌握结构体类型变量 掌握访问结构体类型成员 掌握使用结构体处理实际问题. 问题提出:. 学生是一个由学号、姓名、性别等 属性 组成的整体,如何用一种数据类型来描述学生呢?. 问题分析:. 学生的学号、姓名、性别等属性,都可以用基本数据类型来描述,如: 学号可以表示为 char acNum[15]; 姓名可以表示为 char acName[20]; 成绩可以表示为 float fScore;

elton
Download Presentation

第九章 结构体

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章结构体

  2. 学习目标 • 掌握结构体类型的概念和声明结构体类型的方式 • 掌握结构体类型变量 • 掌握访问结构体类型成员 • 掌握使用结构体处理实际问题

  3. 问题提出: • 学生是一个由学号、姓名、性别等属性组成的整体,如何用一种数据类型来描述学生呢?

  4. 问题分析: • 学生的学号、姓名、性别等属性,都可以用基本数据类型来描述,如: • 学号可以表示为char acNum[15]; • 姓名可以表示为char acName[20]; • 成绩可以表示为float fScore; • 如果这些变量彼此独立,是不能描述学生这个整体的。我们如何将不同类型但彼此都属于同一个整体的信息表示出来呢? • 结构体为我们提供了解决方案。

  5. 结构体类型的定义 • 定义的一般形式: struct <结构名> {成员列表 }; • 例如: struct tagStudent_t /*类型定义*/ { char acNum[15]; /*学号为字符串*/ char acName[20]; /*姓名为字符串*/ float fScore; /*成绩为浮点型*/ };

  6. 模仿练习: 学生的学号、姓名、性别、年龄、家庭住址、成绩定义为一个学生结构体。

  7. 结构体类型定义总结 • 定义结构体的目的:将一些相关类型定义在一个整体里。 • 结构体类型用一片连续的存储空间存放不同类型的成员,结构体成员和普通变量的存储方式、运算规则相同。 • 结构体成员允许为各种类型,包括结构体类型,但不允许嵌套定义(不允许在定义结构体时,该结构体的成员变量定义结构体)。

  8. 问题提出: 定义了学生类型的结构体,如何使用这种类型呢?

  9. 15B 20B 4B 4B 问题分析: • 结构体类型的使用方法和其他基本类型一样,也必须定义结构体变量,才能使用。 • 上例学生类型的变量存储空间表示如下: acNum acSex acName fScore

  10. 结构体变量说明和引用 • 常用的说明方式: • (1)定义后说明。 • 根据上面定义有: struct tagStudent_t stStu1,stStu2; • (2)在定义的后面说明。 • 在定义的分号前放上stStu1,stStu2 • (3)在定义后说明可以省略结构体名。

  11. 结构体变量说明和引用 • (4)利用重命名类型说明 如: • typedef struct tagStudent_t • { • … • }Student_t; • Student_t stStu1,stStu2; • 结构体变量的引用:结构体变量名.成员名 例:stStu1.sex='f';

  12. 结构体变量举例 定义学生类型结构体,并为一个学生的各项值赋值并输出 #include <stdio.h> struct tagStudent_t /*结构体类型定义*/ { char acNum[15]; char acName[20]; char acSex[4]; int iAge; }; void main( ) { struct tagStudent_t stStu1; /*定义结构体stu,说明s1为结构体变量*/ strcpy(stStu1. acNum,“20030311”); strcpy(stStu1. acName,"xiaomin"); strcpy(stStu1. acSex,”男”); stStu1.iAge=20; printf("Number=%s\nname=%s\n", stStu1.acNum, stStu1.acName); printf("sex=%s\nage=%d", stStu1.acSex, stStu1.iAge); }

  13. 结构体变量举例

  14. 模仿练习: • 定义学生结构体,成员包括学号、姓名、性别、年龄、两门功课的成绩,定义结构体变量并为该结构体变量赋值,然后输出所有信息。

  15. 结构体变量总结 • 说明一个变量类型为结构体类型,必须先有结构体的定义,才能有该类型的变量。在使用结构体类型名定义时,不能把struct漏掉。如 • tagStudent_t stStu1,stStu2;为非法定义。 • 结构体变量的引用:结构体变量名.成员名 • 结构体每个成员变量必须单独赋值和使用,不允许对结构体变量整体赋值,除了定义时(结构体变量的初始化),不允许将一个结构体变量赋值给另一个结构体变量。

  16. 案例1(项目)提出:在学生成绩管理系统中,学生信息如何定义?案例1(项目)提出:在学生成绩管理系统中,学生信息如何定义? • 在学生成绩管理系统中,我们知道,学生信息由很多项组成,比如:学号,姓名,各科成绩,总分和平均分,而其中各科成绩又有多个数据。 • 我们可以通过结构体类型来进行学号,姓名,各科成绩,总分和平均分的定义,然后再用数组类型定义各科成绩。

  17. 案例1(项目)实现 /*定义学生结构体*/ typedef struct tagStudent_t { char no[11]; /*学号*/ char name[20]; /*姓名*/ int score[MAXSUB];/*各科成绩*/ int sum; /*总分*/ float average; /*平均分*/ }Student;

  18. 讨论 • 结构体类型定义后还需要定义结构体变量吗? • 输入输出结构体变量成员怎么表示?

  19. 结论1—结构体类型与变量的区别 • 结构体类型必须先定义,才有变量定义。 • 定义了结构体类型不分配存储空间,作用类似int等基本数据类型。 • 定义结构体类型后必须定义该类型的变量,才分配存储空间,该存储空间的大小和结构由结构体类型确定。 • 不能对结构体类型进行引用,结构体变量可引用。 例如: Student_t.acNum是非法的,而stStuu1.acNum是合法的。

  20. 结论2—输入输出结构体变量成员怎么表示? • 结构体成员变量的引用方式为: 结构体变量名.成员变量名 • 输入输出的方式根据成员变量的类型进行格式控制,其方法与普通变量相同

  21. 学以致用 • 根据对学生基本信息的数据类型定义为结构体,扩展到对教师信息(姓名、年龄、工龄、工号、工资等信息)定义为结构体,对学校信息(地址、名称、占地面积、类型、教职工人数、在校学生总数、部门个数等)定义为结构体等等 。

More Related