一.课程导入
在实际问题中我们会遇到一些数据只有有限的几种可能,虽然我们也可以用int等类型来表示他们,但是对数据的合法性检查却是很麻烦的事情。例如,如果用1到7来表示一个星期里面的7天,那么变量8便是不合理的。这时候我们便可以使用枚举来解决问题。
二.教学目标
了解枚举是如何使用的并且会自己应用
三.教学内容
枚举类型的声明形式
enum 枚举类型名{变量值列表}; 例如: enum weekday{sun,mon,tue,wed,thu,fri,sat}; |
枚举类型应用说明
1.默认情况下,设置第一个枚举量为0,下一个为1,以此类推。例如上述生命中sun为0而sat为7.
2.我们也可以在声明时自己定义枚举元素的值
例如: enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}; |
这里面我们自己定义了sun,mon的值,mon后面的值以此类推加1,sat将为6.
3.枚举元素我们是当作常量处理的,我们是不可以对其赋值的
例如:
sun=0;(这句话是非法的)
枚举类型的深入理解
1.enum语句只是定义数据类型, 没有创建任何变量,当以后创建这个数据类型的变量时,他们看起来就只是一个整数。
例如: weekday a; |
这里面weekday是数据类型名称,a是定义的变量。
接下来我们还可以枚举常量来给他赋一个值。
例如: a=sun; |
2.整数值不能直接赋值给枚举变量,如果需要将整数值赋值给枚举变量,应该进行强制类型转化。
3.即使枚举类型中的值实际存储为整数,但也不能总是将整数值替换为符号名称。
例如: a=0;(这是不对的) |
但是我们可以用整数值来测试枚举变量。
例如: if(a==sun)和if(a==0)这两个是等效的。 |
4.枚举列表中的mon,wed,sun等这些标识符的作用范围是全局的,不能再定义与他们名字相同的变量。
例题分析
某次体育比赛结果有四种可能:WIN,LOSE,TIE,CANCEL,编写程序顺序输出这四种情况(教材54页)
#include<iostream>
using namespace std;
enum GameResult{WIN,LOSE,TIE,CANCAL};
int main()
{
GameResult result;
enum GameResult omit=CANCEL;//应用枚举常量初始化
for(int count=WIN;count<=CANCEL;count++)//把枚举类型的值赋值给整数,枚举和int型可以进行比较
{
result=GameResult(count);//强制类型转化
if(result==omit)
cout<<"The game was cancelled"<<endl;
else
{
cout<<"The game was played"<<endl;
if(result==WIN)
cout<<"and we won"
else(result==LOSE)
cout<<"and we lost"
}
}
return 0;
}
口袋中有红黄蓝白黑5种颜色的球若干个,每次从口袋中取出3个不同颜色的球,问有多少种取法?(教材63页2-34)
#include<iostream>
using namespace std;
enum colour{red,yellow,blue,white,black};//枚举
void printcolour(int i)
{
switch(i)
{
case red:cout<<"红色;break;
case yellow:cout<<"黄色;break;
case blue:cout<<"蓝色;break;
case white:cout<<"白色;break;
case black:cout<<"黑色;break;
}
}
int main()
{
int cout=0,i=red,j=yellow,k=blue;
for(i;i<=blue;i++)
for(j;j<=white;j++)
{
if(i<j)
for(k;k<=black;k++)
if(i<k&&j<k)
{
cout++;
printcolour(i);
printcolour(j);
printcolour(k);
}
}
}
return 0;
}