C语言计算机二级结构体和共用体.ppt
《C语言计算机二级结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《C语言计算机二级结构体和共用体.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8 8章章 结构体和共用体结构体和共用体学习目标1.掌握结构体类型、结构体变量、结构体数组的定义2.掌握结构体变量指针、结构体数组元素指针等基本概念3.掌握结构体指针的声明、初始化、赋值及引用4.了解共用体类型的定义、共用体变量的声明、赋值及使用5.了解枚举类型的定义、枚举类型变量的声明、赋值及使用6.理解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;/*性别*/unsign
3、ed 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;/*结构体成员是另一种结构类型,结构体在此嵌套*/char*addr;numnamesexbirthda
4、yaddrdaymonthyear嵌套结构体嵌套结构体studentstudent的逻辑结构的逻辑结构 (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
5、;类型名2 成员名2;类型名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先声明结构体类型再定义变量名例如:st
6、ruct 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 name20;char sex;char addr20;st
8、u1,stu2=89031,Lilin,M,123 Beijing Road;/*结构体变量stu2初始化*/三、结构体变量的引用三、结构体变量的引用形式:结构体变量名成员名#includevoid 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:%cnaddress:%sn,stu2.num,stu2.name,stu2.sex,stu2.a
9、ddr);stu1=stu2;/*两个相同类型的结构体变量之间可以进行赋值操作*/printf(NO.:%ldnname:%snsex:%cnaddress:%sn,stu1.num,stu1.name,stu1.sex,stu1.addr);注意:(1)不能将一个结构体变量作为一个整体进行输入和输出。例:scanf(%ld%s%c%s,&stu1);printf(NO.:%ldnname:%snsex:%cnaddress:%sn,stu2);只能对结构体变量中的各个成员分别进行输入和输出,如:stu1.num=89031;strcpy(stu1.name,Liling);scanf(%c%
10、s,&stu1.sex,stu1.addr);(2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。stu1.num=stu2.num;(3)结构体变量可以进行整体赋值,但不能整体进行比较。下列语句是错误的:if(stu1stu2)printf(name:%sn,stu1.name);(4)如果成员本身又属一个结构体类型,则要逐级地找到最低的一级成员。只能对最低级的成员进行存取。8.2 结构体数组结构体数组8.2.1 结构体数组的定义结构体数组的定义1定义结构体类型后定义结构数组。例如:struct student long int num;char name20;char se
11、x;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;numnamesexagescorestu0stu1stu2stu3stu4结构体数组的逻辑结构结构体数组的逻辑结构 8.2.2 结构数组的初始化结构数组的初始化 格式:struct 结构体名 结构数组
12、名元素个数=初始数据;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,80102,Wanglan,F,19,80103,Zhangjun,F,20;2052203120512027结构数组结
13、构数组stu在内存中的分配情况在内存中的分配情况stu0 stu1 stu2200020272054 num name sexage8.2.3 结构数组元素的引用结构数组元素的引用形式:结构体数组名下标成员名例如stu0.num=80101;strcpy(stu0.name,Lilin);例:统计全班男女生人数及1990年以后(含1990年)出生的人数。#include string.h#include stdio.hvoid main()struct stud /*定义一个结构stud,包含3个成员*/char name20;/*姓名*/char sex;/*性别*/int year;/*出
14、身年份*/;struct stud class100;/*定义一个结构数组class*/int m_num=0,f_num=0,total90=0,class_num,i;printf(Please enter class_num:);scanf(%d,&class_num);/*输入班级人数*/for(i=0;iclass_num;i+)/*输入同学信息*/printf(nPlease enter name/sex/year:);scanf(%s%c%d,classi.name,&classi.sex,&classi.year);for(i=0;iclass_num;i+)/*输出班级同学信
15、息*/printf(n%-10s%c%6d,classi.name,classi.sex,classi.year);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,total90);测试数据与运行结果:输入:Please enter class_num:3Please enter name/sex/year:Zhanglin m 1988Please enter na
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 计算机 二级 结构 共用
限制150内