《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx

上传人(卖家):momomo 文档编号:5787054 上传时间:2023-05-09 格式:PPTX 页数:79 大小:262.26KB
下载 相关 举报
《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx_第1页
第1页 / 共79页
《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx_第2页
第2页 / 共79页
《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx_第3页
第3页 / 共79页
《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx_第4页
第4页 / 共79页
《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、7.1 结构体类型结构体类型7.2 结构体数组的使用结构体数组的使用7.3 结构体指针变量的使用结构体指针变量的使用7.4 用用typedef声明新类型名声明新类型名7.5 单向链表的建立与基本操作单向链表的建立与基本操作7.6 联合体类型联合体类型7.7 枚举类型枚举类型 n结构体结构体:由由不同类型不同类型的的数据项数据项组成的构组成的构造类型。造类型。例如,例如,在学生登记表中,每个学生的信息在学生登记表中,每个学生的信息由学号、姓名、性别、成绩等数据项组成,由学号、姓名、性别、成绩等数据项组成,各个数据项的类型可不一样。各个数据项的类型可不一样。相当于文件系统中的记录。相当于文件系统中

2、的记录。7.1.1 定义结构体类型定义结构体类型7.1.2 定义结构体变量定义结构体变量7.1.3 结构体变量的使用结构体变量的使用7.1.4 结构体变量的初始化结构体变量的初始化7.1.1定义结构体类型定义结构体类型n声明结构体类型的形式:声明结构体类型的形式:struct 结构体名结构体名 类型类型1 成员名成员名1;类型类型2 成员名成员名2;.类型类型n 成员名成员名n;;n括住的是成员列表括住的是成员列表7.1.1定义结构体类型定义结构体类型例如:例如:struct stuint num;char name20;char sex;float score;u定义定义一个结构类型一个结构

3、类型struct stuu它它由由4个个不同类型的成不同类型的成员员组成:组成:num,name,sex,score7.1.1定义结构体类型定义结构体类型n结构体类型一旦定义之后,就可作为一结构体类型一旦定义之后,就可作为一个类型名使用个类型名使用.n结构体类型的使用格式为:结构体类型的使用格式为:struct 结构名结构名例如例如 struct stu s1;n注意注意:前面的前面的struct不能省。不能省。7.1.1定义结构体类型定义结构体类型n嵌套的结构体类型嵌套的结构体类型:结构体类型中的成员结构体类型中的成员,可以可以是一个结构体类型。是一个结构体类型。struct Date in

4、t year;int month;int day;struct Student int num;char name20;char sex;struct Date birthdate;float score;7.1.2定义结构体变量定义结构体变量n定义结构体变量有三种方法:定义结构体变量有三种方法:1.先定义结构体类型,再声明结构体变量。先定义结构体类型,再声明结构体变量。struct stuint num;char name20;char sex;float score;struct stu boy1,boy2;图图7-1 结构变量结构变量boy1和和boy2的内存分配的内存分配 sizeof

5、(boy1)=sizeof(struct stu)=29420147.1.2定义结构体变量定义结构体变量n定义结构体变量有三种方法:定义结构体变量有三种方法:2.在定义结构体类型的同时,定义结构体变量。在定义结构体类型的同时,定义结构体变量。struct stuint num;char name20;char sex;float score;boy1,boy2;7.1.2定义结构体变量定义结构体变量n定义结构体变量有三种方法:定义结构体变量有三种方法:3.不指定类型名而直接定义结构体变量。不指定类型名而直接定义结构体变量。structint num;char name20;char sex;f

6、loat score;boy1,boy2;7.1.3结构体变量的使用结构体变量的使用n使用结构体变量成员的一般形式:使用结构体变量成员的一般形式:结构体变量名结构体变量名.成员名成员名 例如:例如:boy1.num,表示,表示boy1的成员的成员num;boy1.sex,表示,表示boy1的成员的成员sex。n允许具有相同类型的结构体变量相互赋值。允许具有相同类型的结构体变量相互赋值。结构体变量名结构体变量名1=结构体变量名结构体变量名2例如:例如:boy2=boy1;把把boy1的各成员的值挨个地赋给的各成员的值挨个地赋给boy2中的各个成员。中的各个成员。7.1.3结构体变量的使用结构体变

