c语言枚举法礼泡声次数,C语言枚举类型举例
C语言枚举类型举例
注:以下全部代码的执行环境为VC++ 6.0
宏和枚举的区别
宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源。
但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条enum {.....}明显比一大堆define更清晰,枚举也可以用来定义一些特殊类型,比如Bool,
如: type enum {FALSE,TRUE} Bool;
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。
1. 定义一种新的数据类型 - 枚举型
以下代码定义了这种新的数据类型 - 枚举型
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2. 使用枚举类型对变量进行声明
新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:
char a; //变量a的类型均为字符型char
char letter;
int x, y, z; //变量x,y和z的类型均为整型int
int number;
double m, n;
double result; //变量result的类型为双精度浮点型double
既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY yesterday;
enum DAY today;
enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY
方法二:类型定义与变量声明同时进行:
enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //变量workday的类型为枚举型enum DAY
enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week
enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量
方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
typedef enum workday
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
enum workday中的workday可以省略:
typedef enum
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
也可以用这种方式:
typedef enum workday
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
};
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示:
错误声明一:存在同名的枚举类型
typedef enum
{
wednesday,
thursday,
friday
} workday;
typedef enum WEEK
{
saturday,
sunday = 0,
monday,
} workday;
错误声明二:存在同名的枚举成员
typedef enum
{
wednesday,
thursday,
friday
} workday_1;
typedef enum WEEK
{
wednesday,
sunday = 0,
monday,
} workday_2;
3. 使用枚举类型的变量
3.1 对枚举型的变量赋值。
实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
方法一:先声明变量,再对变量赋值
#include
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
int x, y, z;
x = 10;
y = 20;
z = 30;
enum DAY yesterday, today, tomorrow;
yesterday = MON;
today = TUE;
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
}
方法二:声明变量的同时赋初值
#include
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
int x=10, y=20, z=30;
enum DAY yesterday = MON,
today = TUE,
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
}
方法三:定义类型的同时声明变量,然后对变量赋值。
#include
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;
int x, y, z;
void main()
{
x = 10; y = 20; z = 30;
yesterday = MON;
today = TUE;
tomorrow = WED;
printf("%d %d %d \n", x, y, z); //输出:10 20 30
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}
方法四:类型定义,变量声明,赋初值同时进行。
#include
enum DAY
{
MON=1,
TUE,
WED,
THU,
FRI,
SAT,
SUN
}
yesterday = MON, today = TUE, tomorrow = WED;
int x = 10, y = 20, z = 30;
void main()
{
printf("%d %d %d \n", x, y, z); //输出:10 20 30
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}
3.2 对枚举型的变量赋整数值时,需要进行类型转换。
#include
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
enum DAY yesterday, today, tomorrow;
yesterday = TUE;
today = (enum DAY) (yesterday + 1); //类型转换
tomorrow = (enum DAY) 30; //类型转换
//tomorrow = 3; //错误
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30
}
3.3 使用枚举型变量
#include
enum
{
BELL = '\a',
BACKSPACE = '\b',
HTAB = '\t',
RETURN = '\r',
NEWLINE = '\n',
VTAB = '\v',
SPACE = ' '
};
enum BOOLEAN { FALSE = 0, TRUE } match_flag;
void main()
{
int index = 0;
int count_of_letter = 0;
int count_of_space = 0;
char str[] = "I'm Ely efod";
match_flag = FALSE;
for(; str[index] != '\0'; index++)
if( SPACE != str[index] )
count_of_letter++;
else
{
match_flag = (enum BOOLEAN) 1;
count_of_space++;
}
printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);
printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
}
输出:
match 2 times
count of letters: 10
Press any key to continue
4. 枚举类型与sizeof运算符
#include
enum escapes
{
BELL = '\a',
BACKSPACE = '\b',
HTAB = '\t',
RETURN = '\r',
NEWLINE = '\n',
VTAB = '\v',
SPACE = ' '
};
enum BOOLEAN { FALSE = 0, TRUE } match_flag;
void main()
{
printf("%d bytes \n", sizeof(enum escapes)); //4 bytes
printf("%d bytes \n", sizeof(escapes)); //4 bytes
printf("%d bytes \n", sizeof(enum BOOLEAN)); //4 bytes
printf("%d bytes \n", sizeof(BOOLEAN)); //4 bytes
printf("%d bytes \n", sizeof(match_flag)); //4 bytes
printf("%d bytes \n", sizeof(SPACE)); //4 bytes
printf("%d bytes \n", sizeof(NEWLINE)); //4 bytes
printf("%d bytes \n", sizeof(FALSE)); //4 bytes
printf("%d bytes \n", sizeof(0)); //4 bytes
}
typedef struct weekday_st
{
enum week {sun=123456789,mon,tue,wed,thu,fri,sat };
enum day {monring, moon, aftermoon} ;
}weekday_st;
int main(int argc, char *argv[])
{
printf( "sizeof(weekday_st)=%d\n ", sizeof(weekday_st));
printf( "sizeof(weekday)=%d\n ", sizeof(weekday_st::week));
printf( "sizeof(day)=%d\n ", sizeof(weekday_st::day));
return 0;
}
sizeof(weekday_st)=1
sizeof(weekday)=4
sizeof(day)=4
printf( "sizeof(weekday_st)=%d\n ", sizeof(weekday_st));
这里因为结构体里面并没有定义任何的变量
所以这个结构是空的,但是用sizeof进行运算的话也不能返回0
因为毕竟存在着这么一个东西
所以这时sizeof返回一个在机器里面所能表达的最小的存储单位的值
一般的PC里面最小的存储单位的值是char
所以sizeof返回1
printf( "sizeof(weekday)=%d\n ", sizeof(weekday_st::week));
printf( "sizeof(day)=%d\n ", sizeof(weekday_st::day));
因为枚举量是当作整型常量来处理的
所以上面这两个sizeof都是返回4
这里的enum week和enum day只是内嵌“类型”,而不是成员变量,如果改成:
typedef struct weekday_st
{
enum week {sun=123456789,mon,tue,wed,thu,fri,sat } ew;
enum day {monring, moon, aftermoon} ed;
}weekday_st;
sizeof(weekday_st)=8
sizeof(weekday)=4
sizeof(day)=4
c语言枚举法礼泡声次数,C语言枚举类型举例相关推荐
- c语言冒泡排序法程序填空_【C语言】两种方式实现冒泡排序算法
题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...
- c语言 乘除法优先级,运算符运算符优先级 - C语言教程
运算符优先级 运算符的优先级确定表达式中项的组合.这会影响到一个表达式如何计算.某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级. 例如 x = 7 + 3 * 2, ...
- c语言筛选法_「干货」C语言经典算法筛选法求质数,极少数人用过的素数求解法...
小编是一个有着6年工作经验的工程师,关于C++编程,自己有做材料的整合,一个完整的C++编程学习路线,学习资料和工具,能够进我的群10048,-83029收取,免费送给大家,希望你也能凭着自己的努力, ...
- c语言 老式手机键盘的按键次数,C语言编程题目(1)字符串格式化操作 手机键盘次数统计-Go语言中文社区...
题目如下: 本来遇到一些问题,还好都解决了.这里记录一下: 0x01 回顾gets.fgets.scanf函数的使用和区别 1 #include 2 #include 3 4 int main(voi ...
- C语言冒泡法输出成绩与学号,C语言:根据成绩进行冒泡排序,学号也得跟着动,输出的结果...
满意答案 mzuhvg 2013.12.31 采纳率:58% 等级:11 已帮助:10668人 #include void bubble_sort(int a[][5]); void print ...
- c语言枚举法课程设计报告,枚举法的程序实现及优化
计新明 内容分析 本部分内容是教育科学出版社出版的必修1<数据与计算>第四单元第一节中的内容,整本书的思路是初始数据与计算.编程计算.认识数据.计算与问题解决.数据分析与人工智能,第四章属 ...
- java穷举法解方程_枚举法(穷举法)_Java语言程
枚举法(穷举法)_Java语言程 3.5.1 枚举法(穷举法) 枚举法就是把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出. [例3-20] 百元买百鸡:用一百元钱买一百只鸡.已知公鸡5元/ ...
- c语言穷举算法 枚举法,c语言枚举法(穷举法).ppt
c语言枚举法(穷举法) 枚举法(穷举法) "笨人之法": 把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出. 百元买百鸡问题分析 百元买百鸡问题分析 优化 继续优化 利用 ...
- 2015年3月份ccf认证考试C语言(枚举法)
试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入 ...
最新文章
- 重磅!腾讯发布AI生态计划将赋能1000合作伙伴!
- iOS Automated Tests with UIAutomation
- PHP的Session机制
- OS_CORE.C(4)
- Qt定时器QBasicTimer、startTimer、QTimer使用总结
- Spring Core Container 源码分析七:注册 Bean Definitions
- 2021华为软挑赛题_思路分析——实时更新,做多少更多少(一)
- 解析数论 2: Abel求和法
- PHP图片与文字合成
- Go Tools安装
- NetBIOS name
- 2022年「博客之星」参赛博主:(天寒雨落)在等您评价 ~{附实时总榜单排名}
- CMD里如何用DiskPart命令删除分区
- 问题(ArcGIS):去除栅格不需要的Value(背景值0)
- 在WRDS database上下载TAQ数据
- 为什么你得不到 90 度的温暖
- [宋史学习] 赵元僖
- 浙大愤青郑强教授的演讲(大学生都来看看吧)
- js按钮绑定点击事件
- stm32的flash和ram占用情况