c语言计算机二级结构体和共用体

上传人:san****019 文档编号:71022247 上传时间:2019-01-19 格式:PPT 页数:49 大小:391.51KB
返回 下载 相关 举报
c语言计算机二级结构体和共用体_第1页
第1页 / 共49页
c语言计算机二级结构体和共用体_第2页
第2页 / 共49页
c语言计算机二级结构体和共用体_第3页
第3页 / 共49页
c语言计算机二级结构体和共用体_第4页
第4页 / 共49页
c语言计算机二级结构体和共用体_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《c语言计算机二级结构体和共用体》由会员分享,可在线阅读,更多相关《c语言计算机二级结构体和共用体(49页珍藏版)》请在金锄头文库上搜索。

1、第8章 结构体和共用体,学习目标,掌握结构体类型、结构体变量、结构体数组的定义 掌握结构体变量指针、结构体数组元素指针等基本概念 掌握结构体指针的声明、初始化、赋值及引用 了解共用体类型的定义、共用体变量的声明、赋值及使用 了解枚举类型的定义、枚举类型变量的声明、赋值及使用 理解typedef的功能,8.1 结构体,数组中各元素是属于同一个类型。 若要将不同类型的数据组合成一个有机的整体,例如:姓名、年龄、性别、成绩组合为一个组合项,C用结构体来建立这种数据结构。,8.1.1 结构体类型,一个结构体类型可以由若干个被称为成员(或域)的成分组成。 每个成员具有自身的名字和数据类型,同一结构中的成

2、员名不能相同。例如一个学生的信息,它包括以下5项: (1) 学号:用5位数字表示,长整型; (2) 姓名:用汉语拼音表示,最多20个字符; (3) 性别:用M或F表示,分别表示男或女; (4) 生日:如19881015,表示年月日; (5) 地址:用字符数组表示,最多30个字符。,8.1.2 结构体类型的声明,一个结构体类型的一般形式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;,例如: struct stu long int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ uns

3、igned long birthday; /* 生日 */ char addr30; /* 地址 */ ;,说明:,(1) 结构体声明描述了结构体的组织形式,但在编译时并不为它分配存储空间。 (2) 结构体的成员可以是简单变量、数组、指针、结构体或共用体等。 (3) 结构体不可嵌套定义,但可以嵌套使用,例如: struct date int day; char month4; int year; ; struct student long int num; char name20; char sex; struct date birthday; /* 结构体成员是另一种结构类型,结构体在此嵌套

4、 */ char *addr; ;,嵌套结构体student的逻辑结构,(4) 结构体声明可以在函数内部,也可以在函数外部。 (5) 定义结构体类型时,注意不能遗漏最后的分号。,8.1.3 结构体变量,一、结构体变量的定义 可以采取以下三种方法定义结构体类型变量。 1在声明结构体类型的同时定义变量。例如: struct student long int num; char name20; char sex; int age; float score; s1,s2,s3;,声明结构体类型的同时定义结构体变量的一般形式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名

5、n 成员名n; 变量名,变量名,变量名m; 特点:定义一次结构体变量之后,在该定义之后的任何位置仍可用该结构体类型来定义其它结构体变量。,2直接定义结构类型变量 例如: struct long int num; char name20; char sex; int age; float score; stu1,stu2,stu3;,直接定义结构体变量的一般形式为: struct 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 变量名,变量名,变量名m; 特点:由于在struct后不出现结构体名,故不便于在源程序的其他地方定义该类型的新变量。,3先声明结构体类型再定义变量名 例

6、如: struct student long int num; char name20; char sex; int age; float score; ; struct student stu1,stu2,stu3;,一般形式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ; struct 结构体名 变量名,变量名,变量名m; 特点:在该定义之后的任何位置,不仅可用该结构体类型来定义其他结构体变量,而且可把其结构体声明部分作为文件存放起来,这样就可借助于include命令把它复制到任何源文件中,用以定义同类型的其它结构体变量。,注意:,(1)