7、量的使用n除允许具有相同类型的结构体变量相互除允许具有相同类型的结构体变量相互赋值以外赋值以外n赋值、输入、输出、赋值、输入、输出、运算等操作运算等操作:针对结针对结构体变量的成员构体变量的成员 例例7-1 结构体变量的声明,赋值,以及输结构体变量的声明,赋值,以及输入和输出操作。入和输出操作。#include void main(void)struct stu int num;char name20;char sex;float score;boy1,boy2;printf(Input boy1:name num sex scoren);scanf(%s%d%c%f,boy1.name,&b

8、oy1.num,&boy1.sex,&boy1.score);boy2=boy1;boy2.score=boy1.score+10;printf(boy2:num=%d,name=%s,sex=%c,score=%fn,boy2.num,boy2.name,boy2.sex,boy2.score);7.1.3结构体变量的使用结构体变量的使用n如果成员本身又是一个结构体变量,则如果成员本身又是一个结构体变量,则必须逐级找到最低级的成员才能使用。必须逐级找到最低级的成员才能使用。struct Date int year;int month;int day;struct Student int nu

9、m;char name20;char sex;struct Date birthdate;float score;struct Student s1;s1.birthday.month=6;7.1.3结构体变量的初始化结构体变量的初始化n在声明结构体变量的同时设置初值。在声明结构体变量的同时设置初值。例如:例如:struct stuint num;char*name;char sex;float score;boy1,boy2=102,“Zhang ping”,M,78.5;即:即:boy2.num=102,boy2.name=“Zhang ping”,boy2.sex=M,boy2.scor

10、e=78.57.1.3结构体变量的初始化结构体变量的初始化n结构体变量声明之后,不能使用赋值语句给其整结构体变量声明之后,不能使用赋值语句给其整体赋值。体赋值。n例如:例如:struct stu boy2;boy2=102,“Zhang ping”,M,78.5;/错误错误赋值语句:赋值语句:boy2.num=102;boy2.name=“Zhang ping”;/对对 boy2.sex=M,boy2.score=78.5 /对对 boy2=boy1;/对对7.1.3结构体变量的初始化结构体变量的初始化n嵌套的结构体变量的初始化:嵌套的结构体变量的初始化:struct Student int

11、num;char name20;char sex;struct Date birthdate;float score;s1=1,Li hong,M,2012,5,30,78.5;即即 s1.birthdate.year=2012 s1.birthdate.month=5 s1.birthdate.day=307.2结构体数组的使用结构体数组的使用n结构体数组结构体数组:当数组的数据类型为结当数组的数据类型为结构体类型。构体类型。n结构体数组:用于表示具有相同结结构体数组:用于表示具有相同结构的一个群体。构的一个群体。如如:某班的所有学生档案表某班的所有学生档案表 某单位全体职工的工资表等某单位

12、全体职工的工资表等 7.2结构体数组的使用结构体数组的使用例如:例如:struct stu boys5;7.2结构体数组的使用结构体数组的使用n在声明数组时,对结构体数组作初始化在声明数组时,对结构体数组作初始化例如:例如:struct stu int num;char*name;char sex;float score;boy2=10,Li ping,F,45,11,Zhang hong,M,62.5;10,Li ping,F,45,11,Zhang hong,M,62.5;替换替换7.2结构体数组的使用结构体数组的使用n对数组的全部元素初始化赋值时,可不必给出数对数组的全部元素初始化赋值时

