【揭秘C语言星期计算的奥秘】轻松掌握日期转星期的编程技巧

发布时间:2025-05-23 11:15:18

引言

在C言语编程中,日期的处理是一个罕见的任务。懂得怎样打算一个特定日期是礼拜多少,对很多利用顺序来说是一个基本须要。本文将具体介绍如何在C言语中利用蔡勒公式(Zeller’s Congruence)跟基姆拉尔森打算公式(Kimmel’s Formula)来打算日期对应的礼拜。

蔡勒公式

道理

蔡勒公式是一种打算礼拜多少的算法,由德国数学家蔡勒发明。该公式实用于公历日期,并且可能打算出恣意日期的礼拜多少。其公式如下:

h = (q + [13(m+1)/5] + K + [K/4] + [J/4] - 2J) mod 7

其中:

  • h 是礼拜多少的成果,0表示礼拜六,1表示礼拜日,以此类推。
  • m 是月份(3表示三月,4表示四月,…,12表示十二月,1表示上一年的一月,2表示上一年的二月)。
  • q 是日期。
  • K 是年份的后两位。
  • J 是年份的前两位。

实现代码

#include <stdio.h>

int calculateDayOfWeek(int day, int month, int year) {
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int K = year % 100;
    int J = year / 100;
    int h = (day + 13 * (month + 1) / 5 + K + K / 4 + J / 4 - 2 * J) % 7;
    return h;
}

int main() {
    int day, month, year;
    printf("请输入日期(格局:DD MM YYYY):");
    scanf("%d %d %d", &day, &month, &year);
    int dayOfWeek = calculateDayOfWeek(day, month, year);
    printf("礼拜%d\n", dayOfWeek);
    return 0;
}

基姆拉尔森打算公式

道理

基姆拉尔森打算公式是一种打算礼拜多少的算法,其公式如下:

W = (d + 2m3(m1)/5yy/4 - y/100y/400) % 7

其中:

  • W 是礼拜多少的成果。
  • d 是日期中的日数。
  • m 是月份数。
  • y 是年纪。

实现代码

#include <stdio.h>

int calculateDayOfWeekKimmel(int day, int month, int year) {
    int m1 = month;
    if (month == 1 || month == 2) {
        m1 += 12;
    }
    int y = year;
    if (month == 1 || month == 2) {
        y--;
    }
    int W = (day + 2 * m1 * 3 / 5 + y * y / 4 - y / 100 * y / 400) % 7;
    return W;
}

int main() {
    int day, month, year;
    printf("请输入日期(格局:DD MM YYYY):");
    scanf("%d %d %d", &day, &month, &year);
    int dayOfWeek = calculateDayOfWeekKimmel(day, month, year);
    printf("礼拜%d\n", dayOfWeek);
    return 0;
}

总结

经由过程以上两种方法,我们可能轻松地在C言语中打算日期对应的礼拜。这些方法不只简单,并且正确,是处理日期成绩的实用东西。