c语言,年月日计算星期

2021年10月20日日期转换:星期几的C++实现

#include <stdio.h>
#include <math.h>
 int main()
 {
  int y,y0,m,m0,d,d0,z,x;
  printf("请按格式输入xxxx年xx月xx日:   ");
  scanf("%d%d%d",&y,&m,&d);
  z=(14-m)/12;
  y0=y-z;
  x=y0+y0/4-y0/100+y0/400;
  m0=m+12*z-2;
  d0=(d+x+31*m0/12)%7;
  printf("这一天是:星期%d",d0);
  return 0;
}

输入2021年10月20号

运行结果如下:

 请按格式输入xxxx年xx月xx日:   2021 10 20
这一天是:星期3
Process returned 0 (0x0)   execution time : 9.175 s
Press any key to continue.

 

要使用 C 语言根据给定的年、月、日计算出对应的星期,可以采用两种主流算法:**Zeller 公式(蔡勒公式)** 和 **基姆拉尔森计算公式**。以下是这两种方法的详细实现与说明。 ### 使用 Zeller 公式(蔡勒公式) Zeller 公式是一种经典的日期计算方法,适用于公历日期的星期计算。在实现中需要注意的是,1 月和 2 月要被视为上一年的 13 月和 14 月来处理。 #### 算法步骤: - 若月份为 1 或 2,则将月份加 12,并将年份减 1。 - 计算年份的前两位 `c` 和后两位 `y`。 - 应用公式计算星期值。 #### 实现代码: ```c #include <stdio.h> int zeller(int year, int month, int day) { if (month == 1 || month == 2) { month += 12; year--; } int c = year / 100; int y = year % 100; int w = (day + 2 * month + 3 * (month + 1) / 5 + y + y / 4 - y / 100 + c / 4 + c * 5) % 7; return (w == 0) ? 7 : w; // 返回 1-7,分别对应星期一到星期日 } int main() { int year, month, day; printf("请输入日期(格式:YYYY MM DD): "); scanf("%d %d %d", &year, &month, &day); int weekday = zeller(year, month, day); const char* weekdays[] = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; printf("%d-%d-%d 是 %s\n", year, month, day, weekdays[weekday - 1]); return 0; } ``` ### 使用基姆拉尔森计算公式 基姆拉尔森公式也是一种常用的星期计算方法,其实现简洁高效,适合嵌入系统或小型程序中使用。 #### 算法步骤: - 如果是 1 月或 2 月,则将其视为上一年的 13 月或 14 月。 - 根据公式 `(day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7` 计算星期值。 - 结果范围为 0 到 6,其中 0 表示星期日。 #### 实现代码: ```c #include <stdio.h> int kim_larsen(int year, int month, int day) { if (month == 1 || month == 2) { month += 12; year--; } int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7; return (week + 1) % 7; // 转换为 0-6,0 表示星期日 } int main() { int year, month, day; printf("请输入日期(格式:YYYY MM DD): "); scanf("%d %d %d", &year, &month, &day); int weekday = kim_larsen(year, month, day); const char* weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; printf("%d-%d-%d 是 %s\n", year, month, day, weekdays[weekday]); return 0; } ``` ### 总结 两种算法均能正确计算指定日期的星期: - **Zeller 公式**返回 1-7 的值,分别对应星期一到星期日[^1]。 - **基姆拉尔森公式**返回 0-6 的值,其中 0 表示星期日[^3]。 两种方法各有特点,Zeller 公式更适用于数学推导,而基姆拉尔森公式则更便于编程实现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值