13、,可不必给出数组的长度。组的长度。例如:例如:struct stu int num;char*name;char sex;float score;boy=10,Li ping,F,45,11,Zhang hong,M,62.5;7.2结构体数组的使用结构体数组的使用例例7-2 设学生的信息包括设学生的信息包括:学号、姓名、学号、姓名、性别、成绩。设计程序要求输入一性别、成绩。设计程序要求输入一组学生的信息,统计平均成绩,并组学生的信息,统计平均成绩,并按照成绩由低到高的顺序输出学生按照成绩由低到高的顺序输出学生全部信息。全部信息。#define len 3void main(void)int

14、i,j,k;struct stu int num;char name20;char sex;float score;boylen,temp;float avg=0;/输入一组学生的记录输入一组学生的记录,并统计平均成绩并统计平均成绩for(i=0;ilen;i+)printf(输入第输入第%d条记录条记录n,i+1);printf(num?);scanf(%d,&boyi.num);printf(name?);while(getchar()=n);gets(boyi.name);/输入姓名输入姓名 下一个语句是输入字符串,则需要下一个语句是输入字符串,则需要清除键盘缓冲区回车清除键盘缓冲区回车

15、 printf(sex?);scanf(%c,&boyi.sex);/输入性别输入性别 printf(score?);scanf(%f,&boyi.score);/输入成绩输入成绩avg+=boyi.score;/累加成绩到累加成绩到avg中中avg/=len;/求平均成绩求平均成绩for(i=0;ilen-1;i+)k=i;for(j=i+1;jboyk.score)k=j;temp=boyk;boyk=boyi;boyi=temp;用选择法排序结构数组中用选择法排序结构数组中的各元素的各元素/输出排序的结构数组输出排序的结构数组printf(n%5s%10s%3s%6sn,num,name

16、,sex,score);for(i=0;i成员名成员名 等同于等同于(*结构指针变量结构指针变量).成员名成员名 7.3结构体指针变量的使用结构体指针变量的使用例如:例如:struct stuint num;char*name;char sex;float score;*pstu,boy=102,Zhang ping,M,78.5;pstu=&boy;pstu-num或或(*pstu).num 等同于:等同于:boy.num注意:注意:(*pstu)两侧的括号不可少,两侧的括号不可少,因为成员符因为成员符“.”的优的优先级高于先级高于“*”。7.3结构体指针变量的使用结构体指针变量的使用 例如

17、:例如:int c5=1,2,3;struct st int a;int*b;struct st s=10,&c0,20,&c3,*p=s;printf(“%dn,p-a);printf(%dn,+(*(+p)-b);n 输出结果:输出结果:10 1 10 2012300ps:a bc+p例例7-3 结构体指针变量的应用。结构体指针变量的应用。struct stuint num;char*name;char sex;float score;boy1=102,Zhang ping,M,78.5,*pstu;main()pstu=&boy1;printf(Number=%dnName=%sn,bo

18、y1.num,boy1.name);printf(Sex=%cnScore=%fnn,boy1.sex,boy1.score);printf(Number=%dnName=%sn,(*pstu).num,(*pstu).name);printf(Sex=%cnScore=%fnn,*pstu).sex,(*pstu).score);printf(Number=%dnName=%sn,pstu-num,pstu-name);printf(Sex=%cnScore=%fnn,pstu-sex,pstu-score);例例7-4 结构体数据的动态内存分配结构体数据的动态内存分配。struct stu

19、 boy1;n结构体变量结构体变量 boy1的内存分配是静态分配的内存分配是静态分配的。的。n结构体数据的内存分配也可为动态的结构体数据的内存分配也可为动态的#include#include void main()struct stu int num;char*name;char sex;float score;*p;p=(struct stu*)malloc(sizeof(struct stu);/动态分配一个结构体数据的空间动态分配一个结构体数据的空间 p-num=300;/给结构体的各成员赋值给结构体的各成员赋值 p-name=李红李红;p-sex=m;p-score=88.5;prin

20、tf(Num=%d,Name=%s,Sex=%c,Score=%.1fn,p-num,p-name,p-sex,p-score);free(p);/释放动态分配的结构体数据的空间释放动态分配的结构体数据的空间Num=300,Name=李红李红,Sex=m,core=88.5pnum name sex score李红李红7.4用用typedef声明新类型名声明新类型名nTypedef为已存在的数据类型定义一个新的类为已存在的数据类型定义一个新的类型名字(类型别名)。型名字(类型别名)。n格式:格式:typedef 类型名称类型名称 类型标识符类型标识符;n“类型名称类型名称”为已存在的数据类型名

21、称为已存在的数据类型名称n“类型标识符类型标识符”为新命名的类型名称。为新命名的类型名称。例如:例如:typedef int INTEGER;typedef unsigned int COUNT;7.4用用typedef声明新类型名声明新类型名n新的类型名称定义之后,就可像基本数据类型新的类型名称定义之后,就可像基本数据类型使用。使用。例如:例如:typedef int INTEGER;typedef unsigned int COUNT;INTEGER i,j;COUNT c;相当于相当于int i,j;unsigned int c;7.4用用typedef声明新类型名声明新类型名ntype

22、def 的主要应用形式的主要应用形式:(1)为基本数据类型定义新的类型名。为基本数据类型定义新的类型名。(2)为自定义数据类型(结构体、公用体和枚举类型)为自定义数据类型(结构体、公用体和枚举类型)定义一个简洁的类型名称。定义一个简洁的类型名称。例如:例如:typedef structint month;int day;int year;DATE;DATE birthday;DATE*p;7.4用用typedef声明新类型名声明新类型名ntypedef 的主要应用形式的主要应用形式:(3)为数组定义一个简洁的类型名称。为数组定义一个简洁的类型名称。例如:例如:typedef int NUM 1

23、00;NUM n;n:定义了长度为:定义了长度为100的整型数组变量的整型数组变量 7.4用用typedef声明新类型名声明新类型名ntypedef 的主要应用形式的主要应用形式:(4)为指针定义简洁的名称。为指针定义简洁的名称。例如:例如:typedef char*STRING;STRING csName=“Jhon”;7.4用用typedef声明新类型名声明新类型名ntypedef 的主要应用形式的主要应用形式:5)为函数指针定义新的名称。为函数指针定义新的名称。例如:例如:typedef int(*FUN)(int a,int b);FUN f;例例7-5为函数指针定义新的类型名称的实例

