吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1559|回复: 15
收起左侧

[学习记录] c语言学习的第7天:枚举类型的学习,枚举类型排列组合的例子

[复制链接]
laiyuou 发表于 2021-11-14 22:14

枚举类型:枚举类型的定义是:在这种类型中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。
枚举类型是一个钟基本数据类型和int,float double这种基本类型一样,而不是一种构造类型,因为他不能再分解为任何基本类型
枚举类型的定义和枚举变量的说明:
枚举类型的定义的一般形式为;
enum  枚举名{枚举表};// 在枚举表中应该罗列出所用可用的值。这些值也被称为枚举元素

2.枚举变量的说明:
如同结构和联合一样,枚举变量也可以用不同的方式说明,即先定义后说明,同时定义说明或者直接说明
例如:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
enum weekday a, b, c;
或者:
enum weekday{Sun,Mon,Tue,Wed,The,Fri,Sat} a,b,c;//a,b,c为枚举变量
或者:
enum {Sun,Mon,Tue,Wed,The,Fri,Sat};

枚举变量的赋值和使用:
枚举类型在使用中有以下规定:
1.枚举值是常量不是变量。不能再程序中用赋值语句再对他赋值
2.枚举元素本身有系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,3,4....

例子1:

int main()
{
    enum weekday
    {
        Sun,Mon,Tue,Wed,Thu,Fri,Sat
    }a,b,c;
    a = Sun;
    b = Mon;
    c = Tue;
    printf("%d,%d,%d\n", a, b, c);
    return 0;
}

我们只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量;如果一定要把数值赋予给枚举变量则必须强制转换类型
如:a =(enum weekday)2;
枚举元素不是字符常量也不是字符串常量,使用时不要加单,双引号
例子2

enum body
{
    a, b, c, d
}month[31], j;
int main()
{

    int i;
    j = a;
    for (i = 1; i <= 30; i++)
    {
        month[i] = j;

        j++;//对这个枚举类型变量j执行j++操作,想要指向下一个枚举元素,在vs中无法实现,需要自己编写一个函数
        if (j > d)   j = a;
    }
    for (i = 1; i <= 30; i++)
    {
        switch (month[i])
        {
        case a:printf("%2d  %c\t", i, 'a'); break;
        case b:printf("%2d  %c\t", i, 'b'); break;
        case c:printf("%2d  %c\t", i, 'c'); break;
        case d:printf("%2d  %c\t", i, 'd'); break;
        default:break;
        }
    }
    printf("\n");

    return 0;
}

例子3:

int main()
{
    enum week{Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun}day;
    int i = 0;

    while (1) {
        printf("请输入一个数值:\n");
        scanf_s("%d", &day);
        if (day == 0)break;
        switch (day)
        {
        case Mon:puts("Monday"); break;
        case Tues:puts("Thuesday"); break;
        case Wed:puts("Wednesday"); break;
        case Thurs:puts("Thursday"); break;
        case Fri:puts("Friday"); break;
        case Sat:puts("Saturday"); break;
        case Sun:puts("Sunday"); break;
        default:puts("Error");
        }
        printf("如果想退出请输入0\n");
    }

    return 0;
}

1.需要注意的是Mon,Tues,Wed这些标识的作用是范围的全局变量(严格来说就是main主函数内部),不能再定义与他们名字
相同的变量。
2.Mon,Tues,Wed等都是常量,不能对他们赋值,只能将他们的值赋给其他变量

例子4:
``int main()
{
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }day;
int i = 0;

while (1) {
    printf("请输入一个数值:\n");
    scanf_s("%d", &day);
    if (day == 0)break;
    switch (day)
    {
    case 1:puts("Monday"); break;
    case 2:puts("Thuesday"); break;
    case 3:puts("Wednesday"); break;
    case 4:puts("Thursday"); break;
    case 5:puts("Friday"); break;
    case 6:puts("Saturday"); break;
    case 7:puts("Sunday"); break;
    default:puts("Error");
    }
    printf("如果想退出请输入0\n");
}

return 0;

}

枚举类型变量需要存放的是一个整数,那么他的长度和int长度应该是相同的
例子:

int main()
{
    enum week{Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun}day = Mon;
    printf("%d,%d,%d,%d,%d\n", sizeof(enum week), sizeof(day), sizeof(Mon), sizeof(Wed),sizeof(int));
    return 0;
}

例子5枚举类型的排列组合

enum yaunsu
{
    a,b,c,d,e,f,g
};
int main()
{
    int i = 0,j = 0, k = 0;
    void pailie(int, int, int);
    pailie(i, j, k);
    return 0;
}
void pailie(int i, int j, int k)
{
    int sum = 0, loop = 0, loop1;
    for (i = a; i <= g; i++)
    {
        for (j = a; j <= g; j++)
        {
            if (i != j)
            {
                for (k = a; k <= g; k++)
                {
                    if (k != i && k != j)
                    {
                        sum++;
                        printf("第%d中组合方式为:", sum);
                        for (loop = 0; loop < 3; loop++)
                        {
                            switch (loop)
                            {
                            case 0:loop1 = i;
                                break;
                            case 1:loop1 = j;
                                break;
                            case 2:loop1 = k;
                                break;
                            default:
                                break;
                            }
                            switch (loop1)
                            {
                            case 0:printf("a ");
                                break;
                            case 1:printf("b ");
                                break;
                            case 2:printf("c ");
                                break;
                            case 3:printf("d ");
                                break;
                            case 4:printf("e ");
                                break;
                            case 5:printf("f ");
                                break;
                            case 6:printf("g ");
                                break;
                            default:break;

                            }
                        }
                        //Sleep(1000);
                        printf("\n");
                    }
                }
            }
        }
    }
}

学习的内容都是来源于网上的资料以及书本,发出来只是希望能够记录一下学习的过程,也希望能够起到交流学习的作用。有可能很多内容都是楼主自己为了巩固分享到许多重复的内容,希望莫怪。。而且楼主比较笨555...,很多东西都是花费了很多时间的去查资料,看视频去理解的,现在有很多都不是很理解,希望一切的努力都不会被辜负,与此共勉。

免费评分

参与人数 4吾爱币 +3 热心值 +3 收起 理由
Yueer998 + 1 我很赞同!
LUJING + 1 + 1 我很赞同!
20211111qw + 1 我很赞同!
wyl00 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

punkla 发表于 2021-11-14 22:41
多谢楼主分享,谢谢。
blackboard 发表于 2021-11-14 22:58
curio 发表于 2021-11-14 23:35
kanxue2018 发表于 2021-11-14 23:43
多练习,做小项目,进步神速
harmonyOS 发表于 2021-11-15 00:10
楼主是看的谁的教程?我看的韦东山的,目前一头雾水
shilong 发表于 2021-11-15 07:06
贵在坚持,他日必成大器,谢谢分享。
fengbu401 发表于 2021-11-15 08:30
贵在坚持,他日必成大器,谢谢分享。
头像被屏蔽
tlf 发表于 2021-11-15 08:44
提示: 作者被禁止或删除 内容自动屏蔽
gamelover9527 发表于 2021-11-15 08:48
坚持下去,加油~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表