C语言中如何计算某天是星期几?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

在C语言中,计算星期几通常基于Zeller公式基姆拉尔森公式(Kim Larsen formula),以下是两种实现方法:

c语言 weekday
(图片来源网络,侵删)

方法1:Zeller公式(适用于格里高利历)

#include <stdio.h>
// Zeller公式计算星期几(0=星期六, 1=星期日, ..., 6=星期五)
int zeller(int year, int month, int day) {
    if (month < 3) {
        month += 12;
        year--;
    }
    int k = year % 100;
    int j = year / 100;
    int h = (day + (13 * (month + 1)) / 5 + k + k / 4 + j / 4 + 5 * j) % 7;
    return (h + 5) % 7; // 调整为0=星期日, 1=星期一, ..., 6=星期六
}
const char* weekday(int dayOfWeek) {
    static const char* weekdays[] = {
        "星期日", "星期一", "星期二", "星期三", 
        "星期四", "星期五", "星期六"
    };
    return weekdays[dayOfWeek];
}
int main() {
    int year, month, day;
    printf("输入年 月 日(如2025 10 15): ");
    scanf("%d %d %d", &year, &month, &day);
    int dayOfWeek = zeller(year, month, day);
    printf("%d年%d月%d日是%s\n", year, month, day, weekday(dayOfWeek));
    return 0;
}

说明:

  • Zeller公式调整了月份(1月和2月视为前一年的13月和14月)。
  • 返回值 0 表示星期六,1 表示星期日,依此类推,通过 (h + 5) % 7 调整为 0=星期日。

方法2:基姆拉尔森公式(更简洁)

#include <stdio.h>
// 基姆拉尔森公式(0=星期日, 1=星期一, ..., 6=星期六)
int kim_larsen(int year, int month, int day) {
    if (month < 3) {
        month += 12;
        year--;
    }
    int h = (day + (13 * (month + 1)) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
    return h;
}
const char* weekday(int dayOfWeek) {
    static const char* weekdays[] = {
        "星期日", "星期一", "星期二", "星期三", 
        "星期四", "星期五", "星期六"
    };
    return weekdays[dayOfWeek];
}
int main() {
    int year, month, day;
    printf("输入年 月 日(如2025 10 15): ");
    scanf("%d %d %d", &year, &month, &day);
    int dayOfWeek = kim_larsen(year, month, day);
    printf("%d年%d月%d日是%s\n", year, month, day, weekday(dayOfWeek));
    return 0;
}

说明:

  • 基姆拉尔森公式直接返回 0=星期日,无需额外调整。
  • 公式中的 - year / 100 + year / 400 处理了世纪年的闰年规则。

输出示例:

输入:2025 10 15
输出:2025年10月15日是星期日


注意事项:

  1. 日期范围:两种公式均适用于格里高利历(1582年10月15日之后)。
  2. 输入验证:实际使用时应检查日期的有效性(如2月30日无效)。
  3. 星期名称:可根据需求修改 weekday() 函数中的字符串数组。

如果需要处理更复杂的日期逻辑(如闰年验证、历史日期),建议使用标准库 <time.h>mktime()localtime() 函数。

c语言 weekday
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
C语言program如何编写与运行?
« 上一篇 04-22
织梦5.7手册下载
下一篇 » 04-22

相关文章

取消
微信二维码
支付宝二维码

目录[+]