24、。为函数指针定义新的类型名称的实例。#include int Max(int x,int y)return xy?x:y;void main()typedef int(*FUN)(int,int);FUN pFun;/声明函数指针变量声明函数指针变量pFun pFun=Max;/将函数将函数Max赋给函数指针变量赋给函数指针变量 printf(%dn,pFun(2,3);/通过函数指针调用函数通过函数指针调用函数Max7.5单向链表的建立与基本操作单向链表的建立与基本操作7.5.1 什么叫链表什么叫链表?7.5.2 如何定义结点的数据类型如何定义结点的数据类型7.5.3 创建动态链表创建动态链

25、表7.5.1 什么叫链表什么叫链表?n链表链表:物理存储单元上非连续、非顺序的存储物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序通过链表中的指结构,数据元素的逻辑顺序通过链表中的指针链接次序实现的。针链接次序实现的。n链表由链表由n个结点组成,结点可以动态生成。个结点组成,结点可以动态生成。n每个结点包括两个域:每个结点包括两个域:ndata:存储数据域:存储数据域nnext:存储后继结点地址的指针域。:存储后继结点地址的指针域。具有头指针的单向链表具有头指针的单向链表7.5.2如何定义结点的数据类型如何定义结点的数据类型n单向链表单向链表:如果链表中的每个结点中只有一个:如果链表

