3.6 enum枚举类型

本节必须掌握的知识点:

  示例十一

   代码分析

   汇编解析

3.6.1 示例十一

enum定义枚举类型,它本质是一种整数类型(等同int)。所谓枚举就是一一列举的意思。在实际应用中,一个星期有七天,一年有十二个月等。如果我们把一个星期的天数一一列举出来,就可以用enum枚举类型列举。我们先看enum枚举类型定义的格式:

枚举的定义枚举类型定义的格式:

enum 枚举名{ 枚举值表 };

例:一星期有7天也就是有7种可能的值,请用枚举类型写出这7种可能。

示例代码十一

/*

   使用枚举类型表示周一到周日

*/

#include <stdio.h>

#include <stdlib.h>

enum Weekday    //定义enum枚举类型

{

    Sunday,

    Monday,

    Tuesday,

    Wendesday,

    Thursday,

    Friday,

    Saturday

}a, b, c;   //定义枚举变量,相当于enum Weekday a;enum Weekday b;enum Weekday c;

int main(void) {

    /*也可以在这里定义枚举变量

enum Weekday a;// enum Weekday枚举变量名

enum Weekday b;

enum Weekday c;

*/

a = Sunday; //枚举变量赋值

    b = Tuesday;

    c = Friday;

    printf("%d,%d,%d\n", a, b, c);

    system("pause");

    return 0;

}

●输出结果:

0,2,5

请按任意键继续. . .

3.6.2 代码分析

Enum关键词做了三件事:

1.定义了一个新的类型Weekday(整型);

2.定义了7个字面常量:

Sunday:0,Monday:1,Tuesday:2, Wendesday:3,Thursday:4,Friday:5,Saturday:6;

枚举类型默认从整数0开始递增,也可以修改每个枚举符号的初始值。例如:

Sunday:0,Monday:3,Tuesday:4, Wendesday:7,Thursday:8,Friday:9,Saturday:10;

3.给新的类型enum Weekday 定义了三个变量,依次为a、b、c。

主函数main里面是给三个枚举类型变量赋值,并以十进制打印出三个变量的值。

如果不使用枚举类型,而是使用#define宏定义也可以实现。示例十一枚举类型的定义可以改为:

#define Sunday      0

#define Monday      1

#define Tuesday     2

#define Wendesday   3

#define Thursday    4

#define Friday      5

#define Saturday    6

 注意

  1. 命名和变量的命名规则一样;
  2. 大括号末尾要用分号;
  3. 各项之间要用逗号隔开,最后一个不需要加逗号;
  4. 如果不给枚举值赋初始值,系统默认从0开始,依次递增;

5.类型名可以不写。

3.6.3 汇编解析

       ■汇编代码

;C标准库头文件和导入库

include vcIO.inc

;枚举类型等价于常量值定义

Sunday          = -1

Monday         = 1

Tuesday         = 2

Wendesday   = 3

Thursday        = 4

Friday            = 5

Saturday        = 6

.data      

a     sdword Sunday          ;枚举类型等价于sdword类型

b     sdword Tuesday

e     sdword Friday

.const    

szMsg db "%d,%d,%d",0dh,0ah,0

.code     

start:

       invoke printf,offset szMsg,a,b,e                

       ;     

       invoke _getch

       ret                       

end start

●输出结果:

-1,2,5

       在汇编语言中,枚举类型等同于常量符号的定义语句,编译器在编译时,将表示星期的符号替换为整数值。

反汇编代码

a = Sunday;  //枚举变量赋值

00141838  mov         dword ptr [_a (014A154h)],0 

    b = Tuesday;

00141842  mov         dword ptr [_b (014A148h)],2  

    c = Friday;

0014184C  mov         dword ptr [_c (014A13Ch)],5 

    printf("%d,%d,%d\n", a, b, c);

00141856  mov         eax,dword ptr [_c (014A13Ch)] 

0014185B  push        eax 

0014185C  mov         ecx,dword ptr [_b (014A148h)] 

00141862  push        ecx 

00141863  mov         edx,dword ptr [_a (014A154h)] 

00141869  push        edx 

0014186A  push        offset string "%d,%d,%d\n" (0147B30h) 

0014186F  call        _printf (014104Bh) 

00141874  add         esp,10h 

由上述反汇编代码可知,编译器在编译3-6-1.c源代码时,将枚举符号替换为对应的整数值。Sunday替换为0, Tuesday替换为2,Friday替换为5。

