C语言程序设计精品PPT课件

上传人:夏日****8 文档编号:280654481 上传时间:2022-04-22 格式:PPTX 页数:57 大小:431.42KB
返回 下载 相关 举报
C语言程序设计精品PPT课件_第1页
第1页 / 共57页
C语言程序设计精品PPT课件_第2页
第2页 / 共57页
C语言程序设计精品PPT课件_第3页
第3页 / 共57页
C语言程序设计精品PPT课件_第4页
第4页 / 共57页
C语言程序设计精品PPT课件_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《C语言程序设计精品PPT课件》由会员分享,可在线阅读,更多相关《C语言程序设计精品PPT课件(57页珍藏版)》请在金锄头文库上搜索。

1、第七章 结构体与共用体高级语言程序设计高级语言程序设计本章主要内容 本章介绍:如何自己构造数据类型本章介绍:如何自己构造数据类型( (构造型数据构造型数据) )结构体内存分配函数共用体枚举类型类型定义教学目的与要求n n掌握结构体和共同体类型的说明掌握结构体和共同体类型的说明n n结构体和共用体变量的定义及初始化方法结构体和共用体变量的定义及初始化方法n n掌握结构体与共用体变量成员的引用掌握结构体与共用体变量成员的引用n n领会存储动态分配和释放领会存储动态分配和释放n n领会链表的基本概念和基本操作领会链表的基本概念和基本操作n n领会枚举类型变量的定义领会枚举类型变量的定义n n了解了解

2、TypedefTypedef的作用的作用重点与难点n n结构体的基本概念结构体的基本概念n n结构体类型及变量的定义结构体类型及变量的定义n n结构数组结构数组n n用指针处理链表用指针处理链表n n共用体及枚举类型的基本概念共用体及枚举类型的基本概念n nTypedefTypedef的基本概念的基本概念C(C+)C(C+)数据类型数据类型一、结构体1 1概述概述数数 组组 是构造类数据,其是构造类数据,其数组元素数组元素必须是同一数据类型的。必须是同一数据类型的。结构体结构体 也是构造类数据,但其也是构造类数据,但其成员成员可以是任何类型的。可以是任何类型的。 构造类型使用户可以象处理单个变

3、量一样来处理复构造类型使用户可以象处理单个变量一样来处理复杂的数据结构。杂的数据结构。 诸如学生花名册、通讯录之类的数据,最适合用结构体来处理。因为这类数据具有如下特点:每个人信息都是一个复合的构造数据,如由姓名、学号、性别、年龄、家庭住址、联系电话等“成员”组成。不同的人,数据的值不同,但都有共同的成员组成。使用结构体的一般步骤根据问题的要求定义一个结构体类型用自己定义的结构体类型定义结构体变量在程序中使用结构体变量处理问题 比较普通变量的情况:用系统给定的数据类型定义变量在程序中使用变量处理问题如何定义结构体类型? struct 结构体名 类型标识符 成员名; ; 关键字 用户指定/*st

4、ruct 结构体名合称“结构类型标识符”*/*成员表列*/*此处分号不能省略*/一个示例【例一】main() struct student int number; char name6; char sex; int age; char address20; ; 本质上,它定义了一个名为”student”的“结构体类型”(表头)。numbernumberName6Name6sexsexageageAddress20Address20小结:什么是“结构体类型”?用户自己定义的构造型数据类型由若干数据项(成员)组成同一结构体中的成员可以具有不同的数据类型注意成员定义与普通变量定义的区别: 成员定义时

5、不为其分配内存 变量定义时为其分配内存结构体类型的特点: 组成结构体的成员本身必须是一种已有定义的数据:组成结构体的成员本身必须是一种已有定义的数据:n n基本类型成员(整型基本类型成员(整型/ /字符型字符型/ /实型)实型)n n指针类型成员指针类型成员n n数组类成员数组类成员n n其他构造类成员其他构造类成员( (包括已定义的另一种结构体)包括已定义的另一种结构体)n n 注意:成员注意:成员 变量,故成员名可与变量名同名变量,故成员名可与变量名同名 n n结构体类型可以有千千万万种,表示由若干不同数据项组结构体类型可以有千千万万种,表示由若干不同数据项组 成的成的复合类型。复合类型。

6、定义结构体类型时,系统不会为该结构体分配内存(只是定义结构体类型时,系统不会为该结构体分配内存(只是定义类型,而非变量声明)定义类型,而非变量声明)2、结构体类型变量的定义 定义了以上结构体类型后定义了以上结构体类型后, ,struct studentstruct student 相当于标准数据类相当于标准数据类型关键字型关键字char, int ,floatchar, int ,float我们可以用它来定义我们可以用它来定义“ “结构体变量结构体变量” ”。 在结构体类型定义后,用在结构体类型定义后,用 struct struct 结构体名结构体名 复合词定义复合词定义 struct str

