MST

星途 面试题库

面试题:C语言#define宏定义实现复杂模板功能

使用#define宏定义实现一个类似模板的功能,能够对不同类型的数据(如int、float)进行排序操作(简单的冒泡排序即可)。要求宏定义具有一定的通用性,可以方便地应用到不同类型数组的排序上。
11.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义一个宏,用于交换两个变量的值
#define SWAP(type, a, b) do { type temp = a; a = b; b = temp; } while (0)

// 定义一个宏,实现冒泡排序
#define BUBBLE_SORT(type, arr, size) do { \
    int i, j; \
    for (i = 0; i < size - 1; i++) { \
        for (j = 0; j < size - i - 1; j++) { \
            if (arr[j] > arr[j + 1]) { \
                SWAP(type, arr[j], arr[j + 1]); \
            } \
        } \
    } \
} while (0)

int main() {
    int intArr[] = {5, 4, 3, 2, 1};
    float floatArr[] = {5.5, 4.4, 3.3, 2.2, 1.1};

    int intSize = sizeof(intArr) / sizeof(intArr[0]);
    float floatSize = sizeof(floatArr) / sizeof(floatArr[0]);

    BUBBLE_SORT(int, intArr, intSize);
    BUBBLE_SORT(float, floatArr, floatSize);

    printf("Sorted int array: ");
    for (int i = 0; i < intSize; i++) {
        printf("%d ", intArr[i]);
    }
    printf("\n");

    printf("Sorted float array: ");
    for (int i = 0; i < floatSize; i++) {
        printf("%f ", floatArr[i]);
    }
    printf("\n");

    return 0;
}
  1. SWAP
    • 这个宏用于交换两个同类型变量的值。do { ... } while (0)结构保证了宏在复杂表达式中使用时,不会出现意外的语法错误。
  2. BUBBLE_SORT
    • 实现了冒泡排序的逻辑。
    • 通过两个嵌套的for循环遍历数组,比较相邻元素,如果顺序错误则调用SWAP宏交换它们。
    • 这里type是数组元素的类型,arr是数组名,size是数组的大小。
  3. main函数
    • 定义了一个int类型数组和一个float类型数组。
    • 计算数组的大小,并分别调用BUBBLE_SORT宏对两个数组进行排序。
    • 最后打印排序后的数组。