实验三十四:检测数据类型

    编写代码时,经常报错,而代码错误无非就两种可能。第一种:逻辑错误;第二种:语法错误。而定义数据类型和查看数据类型数据是我们编写代码不可或缺的,这里给出一个检测数据类型的小程序。(看不懂没关系,这些知识点会在以后的章节介绍。)

VS中新建项目3-6-2.c。代码如下:

/*

  检测数据类型

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <windows.h>

//函数定义

void Datatype(int i, char ch, float fl, char data_char[], int data_int[], int len, int option)

{

    int j;

    switch (option)

    {

        //输出整数

    case 1:

    {

        printf("int类型:%d\n", i);

        break;

    }

    //输出字符

    case 2:

    {

        printf("char类型:%c\n", ch);

        break;

    }

    //输出字符

    case 3:

    {

        printf("float类型:%f\n", fl);

        break;

    }

    //输出字符

    case 4:

    {

        printf("char 数组类型:  ");

        for (j = 0; j < len; j++)

        {

            printf("%c", data_char[j]);

        }

        printf("\n");

        break;

    }

    case 5:

    {

        printf("int 数组类型: ");

        for (j = 0; j < len; j++)

        {

            printf("%d", data_int[j]);

        }

        printf("\n");

        break;

    }

    default:

        printf("Error!\n");

        break;

    }

}

void main()

{

    int i, j, data_int[8];

    char ch, data_char[8];

    float fl;

    //初始化字符串

    char *str = "www.bcdaren.com";

    //初始化整形数组

    for (i = 0; i < 8; i++)

    {

        data_int[i] = i + 1;

    }

    //初始化字符串型数组

    for (j = 0; j < 8; j++)

    {

        data_char[j] = (char)(j + 65);

    }

    ch = 'x';

    fl = 6.5f;

    system("cls");//清除屏幕

    //输出整型i的值

    Datatype(i, 0, 0, 0, 0, 0, 1);

    //输出字符型ch的值

    Datatype(0, ch, 0, 0, 0, 0, 2);

    //输出浮点型fl的值

    Datatype(0, 0, fl, 0, 0, 0, 3);

    //输出a_char的值

    Datatype(0, 0, 0, data_char, 0, 8, 4);

    //输出str字符串的值

    Datatype(0, 0, 0, str, 0, 16, 4);

    //输出int 数组型a_char的值

    Datatype(0, 0, 0, 0, data_int, 8, 5);

    //default:Error!

    Datatype(0, 0, 0, 0, 0, 0, 10);

    system("pause");

}

●输出结果:

int类型:8

char类型:x

float类型:6.500000

char 数组类型:  ABCDEFGH

char 数组类型:  www.bcdaren.com

int 数组类型: 12345678

Error!

请按任意键继续. . .

练习

1、自己多练习使用本小节介绍的数据类型,这些数据类型将度过你的代码生涯。

2、使用已学的知识,在控制台输出下图的内容。

计算某游戏人物攻击力,其计算公式为:

人物攻击力 =人物力量*(装备+武器伤害)/100

现已知装备90,武器伤害97.5,要求输入人物力量、计算出人物攻击力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/329104.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

SpringCloud(1)-Eureka相关配置

1.新建Module-注册中心 作为注册中心 1.1配置 pom.xml <!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency&g…

面向对象-----继承

前面向大家介绍了面向对象中的封装性&#xff0c;今天再来向大家介绍面向对象的继承和多态的两大特性。 1.继承 1.1 为什么需要继承&#xff1f; 在java语言中&#xff0c;我们用类来描述世间万物&#xff0c;虽然万物非常复杂&#xff0c;但总有一些共同点&#xff0c;如果…

【贪心算法题目】

1. 柠檬水找零 这一个题目是一个比较简单的模拟算法&#xff0c;只需要根据手里的钱进行找零即可&#xff0c;对于贪心的这一点&#xff0c;主要是在20元钱找零的情况下&#xff0c;此时会出现两种情况&#xff1a;10 5 的组合 和 5 5 5 的组合&#xff0c;根据找零的特点&a…

网络模型-Qinq配置与应用

Qinq配置与应用 通过配置Qinq来实现利用公网提供的VLAN100使企业1互通&#xff0c;利用公网提供的VLAN200使企业2互通不同企业之间互相隔离。并通过在连接其它厂商设备的接口上配置修改0in0外层VLAN Tag的TPID值&#xff0c;来实现与其它厂商设备的互通。 一、创建VLAN #在Swi…

C - Sigma Problem(AtCoder Beginner Contest 353)

题目的链接: C - Sigma Problem (atcoder.jp) 题目&#xff1a; 样例&#xff1a; 题目大致含意: 给你n个数&#xff0c;让你对这n个数进行操作&#xff0c;比如当前是第i个&#xff0c;那么让a[i] 和 后面的每个数进行相加, 例如a[i] a[i 1] 注意的是a[i] a[i 1]的结果…

Stable Diffusion 3报告

报告链接&#xff1a;Stable Diffusion 3: Research Paper — Stability AI 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 引言 随着人工智能技术的飞速发展&#xff0c;文本到图像生成领域正经…

【map、set】C++用红黑树来封装map、set容器

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解map和set之用红黑树来封装map、set容器的相关内容。 如果看到最后您…

CasaOS系统玩客云安装内网穿透工具实现无公网IP远程访问

文章目录 前言1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 前言 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&am…

kubeadm部署k8s v1.28

一、主机准备 主机硬件配置说明 作用IP地址操作系统配置k8s-master01192.168.136.55openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node01192.168.136.56openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node02192.168.136.57openEuler-22.03-LTS-SP12颗CPU 4G内存 50G…

C++: 多态

目录 一、多态的概念 二、多态的定义及实现 2.1虚函数 2.2虚函数的重写 2.3多态的构成条件 2.4虚函数重写的两个例外 1.协变 2.析构函数的重写 2.5虚函数重写的实质 2.6override 和 final&#xff08;C11&#xff09; 1.final 2.override 2.7重载、覆盖&#xff0…

Leetcode刷题笔记2:数组基础2

导语 leetcode刷题笔记记录&#xff0c;本篇博客记录数组基础1部分的题目&#xff0c;主要题目包括&#xff1a; 977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 知识点 滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege" Dog dog = new Do…

Docker快速搭建Oracle服务

服务器&#xff1a;CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号&#xff0c;也可以不注册账号&#xff0c;直接使用下面的连接。 也可以写入多…

C语言 数组——计算最大值的函数实现

目录 计算最大值 计算最大值的函数实现 应用实例&#xff1a;计算班级最高分​编辑​编辑 返回最大值所在的下标位置 返回最大值下标位置的函数实现​编辑 一个综合应用实例——青歌赛选手评分​编辑​编辑​编辑​编辑​编辑 计算最大值 计算最大值的函数实现 应用实例&…

键盘盲打是练出来的

键盘盲打是练出来的&#xff0c;那该如何练习呢&#xff1f;很简单&#xff0c;看着屏幕提示跟着练。屏幕上哪里有提示呢&#xff1f;请看我的截屏&#xff1a; 截屏下方有8个带字母的方块按钮&#xff0c;这个就是提示&#xff0c;也就是我们常说的8个基准键位&#xff0c;我…

【蓝桥杯】

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int a,b,c,d; void solve() {char op;std::cin>>op;if(opA){std::string s;for(int i1;i&l…

Kafka-偏移量(含消费者事务)

Kafka概述 1.什么是偏移量&#xff1a; 在 Kafka 中&#xff0c;每个分区的消息都会被分配一个唯一的偏移量&#xff08;offset&#xff09;。偏移量简单来说就是消息在分区中的位置标识。 偏移量从 0 开始递增&#xff0c;每条消息的偏移量都会比前一条消息的偏移量大 1。 消…

如何对Linode Windows虚拟机进行“本地”访问

大部分时候&#xff0c;IT运维工作都可以远程进行&#xff0c;只要能通过网络访问被管理的系统&#xff0c;就可以执行几乎所有任务。如果因为某些原因导致无法通过网络访问呢&#xff1f;此时可能需要亲自到达相关硬件设备旁&#xff0c;通过“本地访问”来排错。 如果这些硬…

python实现520表白图案

今天是520哦&#xff0c;作为程序员有必要通过自己的专业知识来向你的爱人表达下你的爱意。那么python中怎么实现绘制520表白图案呢&#xff1f;这里给出方法&#xff1a; 1、使用图形库&#xff08;如turtle&#xff09; 使用turtle模块&#xff0c;你可以绘制各种形状和图案…