7、uct 结构体名结构体名 ; struct struct 结构体名结构体名 变量名变量名1 1,变量名,变量名2 2, 变量名变量名n;n; 如:如:struct student a,b30,*p;struct student a,b30,*p; a a 为为struct studentstruct student类型的变量类型的变量 b b 为为struct studentstruct student类型的数组(每个元素都是一个结构类型的数组(每个元素都是一个结构 体变量,都有众成员)体变量,都有众成员) p p 为指向为指向struct studentstruct student类型的指针

8、变量类型的指针变量还有两种合二为一方法 在定义结构体类型的同时定义结构体类型变量 struct 结构体名 变量名1,变量名2, 变量名n; 直接定义结构体类型变量 struct 变量名1,变量名2, 变量名n;实际使用中,还可以使用以下形式:先定义 #define STU struct student尔后 STU student1,student2;【例二】定义结构体类型【例二】定义结构体类型的同时定义结构体类型变的同时定义结构体类型变量。量。main()main() struct student struct student int number; int number; char name

9、6; char name6; char sex; char sex; int age; int age; char address20; char address20; a,b30,*p; a,b30,*p; 【例三】不定义结构体类【例三】不定义结构体类型,直接定义结构体类型型,直接定义结构体类型变量。变量。main()main() struct struct int number; int number; char name6; char name6; char sex; char sex; int age; int age; char address20; char address20;

10、a,b30,*p; a,b30,*p; 其他有关知识实际使用中,还可以使用以下形式:实际使用中,还可以使用以下形式: #define STU struct student #define STU struct student STU stu1,stu2; STU stu1,stu2; 比较一下两种变量定义方式的异同:比较一下两种变量定义方式的异同: int int a,b,ca,b,c; ; 定义三个整型变量,每个变量占二个字节,可单定义三个整型变量,每个变量占二个字节,可单独赋值。独赋值。struct studentstruct student a,b,ca,b,c; ; 定义三个结构体类型

11、变量,每个变量下有若干定义三个结构体类型变量,每个变量下有若干“ “成员成员” ”。其占用的内存长度等于各成员项长度之。其占用的内存长度等于各成员项长度之和。和。示例【例四】main() struct student int number; char name6; char sex; int age; char address20; ; printf(%dn ,sizeof(struct student); 结果: 31示例【例五】若有以下定义,则正确的赋值语句为【例五】若有以下定义,则正确的赋值语句为 。 struct complex struct complex float real; f

12、loat real; float image; float image; ; ; struct value struct value int no; int no; struct complex com; struct complex com; val1; val1;A) comA) com. .real=1; B) val1real=1; B) val1. .complexcomplex. .real=1;real=1;C) val1C) val1. .comcom. .real=1; D) val1real=1; D) val1. .real=1;real=1;答案:C).real=1 3

13、、结构体变量的初始化和赋值使一个结构体变量获得数据“值”(实际上是给其各个成员赋值)有三种方法: 定义时初始化之定义时初始化之 用赋值语句对各成员分别赋值用赋值语句对各成员分别赋值 同类型的结构体变量间相互赋值同类型的结构体变量间相互赋值 如如 student1=student2 student1=student2 示例: 定义时初始化之【例六】【例六】main() main() struct struct char name15; char name15; char class12; char class12; long num; long num; stu=Wenli,Computer,2

14、00113; stu=Wenli,Computer,200113; printf(%sn%sn%ldn,stu.name,stu.class,stu.num); printf(%sn%sn%ldn,stu.name,stu.class,stu.num); 结果:结果:WenliWenli Computer 1 Computer 1 200113 200113示例: 用赋值语句对各成员分别赋值 【例七】【例七】main() main() struct struct char name15; char name15; char class12; char class12; long num; lo

15、ng num; stu=Wenli,Computer,200113; stu=Wenli,Computer,200113; stu.name0=1; stu.name0=1; stu.class2=A; stu.class2=A; stu.num=1111; stu.num=1111; printf(%s,%s,%dn,stu.name,stu.class,stu.num); printf(%s,%s,%dn,stu.name,stu.class,stu.num); 结果:结果:1enli,CoAputer,11111enli,CoAputer,1111 示例: 用赋值语句对各成员分别赋值 【

16、例七】【例七】main() main() struct struct char name15; char name15; char class12; char class12; long num; long num; stu=Wenli,Computer 1,200113; stu=Wenli,Computer 1,200113; stu.name0=1; stu.name0=1; stu.class2=A; stu.class2=A; stu.num=1111; stu.num=1111; printf(%s,%s,%dn,stu.name,stu.class,stu.num); printf(%s,%s,%dn,stu.name,stu.class,stu.num); 结果:结果:1enli,CoAputer,11111enli,CoAputer,1111 进行所谓“结构体变量赋值”只能逐个成员进行,不能将结构体变量作为一个整体进行输入和输出。如对结构体变量stu,以下语句是错误的: scanf(“%s,%s,%ld”,stu); printf(“%s,%s,%ld”,stu);正

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

当前位置:首页 > 办公文档 > PPT模板库

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