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

    北京科技大学C语言第7章PPT.ppt

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

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

    北京科技大学C语言第7章PPT.ppt

    1,第7章 其他自定义数据类型,北京科技大学 计算机系,C 语言程序设计,2019/3/5,2,第7章 结构体与共用体,主要内容 7.1 构造数据类型概述 7.2 结构体类型 7.3 共用体类型 7.4 枚举类型 7.5 类型重命名 7.6 案例分析,2019/3/5,3,一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。 一本图书的信息有分类编号、书名、作者、出版社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据?,7.1 构造数据类型概述,?,信息管理,结构体一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。,2019/3/5,4,struct 结构体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ;,7.2 结构体类型,7.2.1 结构体与结构体类型的定义,结构体类型定义的一般形式:,struct为关键字; 结构体名是用户定义的类型标识。 中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2019/3/5,5,例如图书类型的定义: struct bookcard char num10; /*图书分类编号是字符数组类型*/ char name30; /*书名是字符数组类型*/ char author30; /*作者是字符数组类型*/ char publisher60; /*出版社是字符数组类型*/ float price; /*价格是单精度实型*/ int n; /*库存量是整型*/ ;,7.2 结构体类型,7.2.1 结构体与结构体类型的定义,2019/3/5,6,例如学生类型的定义: struct student char num8; /* 学号是字符数组类型 */ char name30; /* 姓名是字符数组类型 */ char sex; /* 性别是字符型 */ int age; /* 年龄是整型 */ char addr60; /* 住址是字符数组类型 */ int score6; /* 成绩是整型数组类型 */ ;,7.2 结构体类型,7.2.1 结构体与结构体类型的定义,2019/3/5,7,7.2 结构体类型,7.2.2 结构体变量的定义、引用与初始化,1. 结构体类型变量的定义,利用已定义的结构体类型名定义变量 struct 结构体名 变量名表; 例如: struct bookcard book1100; struct student s30, t1, t2;,结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。,2019/3/5,8,类型与变量是不同的概念。 应先定义一个结构体类型,而后再定义结构体变量。 系统对类型不分配空间,仅对变量分配空间。 只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。,成员也可以是结构体变量。,对结构中的成员,可以单独使用,它的作用与地位相当于普通变量。 成员名可与程序中的变量名相同时,也可与不同结构体类型的成员名相同,二者代表不同的对象。,struct date int year,month,day; struct student char num8; char name30; char sex; struct date birthday; /* 成员为结构体类型 */ char addr60; int score6; ;,7.2 结构体类型,结构体类型与变量的说明,2019/3/5,9,7.2.2 结构体变量的定义、引用与初始化,1. 结构体类型变量的定义,在定义结构体类型的同时定义变量,例如:struct student char num8,name20,sex; int age; float score; st30;,struct 结构体名 成员定义表; 变量名表;,2019/3/5,10,1. 结构体类型变量的定义,直接定义结构体类型变量,例如:struct char num8,name20,sex; int age; float score; st30, a, b, c;,struct 成员定义表; 变量名表;,7.2.2结构体变量的定义、引用与初始化,2019/3/5,11,2. 结构体变量的初始化,【例7-4】结构体变量的初始化。 struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a=“40826011“,“Li ming“,'M',1991,2,9,87.5, b=“40826025“,“Zhang qiang“,'F',1990,5,12,85,c;,如果初值个数少于结构体成员个数, 则将无初值对应的成员赋以0值。 如果初值个数多于结构体成员个数, 则编译出错。,7.2.2结构体变量的定义、引用与初始化,2019/3/5,12,2. 结构体变量的初始化,【例7-5】结构体数组的初始化。 struct s char num8,name20,sex; float score; stu3=“40826011“,“Li ming“,'M',87.5, “40826025“,“Zhang qiang“,F',85, “40826032“,“Wang xinping“,'F',90;,元素的个数可以省略,根据赋初值时 结构体常量的个数确定数组元素的个数,7.2.2结构体变量的定义、引用与初始化,2019/3/5,13,3. 结构体变量的运算,用sizeof运算符计算结构体变量所占内存空间,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,sizeof(a) 的结果为8+20+1+12+4=45 sizeof(struct student) 的结果为45,7.2.2结构体变量的定义、引用与初始化,2019/3/5,14,3. 结构体变量的运算,同类型结构体变量之间的赋值运算,结构体变量之间进行赋值时,系统将按成员一一对应赋值。,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a=“40826011“,“Li ming“,'M',1977,12,9,87.5,b,c; c = a;,7.2.2结构体变量的定义、引用与初始化,2019/3/5,15,3. 结构体变量的运算,对结构体变量进行取址运算,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,对结构体变量a进行 &a 运算,可以得到a的首地址,它是结构体类型指针。,7.2.2结构体变量的定义、引用与初始化,2019/3/5,16,4. 结构体变量成员的引用,结构体变量成员引用的一般形式: 结构体变量名.成员名,结构体变量a的各成员可分别表示为a.num、a.name、a.sex、a.birthday、a.score,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,“.”是分量运算符,运算级别最高。,a.birthday.year a.birthday.month a.birthday.day,结构体变量的各个成员可进行何种运算,由该成员的数据类型决定,7.2.2结构体变量的定义、引用与初始化,2019/3/5,17,【例7-6】编写一个统计选票的程序。 struct candidate char name20; /* name为候选人姓名 */ int count; /* count为候选人得票数 */ list =“invalid“,0,“Zhang“,0,“Wang“,0, “Li“,0,“Zhao“,0,“Liu“,0;,7.2.2结构体变量的定义、引用与初始化,2019/3/5,18,main( ) int i,n; printf(“Enter voten“); scanf(“%d“, /* 输入所投候选人编号 */ ,7.2.2结构体变量的定义、引用与初始化,2019/3/5,19,for (i=1; i=5; i+) printf(“%s:%dn“,listi.name,listi.count); printf(“%s:%dn“,list0.name,list0.count); ,7.2.2结构体变量的定义、引用与初始化,2019/3/5,20,7.2 结构体类型,1. 结构体指针变量的定义,结构体指针变量定义的一般形式: struct 结构体名 *指针变量名;,struct date int year, month, day;*q;,例如: struct student *p;,p是指向struct student结构体变量的指针变量,7.2.3 结构体的指针,2019/3/5,21,7.2.3 结构体的指针,2. 结构体成员的三种引用形式,用结构体变量名的引用形式: d.year d.month d.day,struct date int year, month, day;d, *p=,用结构体指针变量的引用形式: (*p).year (*p).month (*p).day p-year p-month p-day,“-”是指向结构体成员运算符,优先级为一级,p=&d.year,×,2019/3/5,22,【例】输入今天的日期,然后输出该日期。 main( ) struct date /* 在函数中定义结构体类型 */ int year, month, day; today,*p= ,7.2.3 结构体的指针,Enter today date(YYYY/MM/DD):2006/06/23 Today:2006/6/23,2019/3/5,23,3. 指向结构体数组的指针,【例7-7】利用结构体指针输出一组化学 元素名称及其原子量。 struct list int i; char name4; float w; tab4=1,“H“,1.008,2,“He“,4.0026, 3,“Li“,6.941,4,“Be“,9.01218;,7.2.3 结构体的指针,2019/3/5,24,3. 指向结构体数组的指针,main( ) struct list *p; printf(“NotNametAtomic Weightn“); for (p=tab; pi, p-name, p-w); ,No Name Atomic Weight,1 H 1.008,2 He 4.0026,3 Li 6.941,4 Be 9.01218,7.2.3 结构体的指针,2019/3/5,25,【例7-8】分析自增自减运算对程序结果的影响。 struct code int i; char ch; a =1000,E',2000,F', 3000,G',4000,H' (接后面),7.2.3 结构体的指针,2019/3/5,26,main( ) struct code *p=a; printf(“%dt“,+p-i); printf(“%ct“,(+p)-ch); printf(“%dt“,(p+)-i); printf(“%ct“,+p-ch); printf(“%dt“,p-i+); printf(“%dn“,p-i); ,p,1001,H',3001,1001,F,2000,H,3000,3001,7.2.3 结构体的指针,2019/3/5,27,7.2 结构体类型,7.2.4链表结构体的应用, 链表中每个元素称为一个结点。 构成链表的结点必须是结构体类型数据。,1. 链表的基本结构,head 1782 2008 3246 1085 5736 图7-2 动态单向链表示意图, 相邻结点的地址不一定是连续的,依靠指针将 它们连接起来。,struct node char c; struct node *next; ;,2019/3/5,28,C语言提供了相关的存储管理库函数。这里仅介绍其中三个,它们的原型说明在“stdlib.h”头文件和“alloc.h”头文件中,使用这三个函数时,应选择其中一个头文件包含到源程序中。, 动态分配存储区函数malloc( ) 函数原型:void *malloc(unsigned size); 调用格式:malloc(size) 功能:在内存分配一个size字节的存储区。调用 结果为新分配的存储区的首地址,是一个void 类型指针。若分配失败,则返回NULL(即0)。,7.2.4 链表,2. 动态分配和释放存储单元,在ANSI C标准中,关键字void有两种用法。 第一种用法,可将无返回值的函数定义为void类型 第二种用法,用void * 定义指针,这是一个指向 非具体数据类型的指针,称为无类型指针。,2019/3/5,29,【例7-9】调用malloc函数分配所需存储单元。 #include #include main( ) struct st int n; struct st *next; *p; p=(struct st *)malloc(sizeof(struct st); p-n=5; p-next=NULL; printf(“p-n=%dtp-next=%xn“,p-n,p-next); ,将函数返回值转换成结构体指针,7.2.4 链表,p-n=5 p-next=0,2019/3/5,30, 动态分配存储区函数calloc( ) 函数原型: void *calloc(unsigned int n,unsigned int size); 调用格式:calloc(n,size) 功能:在内存分配一个n倍size字节的存储区。 调用结果为新分配的存储区的首地址,是一个void 类型指针。若分配失败,则返回NULL(即0)。,2. 动态分配和释放存储单元,7.2.4 链表,2019/3/5,31,【例7-10】调用calloc函数分配所需存储单元。 #include main( ) int i,*ip; ip=(int *)calloc(10,4); for (i=0; i10; i+) scanf(“%d“,ip+i); for (i=0; i10; i+) printf(“%d “,*(ip+i); printf(“n“); ,动态分配了10个存放整型数据的存储单元,7.2.4 链表,2019/3/5,32, 释放动态分配存储区函数free( ) 函数原型:void free(void *p);,2. 动态分配和释放存储单元,此函数无返回值,实参必须是一个指向动态分配存储区 的指针,它可以是任何类型的指针变量。,调用格式:free(p) 功能:释放p所指向的动态分配的存储区。,7.2.4 链表,2019/3/5,33,建立链表就是根据需要一个一个地开 辟新结点,在结点中存放数据并建立结点 之间的链接关系。,【例7-11】建立一个学生电话簿 的单向链表函数。,3. 建立单向链表,7.2.4 链表,2019/3/5,34,#include #include #include #define NEW (struct node *)malloc(sizeof(struct node) struct node char name20, tel9; struct node *next; ;,7.2.4 链表,2019/3/5,35,struct node *create( ) static struct node *h; struct node *p,*q; char name20; h=NULL; printf(“name: “); gets(name); while (strlen(name)!=0) /* 当输入的姓名不是空串循环 */ p=NEW; /* 开辟新结点 */ if (p=NULL) /* p为NULL,新结点分配失败 */ printf(“Allocation failuren“); exit(0); /* 结束程序运行 */ ,7.2.4 链表,2019/3/5,36,strcpy(p-name, name); /* 为新结点中的成员赋值 */ printf(“tel: “); gets(p-tel); p-next=NULL; if (h=NULL) /* h为空,表示新结点为第一个结点 */ h=p; /* 头指针指向第一个结点 */ else /* h不为空 */ q-next=p; /* 新结点与尾结点相连接 */ q=p; /* 使q指向新的尾结点 */ printf(“name: “); gets(name); return h; ,7.2.4 链表,main( ) struct node *head; head=create( ); ,2019/3/5,37,【例7-12】输出学生电话簿链表函数。,4. 输出单向链表中各结点信息,7.2.4 链表,2019/3/5,38,#include #include #include #define NEW (struct node *)malloc(sizeof(struct node) struct node char name20,tel9; struct node *next; ;,void prlist(struct node *head) struct node *p; p=head; while (p!=NULL) printf(“%st%sn“, p-name, p-tel); p=p-next; ,main( ) struct node *head; head=create( ); prlist(head); ,2019/3/5,39,在链表中,如果要删除第i个结点,一般是将第(i-1) 个结点直接与第(i+1)个结点相连接,然后再释放第i个 结点的存储单元 。,5. 删除单向链表中指定的结点,7.2.4 链表,2019/3/5,40,【例7-13】删除学生电话簿链表中指定学生的信息。,(a) 删除第一个结点 (head=p-next),7.2.4 链表,2019/3/5,41,(b) 删除中间结点或尾结点 (q-next=p-next),7.2.4 链表,2019/3/5,42,(c) 未找到指定的结点 (strcmp(x,p-name)!=0),7.2.4 链表,2019/3/5,43,删除 第一个结点,删除中间结点或尾结点,学生姓名,当姓名不同并且不是尾结点循环,7.2.4 链表,2019/3/5,44,#include #include #include #define NEW (struct node *)malloc(sizeof(struct node) struct node char name20,tel9; struct node *next; ;,struct node *delnode(struct node *head, char *x) struct node *p,*q; static struct node *h; if (head=NULL) printf(“This is a empty list.“); /* 空链表情况 */ return head; p=head; while (strcmp(x,p-name)!=0 /* q指针尾随p指针向表尾移动 */,查找结点,2019/3/5,45,if (strcmp(x,p-name)=0) if (p=head) head=p-next; /* 删除头结点 */ else q-next=p-next; /* 删除中间或尾结点 */ free(p); /* 释放被删除的结点 */ else printf(“Not found.“); /* 未找到指定的结点 */ h=head; return h; ,7.2.4 链表,2019/3/5,46,将一个新结点插入到链表中,首先要寻找插入的位置。如果要求在第i个结点前插入,可设置三个工作指针p0、p和q,p0是指向待插入结点的指针。利用p和q指针查找第i个结点,找到后再将新结点链接到链表上。,6. 在单向链表中插入结点,q,q,新的第i个结点,7.2.4 链表,2019/3/5,47,(a) 在表头插入结点 (head=p0; p0-next=p),7.2.4 链表,2019/3/5,48,(b) 在表中间插入结点 (q-next=p0; p0-next=p),7.2.4 链表,2019/3/5,49,(c) 在表尾追加结点 (p-next=p0; p0-next=NULL),7.2.4 链表,2019/3/5,50,【例7-14】在学生电话簿链表中插入一个学生的信息。要求将新的信息插入在指定学生信息之前,如果未找到指定学生,则追加在链表尾部。,当姓名不同并且不是尾结点循环,空表时 插入 结点,在表尾 追加结点,在表头 插入结点,在表中间 插入结点,7.2.4 链表,2019/3/5,51,#include #include #include #define NEW (struct node *)malloc(sizeof(struct node) struct node char name20,tel9; struct node *next; ;,7.2.4 链表,2019/3/5,52,7.2.4 链表,2019/3/5,53,if (strcmp(x, p-name)=0) if (p=head) head=p0; /* 在表头插入结点 */ else q-next=p0; /* 在表中间插入结点 */ p0-next=p; else p-next=p0; /* 在表尾插入结点 */ p0-next=NULL; h=head; return h; ,7.2.4 链表,2019/3/5,54,【例7-15】学生电话簿链表管理程序。,编制此程序可利用例7-11至例7-14的4个函数完成链表的建立、输出、删除和插入等功能,这里只需编制一个main函数完成对这4个函数的调用。 #include #include #define NEW (struct node *)malloc(sizeof(struct node) struct node char name20,tel9; struct node *next; ;,7.2.4 链表,2019/3/5,55,main( ) struct node *create( ),*delnode(struct node *, char *); struct node *insert(struct node *, struct node *, char *); void prlist(struct node *); struct node *head=NULL,*stu; char s80,name20; int c;,7.2.4 链表,2019/3/5,56,do do printf(“n * * * * MENU * * * * n“); printf(“ 1. Create a list n“); printf(“ 2. Print a list n“); printf(“ 3. Delete a node n“); printf(“ 4. Insert a node n“); printf(“ 0. Quit n“); printf(“ Enter your choice(0-4): “); gets(s); c=atoi(s); while(c4);,可以先选择1建立一个链表,然后根据需要选择功能2、功能3、功能4、直到选择0退出程序的运行,7.2.4 链表,2019/3/5,57,switch(c) case 1: head=create( ); break; case 2: prlist(head); break; case 3: printf(“nInput a name deleted:n“); gets(name); head=delnode(head,name); break; case 4: stu=NEW; printf(“nInput a new noden“); printf(“name: “); gets(stu-name); printf(“tel: “); gets(stu-tel); stu-next=NULL; printf(“nInsert positionn“); printf(“name: “); gets(name); head=insert(head,stu,name); while (c); ,7.2.4 链表,2019/3/5,58,结构体类型解决了如何描述一个逻辑上相关,但数据类型不同的一组分量的集合。 在需要节省内存储空间时,c语言还提供了一种由若干个不同类型的数据项组成,但共享同一存储空间的构造类型。,7.3 共用体类型,7.3.1 共用体与共用体类型的定义,共用体一种构造类型数据 共用体由若干不同类型的数据项组成, 构成共用体的各个数据项称为共用体成员。,由于共享的特性,只有最新存储的数据是有效的。,2019/3/5,59,union 共用体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ;,7.3 共用体类型,7.3.1 共用体与共用体类型的定义,共用体类型定义的一般形式:,union为关键字; 共用体名是用户定义的类型标识。 中是组成该共用体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2019/3/5,60,例如: union utype int i; char ch; long l; char c4; ;,7.3 共用体类型,7.3.1 共用体与共用体类型的定义,定义了一个union utype共用体 类型,共用体类型定义不分配内存 空间,只是说明此类型数据的组成 情况。,2019/3/5,61,7.3 共用体类型,7.3.2 共用体变量的定义与初始化,1. 共用体变量的定义,利用已定义的共用体类型名定义变量 union 共用体名 变量名表; 例如: union utype u1,u2;,按照共用体类型的组成,系统为定义的共用体变量分配内存单元。共用体变量所占内存大小等于共用体中占用内存的长度最长的成员。,2019/3/5,62,7.3.2 共用体变量的定义与初始化,1. 共用体变量的定义,在定义共用体类型的同时定义变量,例如: union utype int i; char ch; long l; char c4; a, b, c;,union 共用体名 成员定义表; 变量名表;,2019/3/5,63,1. 共用体变量的定义,直接定义共用体类型变量,例如: union int i; char ch; long l; char c4; a, b, c;,union 成员定义表; 变量名表;,7.3.2 共用体变量的定义与初始化,2019/3/5,64,2. 共用体变量的运算,用sizeof运算符计算共用体变量所占内存空间,union utype int i; char ch; long l; char c4; a, b, c;,sizeof(a) 的结果为4 sizeof(union utype) 的结果为4,7.3.2 共用体变量的定义与初始化,2019/3/5,65,2. 共用体变量的运算,同类型共用体变量之间的赋值运算,共用体变量之间进行赋值时,系统仅赋当前有效 成员的值(即最新存储的数据)。,union utype int i; char ch; long l; char c4; a, *p=,对共用体变量进行取址运算,7.3.2 共用体变量的定义与初始化,2019/3/5,66,3. 共用体变量成员的引用,共用体变量成员的引用有三种形式。,例如: union u char u1; int u2; x,*p=,用共用体变量名的引用形式: x.u1 x.u2,用共用体指针变量的引用形式: (*p).u1 (*p).u2 p-u1 p-u2,7.3.2 共用体变量的定义与初始化,2019/3/5,67,4. 共用体变量赋初值,【例7-16】共用体变量赋初值。 union u char u1; int u2; ; main( ) union u a=0x9745; printf(“1. %c %xn“,a.u1,a.u2); a.u1=e' printf(“2. %c %xn“,a.u1,a.u2); ,共用体类型变量在定义时只能对第一 个成员进行赋初值。 由于第一个成员是字符型,用一个字 节,所以对于初值0x9745仅能接受0x45, 初值的高字节被截去。,1. E 45,2. e 65,7.3.2 共用体变量的定义与初始化,2019/3/5,68,main( ) union long n; int k; char c; un; un.n=0x12345678; printf(“%lxn“,un.n); printf(“%xn“,un.k); printf(“%xn“,un.c); un.c='A' printf(“%ldn“,un.n); printf(“%dn“,un.k); printf(“%cn“,un.c); ,7.3.2 共用体变量的定义与初始化,12345678,12345678,78,305419841,305419841,A,2019/3/5,69,enum是关键字; 枚举名和枚举常量是标识符; 枚举常量之间用逗号分隔。,例如: enum weekday Sun, Mon, Tue, Wed, Thu, Fri, Sat ; enum color1 blue, green, red ; enum flag false, true ;,7.4 枚举类型,1. 枚举类型的定义,枚举类型定义的一般形式: enum 枚举名 枚举常量取值表 ;,枚举是一个具有有限个整型符号常量的 集合,这些整型符号常量称为枚举常量。 每个枚举类型都必须进行类型的定义, 定义时必须将其所有的枚举常量一一列举, 以便限定此枚举类型变量的取值范围。,2019/3/5,70,7.4 枚举类型,2. 枚举常量的整型值,隐式定义: 按照类型定义时枚举常量列举的顺序分别 代表0、1、2、等整型值。,例如: enum weekday Sun, Mon, Tue, Wed, Thu, Fri, Sat ;,0,1,2,3,4,5,6,在枚举类型中,每个枚举常量都代表一 个整型值。在定义枚举类型的同时可隐式或 显式地定义枚举常量所代表的值。,2019/3/5,71,2. 枚举常量的整型值,显式定义: 在定义类型的同时指定枚举常量的值,其中如 有未指定值的枚举常量,则根据前面的枚举常量的 值依次递增1。,例如: enum op plus=43,minus=45,multiply=42,divide=47 ; enum workday Mon=1,Tue,Wed,Thu,Fri ;,2,3,4,5,7.4 枚举类型,2019/3/5,72,例如: enum flag fg; enum color1 c1; enum color2 blank,brown,yellow,white c2; enum lightblue,lightgreen,lightred c3;,3. 枚举变量的定义,枚举类型变量定义的三种形式: enum 枚举名 枚举变量名表; enum 枚举名 枚举常量取值表枚举变量表; enum 枚举常量取值表枚举变量表;,7.4 枚举类型,2019/3/5,73,4. 枚举数据的运算, 用sizeof运算符计算枚举变量所占内存空间, 赋值运算 fg=true;c1=red;c2=yellow;c3=lightgreen; c3=white;,枚举变量中存放的是整型值,每个枚举变量占用4个字节,是enum color2类型的枚举值,7.4 枚举类型,2019/3/5,74,4. 枚举数据的运算, 关系运算, 取址运算 enum color2 blank,brown,yellow,white c2; enum flag fg; &c2 、 &fg,truefalse SunSat,真(1) 假(0),按枚举类型数据所代表的整型值进行比较,7.4 枚举类型,2019/3/5,75,5. 枚举数据的输入输出, 枚举变量的输入, 枚举变量的输出 方法一:直接输出枚举变量中存放的整型值。,枚举变量作为整型变量进行输入。例如: scanf(“%d“,1,含义不直观,fg=true; printf(“%d“,fg);,7.4 枚举类型,在C系统中,不能直接对枚举数据进行输入和输出。 由于枚举变量可以作为整型变量处理,所以可以通过 间接方法输入输出枚举变量的值。,2019/3/5,76,switch(fg) case false: printf(“false“); break; case true: printf(“true

    注意事项

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

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




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

    三一文库
    收起
    展开