C语言编程精解-(9)-宏与枚举

  • 什么是预处理,什么是宏? 什么是内联操作? 枚举与数组结合.

宏与枚举

1.重要的面试题

什么是预处理,什么是宏?
答:预处理是C编译器的一个组件,用于处理在实际编译动作发生之q ai的头文件包含或宏处理等任务;
宏是一个记号,用来代表一个常量或者一组固定的程序语句,最后将会被预处理器替换为真实的值或程序语句。

2.重要的面试题

什么是内联操作?
答:预处理器将宏替换为真实的值或程序语句的操作被称为内联操作。

3.程序 计算圆面积,定义宏PI

#include <stdio.h>
#define PI 3.14159   // 用于定义PI的宏
int main(int argc, const char * argv[]) {
    double r = 15.5;
    double area = PI*r*r;
    printf("Area of circle = %.4lf\n",area);
}

4.程序 查找两个数中的最值

#include <stdio.h>
// 用于查找最大值的宏
#define MAX(a,b) (a>b)?a:b
int main(int argc, const char * argv[]) {
    int a,b;
    printf("Enter two numbers: ");
    scanf("%d%d",&a,&b);
    printf("Maximum = %d",MAX(a, b));
}

输出:

Enter two numbers: 18 55
Maximum = 55

4.程序 条件编译

#include <stdio.h>
// 条件编译
#define FIRST
int main(int argc, const char * argv[]) {
    int a,b;
#ifdef FIRST
    a = 1,b = 2;
#else
    a = 10,b = 20;
#endif
    printf("a = %d\tb = %d\n",a,b);
}

输出:

a = 1    b = 2

5.枚举

宏可以表示一个常量,而枚举则可以代表一组常量。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    // 定义枚举,枚举值从0-4
    enum week{
      Sunday,
      Monday,
      Tuesday,
      Wednesday,
      Thursday
    };
    // 创建枚举变量
    enum week day;
    // 循环显示枚举成员
    for (day = Sunday; day<=Thursday; day++) {
        printf("%d ",day);
    }
}

输出:

0 1 2 3 4

6.枚举 为枚举成员赋不同的值

#include <stdio.h>
int main(int argc, const char * argv[]) {
    // 创建枚举并赋值,值分别为0,3,4,5···
    enum week{
      Sunday,
      Monday = 3,
      Tuesday,
      Wednesday,
      Thursday
    };
    // 显示枚举变量
    printf("%d ",Sunday);
    printf("%d ",Monday);
    printf("%d ",Tuesday);
    printf("%d ",Wednesday);
    printf("%d ",Thursday);
}

输出:

0 3 4 5 6 

6.枚举

#include <stdio.h>
int main(int argc, const char * argv[]) {
   // 声明颜色名称枚举
    enum Colors{
        White = 1,
        Black,
        Red,
        Green,
        Blue,
    };
    enum Colors C = Red;
    // 根据c的值显示颜色的十六进制编码
    switch (C) {
        case 1:
            printf("#ffffff");
            break;
        case 2:
            printf("#000000");
            break;
        case 3:
            printf("#ff0000");
            break;
        case 4:
            printf("#ff00ff");
            break;
        case 5:
            printf("#0000ff");
            break;
    }
}

输出;

#ff0000

7.枚举与数组结合

#include <stdio.h>
int main(int argc, const char * argv[]) {
    // 创建月份枚举
    enum montns{
        Jan,Feb,Mar,Apr,May,Jun
    };

    // 创建月名称数组
    char *name[] = {
        "January","February","March","April","May","June"
    };

    // 创建月份日期数组
    int day[] = {
        31,28,31,30.31,30
    };

    // 声明枚举变量
    enum montns m;
    // 显示月份名称与天数
    for (m = Jan; m<Jun; m++) {
        printf("Month = %s\t  Days = %d\n",name[m],day[m]);
    }
}

输出:

Month = January      Days = 31
Month = February      Days = 28
Month = March      Days = 31
Month = April      Days = 30
Month = May      Days = 30

在C语言中,枚举是一种非常原始的类型,并不是非常有用,而在其他语言中,枚举被添加了许多额外的特性,会更加好用。

完结闲聊

至此,C语言的大部分重要基础知识点就归纳完了(细心的读者会发现文件操作和命令行参数知识并不再范围内),后续还会更新C语言与数据结构的相关知识点梳理,会陆续发布,算法是程序的灵魂,也值得花精力去掌握它。

在该系列文章中的代码部分不支持C99,(目前貌似已经C十几了)不过并不妨碍我们进一步的去理解C语言。由于笔者水平有限,在梳理中难免出现有误的地方,还望多多包含,并恳请指正,会在后续中完善这些问题,感谢你的阅读。


 上一篇
你来人间一趟 你要看看太阳 你来人间一趟 你要看看太阳
搬运几首我喜欢的他的诗想起你 我今夜跑尽这空无一人的街道 明天,明天起来后我要重新做人 我要成为宇宙的孩子 世纪的孩子 挥霍我自己的青春 然后放弃爱情的王位 去做铁石心肠的船长 ——眺望北方 夏天的太阳夏天 如果这条街没有鞋匠 我就
2019-03-26
下一篇 
C语言编程精解-(8)-结构体和联合体 C语言编程精解-(8)-结构体和联合体
是否可以在结构体或联合体中定义一个函数? 何时为结构体分配内存? 结构体变量是否可以当左值来处理? 结构体和联合体1.程序 声明并初始化结构体// 使用结构体显示电子账单 #include <stdio.h> #inclu
2019-03-20
  目录