枚举类型的学习
枚举类型(enum)
(1)概念
定义:将变量的可能取值一一列举出来,变量的值只限于列举出来的值的范围内。
(2)定义
enum 枚举类型名 {枚举常量列表}[变量名];
(枚举常量不能赋值,是常量)
隐式定义:在C语言中规定了枚举常量的默认值依次等于0、1、2、……等整型数值。
显式定义:在定义类型的同时指定枚举常量的值,其中如有未指定的枚举常量,则根据前面的枚举常量的值依次递增1。
例如:
enum weekday {Sun,Mon,Tue,Wed.Thu,Fri,Sat};
0 1 2 3 4 5 6
enum op {plus=43,minus=45,multiply=42,divide=47};
enum workday {Mon=1,Tue,Wed,Thu,Fri};
2 3 4 5
先定义枚举类型再定义变量
定义枚举类型同时定义变量
直接定义枚举类型变量
(3)运算
enum weekday {Sun,Mon,Tue,Wed.Thu,Fri,Sat};
1)赋值运算
enum weekday a,b;
a=Mon;
强制类型转换:b=(enum weekday)1
2)关系运算
按照他们各自的枚举常量的大小进行比较
Sun>Sat 为0
注意:枚举值不能直接输入输出,输入通过序号转换,输出(通过switch语句)以字符串的方式输出。
题目:已知口袋中有红、黄、白、蓝、黑共5个不同颜色的小球,若依次从袋中取出3个,问得到
三种不同颜色的求可能取法,可能取法共有多少种?
#include <stdio.h>
enum ball {red,yellow,white,blue,black};
int main(void)
{
int i,t=0;
enum ball b[3];
for(b[0]=red;b[0]<=black;b[0]++)
for(b[1]=red;b[1]<=black;b[1]++)
for(b[2]=red;b[2]<=black;b[2]++)
{
if(b[0]!=b[1]&&b[0]!=b[2]&&b[1]!=b[2])
{
for(i=0;i<3;i++)
{
switch(b[i])
{
case red:printf("red\t");break;
case yellow:printf("yellow\t");break;
case white:printf("white\t");break;
case blue:printf("blue\t");break;
case black:printf("black\t");break;
}
}
++t;
printf("\n");
}
}
printf("一共有%d种取法\n",t);
return 0;
}
结果