26、中的每个结点中只有一个指向后继结点的指针,则该链表称为单链表。指向后继结点的指针,则该链表称为单链表。n头结点头结点:链表的第一个结点。:链表的第一个结点。n尾结点尾结点:链表中的最后一个结点。尾结点的指:链表中的最后一个结点。尾结点的指针域为针域为NULL(空指针)(空指针)头指针头指针:指向头结点:指向头结点的指针变量。通过头指针可以访问链表中的任的指针变量。通过头指针可以访问链表中的任何结点。何结点。具有头指针的单向链表具有头指针的单向链表7.5.2如何定义结点的数据类型如何定义结点的数据类型n单向链表的结点数据类型,可用结构体类单向链表的结点数据类型,可用结构体类型实现。型实现。n格式

27、为:格式为:struct nodeDATA data;struct node*next;nDATA可为基本类型或用户自定义的数据类型。可为基本类型或用户自定义的数据类型。7.5.2如何定义结点的数据类型如何定义结点的数据类型例如:例如:struct nodeint data;struct node*next;7.5.2如何定义结点的数据类型如何定义结点的数据类型例如:例如:typedef struct int num;char*name;char sex;float score;Student;struct nodeStudent data;struct node*next;typedef s

28、truct node Student data;struct node*next;Node;定义节点类型定义节点类型给结点类型给结点类型struct node定义一个新定义一个新的类型名的类型名Node;例例7-6 建立一个简单的单向链表。建立一个简单的单向链表。n创建的含有创建的含有3个结点个结点a、b、c的单向链表,的单向链表,并用头指针并用头指针head指向。指向。n定义一函数:定义一函数:printList(Node*head)n完成:通过头指针输出单向链表中的所有结完成:通过头指针输出单向链表中的所有结点信息。点信息。1 李华李华 2 张红张红 3 王国维王国维 headnum na

29、me Node#include#include typedef struct stu int num;char name20;struct stu*next;Node;void main()Node*head,a,b,c;head=&a;a.num=1;strcpy(a.name,张红张红);a.next=&b;/a.next指向指向b结点结点生成生成a结点的内容结点的内容head指向指向a结点结点 b.num=2;strcpy(b.name,李华李华);b.next=&c;/b.next指向指向c结点结点 c.num=3;strcpy(c.name,王国维王国维);c.next=NULL;/

30、c.next指向空指向空 printList(head);/打印整个链表打印整个链表void printList(Node*head)Node*p;p=head;while(p!=NULL)printf(Num=%d,Name=%sn,p-num,p-name);p=p-next;生成生成b结点的内容结点的内容生成生成c结点的内容结点的内容通过头结点遍通过头结点遍历整个链表中历整个链表中的所有结点并的所有结点并打印打印7.5.3 创建动态链表创建动态链表n动态链表动态链表:在程序运行时动态生成链表中在程序运行时动态生成链表中的各结点(即结点的空间是动态内存分的各结点(即结点的空间是动态内存分配

31、的)。配的)。n动态链表的创建:动态链表的创建:结点的定义:结点的定义:typedef struct stu int num;char name20;struct stu*next;Node;num namenextNode stu7.5.3 创建动态链表创建动态链表n设插入的结点放在链表的头部(即成为链表的设插入的结点放在链表的头部(即成为链表的新的头结点)。新的头结点)。n设单向链表有一个头指针设单向链表有一个头指针head,初始状态为,初始状态为NULL,表示链表为空。,表示链表为空。headNULLnum name headhead7.5.3 创建动态链表创建动态链表1.插入一个结点到

32、单向链表头部的过程:插入一个结点到单向链表头部的过程:1)动态申请一结点空间,指针动态申请一结点空间,指针p指向该结点。指向该结点。即即 p=(Node*)malloc(sizeof(Node);2)给给p指向的结点,赋予内容。即指向的结点,赋予内容。即*p=s;3)判断链表为空(即判断链表为空(即head=NULL)时,则)时,则head=p;否则将否则将p指向的结点加到链表头部。即:指向的结点加到链表头部。即:p.next=head;head=p;pheadhead7.5.3 创建动态链表创建动态链表1.插入一个结点到单向链表头部的过程:插入一个结点到单向链表头部的过程:1)动态申请一结点

