C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型

上传人:E**** 文档编号:89343607 上传时间:2019-05-23 格式:PPT 页数:67 大小:426KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型_第1页
第1页 / 共67页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型_第2页
第2页 / 共67页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型_第3页
第3页 / 共67页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型_第4页
第4页 / 共67页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第10章结构体和其他数据类型(67页珍藏版)》请在金锄头文库上搜索。

1、第1页,第10章结构体与其它数据类型,本章概述 本章的学习目标 主要内容,第2页,本章概述,与之前学过的整型、实型及字符型等基本数据类型不同,本章即将学习的各种数据类型都需要先定义数据类型,再定义变量。 针对现实生活中描述同一事物多方面属性的需要,结构体类型可以包含多个成员,每个成员用于描述事物的某方面属性;共用体类型在形式上与结构体类型相似,所不同的是,共用体类型的各成员“共用”同一片内存单元,而结构体类型的各成员分配各自不同的内存单元 链表是一种重要的数据结构,是实现动态存储分配重要方式,也是实现诸如树、图等复杂数据结构的主要手段,与顺序结构(数组)相比,最大的优点在于,链表在删除和插入元

2、素时,不需要移动其他元素。 枚举类型因为枚举常量往往具有明确含义,故可提高程序的可读性,降低程序出错的概念 typedef用于为已有数据类型定义别名,可提高程序的可读性及通用性。,第3页,本章的学习目标,本章教学目的:理解结构体类型的概念及其应用环境,熟练掌握结构体数据类型的定义、结构体变量的定义及引用、结构体数组、掌握结构体指针,包括结构体自身及其成员的指针。理解链表的概念,使用结构体和指针定义并操作链表(单链表)。理解共用体类型的概念及其应用环境,通过与结构体类型对比的方式,掌握共用体类型的相关内容。理解枚举类型的含义,掌握枚举类型的定义和使用。理解typedef的含义,掌握typedef

3、的使用方法和技巧。 本章教学重点:结构体类型的概念及其应用 本章教学难点:链表的概念,使用结构体和指针定义并操作链表,第4页,主要内容,10.1 结构体的概念 10.2 结构体类型变量和数组 10.3 指向结构体的指针 10.4 使用指针处理链表 10.5 共用体和枚举类型 10.6 用typedef声明类型 10.7 程序设计举例,第5页,10.1 结构体的概念,在数据库中为了表示一些相关的简单数据类型,如学生的挡案、职工工资表、图书资料等,可以定义数据库中表的结构,然后根据数据库中表的结构建立若干个“记录”,形成数据库中的表文件,其中每个记录是由多项数据构成的一个集合。 C语言为了表达此类

4、问题,可使用结构体类型,并定义其变量、赋值,形成一个包含多项数据的数据单元。,第6页,例如,可以用一个结构体来描述学生,包括学号、姓名、年龄、性别、成绩等数据项。每项数据有不同的类型,类型为:学号(无符号整型)、姓名(字符数组)、性别(字符型)、年龄(整型)、成绩(单精度类型),则需要声明以下结构体类型: struct student unsigned int num; char name10; char sex; int age; float score; ; 其中struct 是结构体的关键字;student是结构体的标识符,即结构体名;num、name10、sex、age、score 等

5、是结构体成员,组成成员表列。,10.1 结构体的概念,第7页,结构体的类型声明方式为: struct 结构体名 成员表列; ; 其中各成员应进行类型说明。,struct score float score_math; float score_english; float score_computer; ; struct student unsigned num; char name10; char sex; int age; struct score class; ;,10.1 结构体的概念,结构体类型声明时应注意以下几点: (1)结构体类型声明并不引起内存分配,结构体类型变量的定义才引起内存

6、的分配。,(2) 在声明结构体类型时,允许先声明过的结构体类型作另一个结构体类型的成员,如右所示。,第8页,10.2结构体类型变量和数组,结构体变量定义有三种方法 (1) 先声明结构体类型,后定义变量 这种方法的语法格式为: struct 结构体名 成员表列; ; struct 结构体名 结构体变量表;,例如: struct student unsigned num; char name10; char sex; int age; float score; ; struct student student1,student2; 定义了student结构体类型的2个变量:student1,stu

7、dent2。,10.2.1 结构体类型变量,1结构体类型变量的定义,第9页,(2) 声明结构体类型 的同时定义变量。 一般形式: struct 结构体名 成员表列; 结构体变量表;,例如: struct student unsigned num; char name10; char sex; int age; float score; student1,student2,student3; 定义了student结构体类型的三个变量:student1,student2,student3。,10.2.1 结构体类型变量,第10页,(3) 直接定义变量 一般格式: struct 成员表列; 结构体变