7、定义一定要在结构体声明之后或与结构体声明同时进行,对尚未声明的结构体类型,不能用它来定义结构体变量。 (2) 存储空间分配是按照其对应的各成员项的定义顺序进行的。 (3) 同一结构类型的每个结构体变量,存储空间的大小都相同,是各成员项所占空间之和。例如: sizeof(stu1)的值为31; sizeof(struct student)的值为31; sizeof(float)的值为4。 (4) 结构体变量中的成员可以单独使用,地位与一般变量相同。 (5) 结构体变量一般不用register型。,二、结构体变量的初始化,struct student long int num; char name

8、20; char sex; char addr20; stu1,stu2=89031,“Lilin“,M,“123 Beijing Road“; /* 结构体变量stu2初始化 */,三、结构体变量的引用,形式: 结构体变量名成员名 #include void main() struct student long int num; char name20; char sex; char addr20; stu1,stu2=89031,“Lilin“,M,“123 Beijing Road“; /* 结构体变量stu2初始化 */ printf(“NO.:%ldnname:%snsex:%cna

9、ddress:%sn“,stu2.num,stu2.name,stu2.sex, stu2.addr); stu1=stu2; /* 两个相同类型的结构体变量之间可以进行赋值操作 */ printf(“NO.:%ldnname:%snsex:%cnaddress:%sn“,stu1.num,stu1.name,stu1.sex, stu1.addr); ,注意: (1) 不能将一个结构体变量作为一个整体进行输入和输出。例:scanf(“%ld%s%c%s“, (4) 如果成员本身又属一个结构体类型,则要逐级地找到最低的一级成员。只能对最低级的成员进行存取。,8.2 结构体数组,8.2.1 结构

10、体数组的定义,1定义结构体类型后定义结构数组。例如: struct student long int num; char name20; char sex; int age; float score; ; struct student stu5;,2直接定义一个结构数组。 例如: struct student long int num; char name20; char sex; int age; float score; stu5;,或 struct long int num; char name20; char sex; int age; float score; stu5;,8.2.2

11、 结构数组的初始化,格式: struct 结构体名 结构数组名元素个数=初始数据; struct student stu3=80101,“Lilin“,M,18, 80102,“Wanglan“,F,19,80103,“Zhangjun“,F,20; struct student stu =80101,“Lilin“,M,18, 80102,“Wanglan“,F,19,80103,“Zhangjun“,F,20;,struct student long int num; char name20; char sex; int age; stu = 80101, “Lilin“,M,18, 80

12、102, “Wanglan“,F,19, 80103, “Zhangjun“,F, 20;,8.2.3 结构数组元素的引用,形式: 结构体数组名下标成员名 例如 stu0.num=80101; strcpy(stu0.name,“Lilin“);,例:统计全班男女生人数及1990年以后(含1990年)出生的人数。 #include “string.h“ #include “stdio.h“ void main() struct stud /* 定义一个结构stud ,包含3个成员 */ char name20; /* 姓名 */ char sex; /* 性别 */ int year; /*

13、出身年份 */ ; struct stud class100; /* 定义一个结构数组class */ int m_num=0,f_num=0,total90=0,class_num,i ; printf(“Please enter class_num: “); scanf(“%d“, ,for(i=0;i=1990) total90+; /* 统计90以后出生的人数 */ printf(“n number of boy: %d“,m_num); printf(“n number of girl: %d“,f_num); printf(“n number after of 1990: %d“,

14、total90); ,测试数据与运行结果: 输入:Please enter class_num: 3 Please enter name/sex/year: Zhanglin m 1988 Please enter name/sex/year: Wangpin f 1990 Please enter name/sex/year: Liutao M 1989 输出:Zhanglin m 1988 Wangpin f 1990 Liutao M 1989 number of boy: 2 number of girl: 1 number after of 1990: 1,8.3 结构指针,8.3.

15、1指向结构体变量的指针 形式: struct 结构体名 *结构指针名; 例: static struct student *p; 结构指针在定义时也可以初始化。 例: struct student long int num; char name20; char sex; int age; float score; stu1,*p=,用指针引用结构体成员的一般形式: (*结构指针名).成员名 或 结构指针名-成员名 设有类型、变量声明及初始化如下: struct date int day; char month4; int year; birthday,*sp= 则 (*sp).day、(*sp).month、sp-day、sp-month均是合法。其中 (*sp).day和sp-day等效 (*sp).month和sp-month等效。,例: #include“stdio.h“ #include“string.h“ void main() struct stud char *num; char name20; float score;

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

最新文档


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

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