33、空间,指针动态申请一结点空间,指针p指向该结点。指向该结点。即即 p=(Node*)malloc(sizeof(Node);2)给给p指向的结点,赋予内容。即指向的结点,赋予内容。即*p=s;结构体变量赋值结构体变量赋值3)判断链表为空(即判断链表为空(即head=NULL)时,则)时,则head=p;否则将否则将p指向的结点加到链表头部。即:指向的结点加到链表头部。即:p.next=head;head=p;phead7.5.3 创建动态链表创建动态链表2 通过循环,实现向链表插入通过循环,实现向链表插入n个结点。个结点。#include#include#include#define len

34、3typedef struct stu int num;char name20;struct stu*next;Node;/插入一结点插入一结点s到到head指向的链表中指向的链表中,插到头插到头Node*insert(Node*head,Node s)Node*p;p=(Node*)malloc(sizeof(Node);if(p=NULL)exit(1);*p=s;if(head=NULL)head=p;else p-next=head;/p.next指向旧头结点指向旧头结点 head=p;/head指向新头结点指向新头结点return head;结构体变量赋值相当于:结构体变量赋值相当于

35、:p-num=s.num;strcpy(p-name,s.name);p-next=s.next;/通过头指针通过头指针head遍历整个链表遍历整个链表void printList(Node*head)Node*p;p=head;while(p!=NULL)printf(Num=%d,Name=%sn,p-num,p-name);p=p-next;headpvoid main()Node*head;int i;Node s;head=NULL;/向链表插入向链表插入len个结点个结点 for(i=0;ia p-b p-c7.6.3联合体变量的使用联合体变量的使用n联合体作为在结构体的成员联合体

36、作为在结构体的成员n结构体作为联合体的成员结构体作为联合体的成员例如:例如:struct int age;char*addr;union int i;char*ch;x;y5;访问访问y2中联合体中联合体x的成员的成员i,可写成:,可写成:y2.x.i;访问访问y2中联合体中联合体x的字符串指针的字符串指针ch的第一个字符可写成:的第一个字符可写成:*(y2.x.ch)或或 *y2.x.ch 例例7-8设有一个教师与学生通用的表格,教师信息有设有一个教师与学生通用的表格,教师信息有姓名、年龄、职业类别和教研室四项。学生信息有姓姓名、年龄、职业类别和教研室四项。学生信息有姓名、年龄、职业类别和班

37、级四项。编程输入人员数据,名、年龄、职业类别和班级四项。编程输入人员数据,并输出结果。并输出结果。解题思路:解题思路:n用一个结构体数组用一个结构体数组body来存放人员数据来存放人员数据n结构体共有结构体共有4个成员个成员:name、age、type和和depandepa:联合体类型,这个联合体由两个成员组成:联合体类型,这个联合体由两个成员组成:nclass:整型量:整型量noffice:字符数组。:字符数组。ntype:字符型:字符型:为为s时表示时表示depa存放的是班级存放的是班级class信息,否则存放的是教师的办公室地点。信息,否则存放的是教师的办公室地点。structchar

38、name10;int age;char type;union int class;char office10;depa;body2;void main()int n,i;for(i=0;i2;i+)printf(input:nname age type departmentn);scanf(%s%d%c,bodyi.name,&bodyi.age,&bodyi.type);if(bodyi.type=s)scanf(%d,&bodyi.depa.class);else scanf(%s,bodyi.depa.office);printf(name age type class/officen)

39、;for(i=0;i2;i+)if(bodyi.type=s)printf(%s%3d%3c%dn,bodyi.name,bodyi.age,bodyi.type,bodyi.depa.class);else printf(%st%3d%3c%sn,bodyi.name,bodyi.age,bodyi.type,bodyi.depa.office);7.7 枚举类型枚举类型 enumn枚举类型是一个被命名的枚举类型是一个被命名的整型常量整型常量的集的集合。合。n当一个变量只有几种可能的取值时,如当一个变量只有几种可能的取值时,如表示星期或月份的变量,就可以定义为表示星期或月份的变量,就可以定义

40、为枚举类型。枚举类型。7.7 枚举类型枚举类型 enumn枚举类型的声明一般形式为枚举类型的声明一般形式为:enum 枚举名枚举名 标识符标识符1=整型常数整型常数1,标识符标识符2=整型常数整型常数2,.标识符标识符n=整型常数整型常数n,;n标识符标识符1、标识符、标识符2标识符标识符n:枚举元素或枚举常量。枚举元素或枚举常量。n每一个枚举常量都代表一个整数。如果省掉每一个枚举常量都代表一个整数。如果省掉“=整型常数整型常数i”时时,则从第一个标识符开始则从第一个标识符开始,依次给标识符赋值为依次给标识符赋值为0,1,2,.n但当枚举中的某个成员赋值后但当枚举中的某个成员赋值后,其后的成员

41、按依次加其后的成员按依次加1的规则的规则确定其值。确定其值。7.7 枚举类型枚举类型例如:例如:enum Weekday SUN,MON,TUE,WED,THU,FRI,SAT;声明的枚举类型声明的枚举类型enum Weekday,其枚举元素,其枚举元素SUN、MON、TUE、WED、THU、FRI、SAT的值分别为的值分别为0、1、2、3、4、5、6。7.7 枚举类型枚举类型例如:例如:enum string x1,x2=5,x3,x4=8 x;则则x1=0,x2=5,x3=6,x4=8。7.7 枚举类型枚举类型n枚举类型定义后枚举类型定义后,可用于定义枚举变量。可用于定义枚举变量。例如:例

42、如:enum Weekday x;声明的枚举型变量声明的枚举型变量x,x的取值为枚举类型规定的取值为枚举类型规定的标识符常量之一。的标识符常量之一。例如:例如:x=SUN;或或 x=TUE;或或 x=WED;n引用枚举常量时,相当于引用枚举常量对应的引用枚举常量时,相当于引用枚举常量对应的整数值。整数值。例如例如:x=SUN;等同于等同于 x=0;x=TUE;等同于等同于 x=2;例例7-9 口袋里有红、黄、绿、黑、白口袋里有红、黄、绿、黑、白5中颜色的中颜色的球若干个,每次从口袋里取出三种不同的颜色球,球若干个,每次从口袋里取出三种不同的颜色球,输出可能的取法组合情况。输出可能的取法组合情况

43、。n解题思路:解题思路:(1)将将5中颜色的球定义为枚举类型中颜色的球定义为枚举类型 enum Color red=0,yellow,green,white,black;(2)从口袋里取出三种不同的颜色球从口袋里取出三种不同的颜色球,用三重循环完用三重循环完成,循环控制变量成,循环控制变量i,j,k的类型为的类型为enum Color for(i=red;i=black;i+)for(j=red;j=black;j+)for(k=red;k=black;k+).n解题思路:解题思路:(3)定义函数:根据定义函数:根据i的值,打印对应的球的值,打印对应的球颜色颜色 void printBalls

44、(enum Color i);void printBalls(enum Color i);enum Color red=0,yellow,green,white,black;void main()enum Color i,j,k;int n,loop;n=0;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for(k=red;k=black;k+)if(k!=i)&(k!=j)n=n+1;printf(%5d,n);printBalls(i);printBalls(j);printBalls(k);printf(n);printf(nTota

45、l:%5dn,n);void printBalls(enum Color i)switch(i)case red:printf(%10s,red);break;case yellow:printf(%10s,yellow);break;case green:printf(%10s,green);break;case white:printf(%10s,white);break;case black:printf(%10s,black);break;1 red yellow green2 red yellow white3 red yellow black60 black white greenTotal:60本章小结本章小结

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C语言程序设计实用教程》课件第7章 用户自定义类型.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|