8、量表;,例如: struct unsigned num; char name10; char sex; int age; float score; student1,student2,student3; 直接定义了结构体类型的三个变量student1、student2和student3。 但这种定义方式因无类型名,所以不能再定义更多的变量。,10.2.1 结构体类型变量,第11页,定义了一个结构体类型的变量后,系统就为其按结构分配相应的内存,其大小取决于结构体的具体成员,如前面所举的例子中,一个struct student的结构体类型变量应分配: num(2字节)+name(10字节)+sex

9、(1字节) +age(2字节)+score(4字节)=19字节 无论是否给每个成员赋值,它都以占据19个字节而存在。,10.2.1 结构体类型变量,第12页,2.结构体变量的初始化,结构体变量初始化是在定义变量时,指定变量各个成员的初始值。 例如: struct student unsigned num; char name10; char sex; int age; float score; student1=9805, “liliang ”,m,20,80.0;,main() static struct student unsigned num; char name10; char sex

10、; int age; float score; student2=9807,wangning”, m,19,90.0; student1为全局变量, student2为静态局部变量。,10.2.1 结构体类型变量,第13页,3.结构体成员的引用,结构体类型变量定义之后即可在程序中使用。但不像其他简单变量那样,直接使用其名,而只能对其成员进行操作,结构体成员的引用形式为: 结构体变量名.成员名 其中 “.” 为成员运算符,如: scanf(”%d,%s,%c,%d,%f”, 则是错误的,10.2.1 结构体类型变量,第14页,(1) 如果成员是另一定义过的结构体类型变量,则要用若干个成员运算符,

11、逐级找到最低一级的成员,各级成员按顺序用成员运算符连接起来。只能对最低一级成员进行赋值或运算。,struct student unsigned num; char name10; char sex; int age; struct score report; student1;,struct score float score_math; float score_english; float score_computer; ;,这里可用student1.num形式引用num这个成员,而对report这个成员,则必须用student1.report.score_math , student1.

12、report.score_english , student1. report.score_computer 形式来引用。,10.2.1 结构体类型变量 注意事项,第15页,(2) 可以像简单变量一样,对结构体成员进行运算等各种操作,且成员运算符“.”优先级最高。 (3) &student1 表示student1这个结构体变量所占的首地址,&student1.num表示成员num的地址。,10.2.1 结构体类型变量,10.2.1 结构体类型变量 注意事项,第16页,例10.1 编写程序,从键盘输入一个学生的学号、姓名、数学成绩、英语成绩、计算机成绩,然后输出学生的学号、姓名和三门课的平均成绩

13、。,10.2.1 结构体类型变量,#include struct student unsigned num; char name10 float score_math; float score_english; float score_computer ; int main() struct student st; float aver; printf(“Input number:”); scanf(“%d”,printf(“Input score of mathmatics:”); scanf(“%f”, ,第17页,10.2.2 结构体类型数组,结构体类型数组与普通数组不同之处在于,结构体

14、数组的每个数组元素都存储一组数据(各成员的数据),而普通数组的每个数组元素只存储一个数据。 与定义结构体类型变量的方法相仿,三种定义方法如下表所示。,1结构体类型数组的定义方法,第18页,2结构体类型数组成员的初始化 struct date int year; int month; int day; person2=1997,7,1,2000,8,8; 定义了数组person,数组中含有2个元素,每个元素都是struct date结构体类型,定义的同时对其成员进行了初始化。下表给出了结构体类型数组person的逻辑存储结构。,10.2.2 结构体类型数组,第19页,结构体类型数组元素也是通过数

15、组名和下标来引用的,结构体类型数组元素的引用与结构体类型变量的引用一样,也是逐级找到最低一级成员,对最低一级成员进行赋值或运算。引用形式为: 数组名下标.成员名 可用如下形式来引用数组元素: person1.year=2000; person1.month=person0.month+1; person1.day=6+2;,10.2.2 结构体类型数组,3结构体类型数组元素的引用,第20页,例10.2 编写程序,从键盘输入6个学生的信息(包括:学号、姓名、年龄、成绩),然后输出所有6个学生的信息,输出年龄和成绩的平均值。,10.2.2 结构体类型数组,# include # define N

16、6 struct student unsigned num; char name15; int age; float score; ; int main() int i; float x, average=0.0, averscore=0.0; struct student stN;,for(i=0;iN;i+) printf(“Input number:”); scanf(“%d”, /*计算成绩的总和*/ ,/*计算平均值*/ average=average/N; averscore=averscore/N; for(i=0;iN;i+) printf(“Number=%d, ”, sti.num); printf(“Name=%s, ”, sti.name); printf(“Age=%d, ”,sti

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

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

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