欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第7章-结构体、共用体和枚举类型.ppt

    • 资源ID:2257631       资源大小:670.51KB        全文页数:46页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章-结构体、共用体和枚举类型.ppt

    2019/3/12,1,第7章 结构体、共用体和枚举类型,7.1 结构体类型 7.2 结构体数组 7.3 结构体指针变量 7.4 链表 7.5 共用体 7.6 枚举类型,2019/3/12,2,6.1 结构体类型,概述 有时,需将不同类型的数据组合成一个有机的整体,以便于引用。这些数据是相互联系的。如一个学生的有关信息:,可采用结构体数据结构描述上述信息。,2019/3/12,3,结构体类型的定义,示例: struct student int num; char name20; char sex; int age; char addr30; ;,定义一个结构体类型的一般形式为:,struct 结构体名 成员表列;,对各成员都要进行类型说明; 成员名定名规则与变量名同。,是类型,不是变量名,2019/3/12,4,结构体类型的定义,结构体类型定义的一般形式 struct 结构名 数据类型 成员名 1; 数据类型 成员名 2; 数据类型 成员名 n; ;,struct medicine char code; /*药品代号*/ char name; /*药品名称*/ float price; /*单价*/ char place; /*产地*/ stuct goods caption ; /*来源地*/ ;,2019/3/12,5,结构体类型变量的定义,1、在定义类型的同时定义变量 struct student int num; char name20; char sex; int age; char addr30; student1, student2;,一般形式是: struct 结构体名 成员表列 变量名表列;,2019/3/12,6,结构体类型变量的定义,2、先定义结构体类型再定义变量名 struct student int num; char name20; char sex; int age; char addr30; ; struct student student1, student2;,定义student1和student2为 struct student类型变量, struct不可省略,不能只指定一个变 量为“struct型”而不 指定结构体名,2019/3/12,7,结构体类型变量的定义,3、直接定义结构类型变量(无名定义) struct int num; char name20; char sex; int age; char addr30; student1, student2;,省略了结构体类型名,以 后不能再用这种结构体类 型定义其它变量,2019/3/12,8,结构体变量的存储,一个结构体变量所占用内存空间的字节数可以用sizeof运算符求出,它的一般形式为: sizeof(变量名或类型标识符) 例 struct test int m110; char m2; float m3; double m4; aa;,sizeof(struct test)= 4*10+1+4+8=53,2019/3/12,9,几点说明:,1. 类型与变量是不同概念,不要混淆; 2. 结构体中的成员,可以单独使用,其作用与地位相当于普通变量; 3. 成员也可以是一个结构体变量;例如:,struct date int month; int day; int year; ;,struct student int num; char name20; int age; struct date birthday; student1,student2;,4. 成员名可以与程序中的变量名相同,二者不代表同一对象。,2019/3/12,10,结构体变量的初始化,语法形式 struct 结构体类型名 结构体变量名=初始数据 示例 struct student /学生信息结构体 int num; /学号 char name20; /姓名 char sex; /性别 int age; /年龄 stu=97001,“Lin Lin“,'F',19;,注意:不能在结构体内直接赋值,2019/3/12,11,结构体变量的初始化,含嵌套结构的结构体变量初始化,struct date int month; int day; int year; ;,Struct student int num; char name20; int age; struct date birthday; ;,struct student st1=10001,“Lin Lin“,21,8,15,1990; struct student st2=10002,“Li Lin“,20,6,12,1991;,2019/3/12,12,结构体变量的成员的访问,语法形式: 结构体变量名.成员名 说明 对成员变量可以象普通变量一样进行赋值或存取以及各种运算,如: st1.num=10015; scanf(“%d“, 若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。如: st1.birthday.year,2019/3/12,13,结构体变量的成员的访问(续),两个结构体变量之间可以进行整体赋值。但对结构体变量进行输入和输出时,只能是针对每一个成员来进行。 struct student st3; st3=st1; printf(“%d“,st3);/错误,2019/3/12,14,例7-2 结构体变量初始化 (p175),#include struct long no; char name20; char sex; int age; char addr30; stu1=11301,“Wang Lin“,'M',19,“200 Beijing Road“; int main() printf(“no=%ld, name=%s, sex=%c, age=%d, addr=%sn“,stu1.no,stu1.name,stu1.sex, stu1.age,stu1.addr); ,2019/3/12,15,例7-3 结构体变量赋值,#include #include struct long no; char name20; char sex; STUDENT; int main() STUDENT.no = 11201; strcpy(STUDENT.name, “Li Ping“); STUDENT.sex='M' printf(“no = %ld, name = %s, sex = %cn“, STUDENT.no, STUDENT.name, STUDENT.sex); ,2019/3/12,16,7.2 结构体数组,1.结构体数组的定义 struct student int num; char name20; double score; stu15; struct student stu25;,2019/3/12,17,结构体数组,2.访问结构体数组元素的成员 例: stu10.num 3.结构体数组的初始化 struct student int num; char name20; double score; stu12=1001,”wangliping”,85.5, 1002,”zhangli”,78;,2019/3/12,18,示例:设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,struct person char name20; int count; leader3=“Li“,0, “Zhang“,0, “Liu“,0; int main( ) int i, j; char leader_name20; for( i=1;i=10;i+) scanf(“%s“,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) printf(“%s,%dn“,leaderi.name,leaderi.count); ,2019/3/12,19,7.3 结构体指针变量,指向结构体变量的指针变量 结构体指针变量的定义及初始化 struct 结构体类型名 *指针变量名; 例:struct student *s; 注意:此时s还未具体确定指向哪个结构体变量,需要在程序中把结构体变量的地址赋给s;或者在定义s时初始化 例: student stu; struct student *s=,2019/3/12,20,结构体指针,访问结构体变量中的成员有三种方式 结构体变量.成员名 (*结构体指针).成员名 结构体指针-成员名 指向结构体数组的指针变量 与指向普通数组的指针变量的定义和使用方法完全一样,指向运算符。其优先级高于自增、自减运算符,2019/3/12,21,指向运算符示例,试分析以下运算: p-n 得到p指向的结构体变量中的成员n的值 p-n+ 得到p指向的结构体变量中的成员n的值, 用完后使它加1; +p-n 得到p指向的结构体变量中的成员n的值 使其先加1,2019/3/12,22,例7-7 用指向结构体数组的指针输出结构体数组中各成员的值(p180),#include #include int main() struct STUDENT long no; char name20; char sex; float score; student5=11001,“Li ping“, 'M', 45, 11002, “Zhang ping“, 'M', 62.5, 11003, “He fang“, 'F', 92.5; struct STUDENT *p; printf(“no name sex scoren“); for(p=student;pno, p-name, p-sex, p-score); ,2019/3/12,23,结构体指针的应用,1.用结构体指针变量作函数的参数 P181-例7-9 2.用结构体指针处理链表 链表概述 链表的建立和输出(例6.8),2019/3/12,24,7.4 链表,链表是将若干数据项按一定规则连接起来的表,链表中的每个元素称为一个结点。即链表是由称为结点的元素组成的,结点的多少根据需要确定。链表连接的规则是:前一个结点指向下一个结点;只有通过前一结点才能找到下一个结点。因此,每个结点都应包括两方面的内容: (1)数据域,该部分可以根据需要由多个成员组成,它存放的是需要处理的数据。 (2)指针域,该部分存放的是一个结点的地址,链表中的每个结点通过指针连接在一起。,2019/3/12,25,链表结构(1),2019/3/12,26,链表结构(2),2019/3/12,27,单链表结点的类型定义,struct 结构名 数据成员列表; struct 结构名 *指针名; ;,表示成员指针所指对象的类型就是自身结点类型。,示例: struct student long num; double score; struct student *next; ;,2019/3/12,28,链表的基本操作,对链表的基本操作有建立、查找、插入、删除和修改等。 (1) 建立链表是指从无到有建立一个链表,即往空链表中依次插入一个结点,并保持结点之间的前驱和后继的关系。 (2)查找操作是指在给定的链表中,查找具有检索条件的结点。 (3)插入操作是指在某两个结点之间插入一个新的结点。 (4)删除操作是指在给定的链表中,删除某个特定的结点,也就是插入的逆过程。 (5) 修改操作是指在给定的链表中,首先根据某已知的条件,查找到该结点,再修改数据域中的某些数据项。,2019/3/12,29,链表的建立,struct STUDENT *create() struct STUDENT *head, *p1, *p2; head = (struct STUDENT *)malloc(LEN); head-next = NULL; p1 = head; p2 = (struct STUDENT *)malloc(LEN); /建立第一个节点 scanf(“%ld, %f“,2019/3/12,30,链表的建立(续),while(p2-no != 0) p2-next = p1-next; p1-next = p2; p1 = p2; p2 = (struct STUDENT *)malloc(LEN); scanf(“%ld,%f“, ,2019/3/12,31,链表的输出,void print(struct STUDENT *head) struct STUDENT *p; printf(“nThese %d nodes are:n“, n); p = head-next; /指针P指向第一个节点 while(p != NULL) printf(“%ld %5.1fn“, p-no, p-score); p = p-next; /p指针后移 ,2019/3/12,32,插入节点(保持学号由小到大的次序),void insert(struct STUDENT *head,struct STUDENT *p0) struct STUDENT *p1, *p2; p1 = head-next; p2 = head; while(p0-nop1-no) ,2019/3/12,33,删除节点,int delete(struct STUDENT *head, long num) struct STUDENT *p1,*p2; p2=head; p1 = head-next; if(head-next = NULL) /链表为空表 return -1; while(num!=p1-no ,2019/3/12,34,7.5 共用体 (联合体),使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构 定义形式: union 共用体类型名 数据类型 成员名 1; 数据类型 成员名 2; 数据类型 成员名 n; ;,2019/3/12,35,或 union int i; char ch; float f; a,b,c;,共用体定义示例,union data int i; char ch; float f;a,b,c;,或 union data int i; char ch; float f; ; union data a,b,c;,直接 定义,先定义 类型,不可省略,2019/3/12,36,访问共用体的成员,访问方法 共用体变量.成员名 (*共用体指针).成员名 共用体指针-成员名 注意:只能引用共用体变量中的成员,不能引用共用体变量本身。如: 可以引用 a .i(引用共用体变量中的整型变量i) a .ch(引用共用体变量中的字符变量ch) a .f(引用共用体变量中的实型变量f) 不能引用 printf(“%d“,a);,2019/3/12,37,共用体类型的特点,每一瞬时只有一个成员起作用 ; 共用体变量中起作用的成员是最后一次存放的成员; 共用体变量的地址和它的各成员的地址都是同一地址; 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。而结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。,2019/3/12,38,结构体与联合体所占用的内存长度,结构体类型变量所占内存长度是各成员占的内存长度之和。 联合体类型变量所占内存长度等于最长的成员的长度。,2019/3/12,39,例7-15为共用体各成员赋值,并输出各成员的值 (p189),#include int main() union data float m; int n; char c; temp; temp.m = 25.6F; /temp.n = 12; /temp.c = 'a' printf(“共用体各成员的值:n“); printf(“m = %.2fnn = %dnc = %cn“, temp.m, temp.n, temp.c); printf(“%d“,sizeof(union data); ,2019/3/12,40,所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。 定义枚举类型 enum 枚举类型名 变量值列表; 例:enum weekday sun, mon, tue, wed, thu, fri, sat; 定义枚举变量 用定义好的枚举类型类型定义变量 enum weekday workday, week_end; 直接定义枚举变量 enum weekday sun, mon, tue, wed, thu, fri, sat workday,week_end;,7.6 枚举类型,2019/3/12,41,枚举元素为整型常量,不是变量,故不能对它们赋值 枚举常量有值。如上面定义中,sun 、 mon 、 tue ······ sat的值依次为0、1、2······7 也可改变枚举元素的值,在定义时指出,如: enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat; 枚举值可用来作判断比较,如: if(workday=mon) if(workdaysun) 一个整数不能直接赋值给一个枚举变量,应先进行强制类型转换才能赋值(c+规定),如: workday=(enum weekday)2; (相当于将序号为2的枚举元素值赋给workday , 即:workday=tue;,说明:,省略赋值的枚举元素将以其前面的元素值为基础顺序加1,2019/3/12,42,枚举类型运用举例,#include int main() enum workday sun=7,mon=1,tue,wed,fri,thu,sat today,tomorrow; today=sat; tomorrow=(enum workday)(today%7+1); printf(“today=%dn“,today); if(tomorrow=7)/tomorrow=sun printf(“tomorrow is Sunday!n“); return 0; ,today=6 tomorrow is Sunday!,2019/3/12,43,用typedef定义类型,用于为一个已有的数据类型另外命名 语法形式 typedef 已有类型名 新类型名表; 例如 typedef double area,volume; typedef int natural; natural i1,i2;/等价于int i1,i2; area a;/等价于double a; volume v; /等价于double v;,为变量起一个别名,使变量所表示的含义较为清楚,从而增加程序的可读性。,2019/3/12,44,使用typedef定义结构体类型名,定义方法: typedef struct 成员列表; 类型名; 示例: typedef struct double real, img; COMPLEX; COMPLEX a, b;,定义类型名后,可用类型名直接定义结构体变量,而不再需要关键词struct,2019/3/12,45,作业,1、P192填空1,2; 2、编写一段程序,完成以下要求: (1)分别定义一个结构体变量、共用体变量和一个枚举类型变量 (2)分别对以上三类变量进行赋值; (3)分别输出以上三类变量的值。,2019/3/12,46,

    注意事项

    本文(第7章-结构体、共用体和枚举类型.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开