C++ enum枚举类型的用法

C++: enum枚举类型的用法


 


课题目标


 

了解enum枚举类型的基本形式,掌握enum枚举类型的使用方法。

课题引入


 

从一个对一周(包含周一到周日)的每天进行声明与赋值,来引出enum使用的便捷性,引出enum。

课题详解


 

 

一,枚举类型的说明

枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量。

之所以被称为枚举类型,就是因为命名常量是作为数据类型定义的一部分而枚举或列出的

以下是枚举类型声明的示例:

1 enum <类型名> {<枚举常量表>};

 关键字enum:说明接下来定义的是一个枚举类型。

 类型名字:指明此处定义的枚举类型的名字。 

 常量表:由枚举常量(或称枚举成员)构成。枚举常量表列出枚举类型所有可能的取值,各枚举常量之间用“,”间隔,且各枚举常量必须不同。
 
例如(解引题):
1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday

枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。

例如,以下定义非法

1 enum book{'a','b','c','d'};//枚举类型不能是字符常量
2 
3 enum year{1998,1999,2010,2012};//枚举常量不能是整形常量

二,枚举类型的赋值

1.枚举类型在声明之后具有默认值。默认从0开始,依次为0,1,2,3......

例如(解引题):

1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
2 //SUN=0,MON=1,依次为0,1,2,3.....

2.同时也可以在声明中直接赋值。它们必须是整数。枚举变量相当于整型变量的一个子集

例如(解引题):

1 enum Weekday{SUN=7,MON=2,TUE,WED,THU,FRI,SAT};
2 //定义SUN=7,MON=2,则后面的值在前面值的基础上依次加1,即TUE=3,WED=4......
1 enum weekday{SUN=1.1,MON=1.2,......};//枚举变量赋值只能是整数,相当于整型变量的一个子集,此语句非法

 

3.对枚举元素按常量处理,但不能对它们直接赋予常量值。

例如(解引题):

1 enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
2 SUN=0;//SUN是枚举元素,不能赋值,此语句非法

若将整数值赋给枚举变量需要进行强制类型转换:值前面加(类型名)

例如(解引题):

enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
SUN=(Weekday)7;//在值前面加(类型)是常用的强制类型转换方法

 

三,枚举类型的运用

例题:口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中任意取出三个球,问得到3中不通过颜色的球的可能取法。

解题思路:球只有五种颜色,可用枚举类型表示球的颜色。可以利用三重循环穷举出每一种可能取法。

 1 #include<iostream>
 2   
 3 using namespace std;
 4  
 5 void main()
 6 {
 7     enum colors{red,yellow,blue,white,black};
 8  
 9     colors color;  
10  
11     int i,j,k,n=0,loop;//n累计组合数
12  
13     for(i=red;i<=black;i++)//当i为某一颜色时
14     {
15         for(j=red;j<=black;j++)//当j为某一颜色时
16         {
17             if(i!=j)//若前两个球的颜色不同
18             {
19                 for(k=red;k<=black;k++)//只有前两个球的颜色不同,才需要检查第3个球的颜色
20                 {
21                     if(k!=i&&k!=j)//三个球的颜色都不同
22                     {
23                         n=n+1;
24  
25                         cout<<"   "<<n;//输出当前的n值作为组合的编号
26  
27                         for(loop=1;loop<=3;loop++)//先后对三个球做处理
28                         { 
29                             switch(loop)
30                             {
31                             case 1:color=colors(i);break;//colors(i)是强制类型转换,使color的值为i
32  
33                             case 2:color=colors(j);break;//                                   j
34  
35                             case 3:color=colors(k);break;//                                   k
36  
37                             default :break;
38                             }
39  
40                             switch(color)   //判断color的值,输出相应的颜色
41                             {
42                             case red:cout<<"   "<<"red";break;
43  
44                             case yellow:cout<<"   "<<"yellow";break; 
45 
46                             case blue:cout<<"   "<<"blue";break; 
47                        
48                             case white:cout<<"   "<<"white";break;
49  
50                             case black:cout<<"    "<<"black";break;         
51 
52                            default :break; 
53                             } 
54                          }
55                          cout<<endl; 
56                       } 
57                    }
58              }
59          }
60      }
61 cout<<"共有"<<n<<"个组合"<<endl;  //输出组合的个数 
62 }

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-09-15 21:12  LGboy  阅读(18035)  评论(0编辑  收藏  举报