如何使用 enum 定义季度、月、星期,并使用 typedef 重定义 enum 类型,输入任意天 (xx 年 xx 月 xx 日),输出是哪一个季度、哪一个月、星期几?

  1. 使用 enum 定义季度、月、星期,并使用 typedef 重定义 enum 类型,输入任意天 (xx 年 xx 月 xx 日),输出是哪一个季度、哪一个月、星期几
#include <stdio.h>

// 定义季度和月份
enum Quarter { Q1 = 1, Q2, Q3, Q4 };
enum Month { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };

// 使用 typedef 重定义 enum 类型
typedef enum Quarter Quarter;
typedef enum Month Month;

int main(void) {
  // 输入年月日
  int year, month, day;
  printf("Enter year: ");
  scanf("%d", &year);
  printf("Enter month: ");
  scanf("%d", &month);
  printf("Enter day: ");
  scanf("%d", &day);

  // 确定哪个季度
  Quarter quarter;
  if (month <= 3) {
    quarter = Q1;
  } else if (month <= 6) {
    quarter = Q2;
  } else if (month <= 9) {
    quarter = Q3;
  } else {
    quarter = Q4;
  }

  // 确定哪个月份
  Month m = (Month) month;

  // 确定星期几
  int w = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
  const char* weekdays[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
  const char* weekday = weekdays[w];

  // 输出结果
  printf("%d-%02d-%02d is quarter %d, month %d (%s), and a %s.\n", year, month, day, quarter, m, m, weekday);

  return 0;
}

望采纳。

代码实现如下

#include <stdio.h>

enum Quarter {
    Q1,
    Q2,
    Q3,
    Q4
};

typedef enum Quarter Quarter;

enum Month {
    Jan,
    Feb,
    Mar,
    Apr,
    May,
    Jun,
    Jul,
    Aug,
    Sep,
    Oct,
    Nov,
    Dec
};

typedef enum Month Month;

enum Weekday {
    Sun,
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat
};

typedef enum Weekday Weekday;

int main(void) {
    int year, month, day;

    printf("输入日期 (yyyy mm dd): ");
    scanf("%d%d%d", &year, &month, &day);

    // 计算季度
    Quarter quarter;
    if (month <= 3) {
        quarter = Q1;
    } else if (month <= 6) {
        quarter = Q2;
    } else if (month <= 9) {
        quarter = Q3;
    } else {
        quarter = Q4;
    }

    // 计算月份
    Month m = month - 1;

    // 计算星期几
    int a = (14 - month) / 12;
    int y = year - a;
    int m1 = month + 12 * a - 2;
    int d = (day + y + y / 4 - y / 100 + y / 400 + (31 * m1) / 12) % 7;
    Weekday w = d;

    printf("季度: %d\n", quarter);
    printf("月度: %d\n", m);
    printf("星期几: %d\n", w);

    return 0;
}