c语言每个月中13号是星期五的称为“黑色星期五”。输入一个年份,然后判断这一年是否有黑色星期五
时间: 2024-11-22 15:44:46 浏览: 79
在C语言中,要判断某个年份是否包含1月13日为星期五(即所谓的“黑色星期五”),我们需要利用日期计算和模运算。首先要知道的是,我们可以用Zeller's congruence公式来计算给定日期是星期几。这个公式的算法步骤如下:
1. 初始化变量:年份(year)、月份(month,注意0表示二月)、日期(day),以及一些辅助变量如a、b、c、h等。
2. 检查闰年:如果年份能被4整除但不是100的倍数,或者可以被400整除,则该年为闰年。
3. 计算月份天数:非闰年的2月有28天,其他月份按照实际天数。
4. 根据Zeller's congruence公式计算星期:
a. 对于所有非二月的情况,将当前年份减去1,并对7取余得到h;
b. 如果是2月,先加1(因为题目指的是一月十三日),然后根据平闰年的规则处理;
c. 计算q = (h + floor(2.6 * (month + 1)) + day) mod 7;
d. 然后通过q确定星期,如q == 0,代表星期日,依次类推。
下面是一个简单的C程序示例,实现了上述逻辑:
```c
#include <stdio.h>
int zeller_congruence(int year, int month, int day) {
int h, q;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
// Leap year
if (month == 2) {
month += 1; // January to February
}
} else {
if (month > 2) {
month -= 1; // Adjust for non-leap years
}
}
h = (year - 1) % 7;
q = (h + (2.6 * (month + 1)) + day) % 7;
return q;
}
int main() {
int year, month, day;
printf("Enter the year: ");
scanf("%d", &year);
// Check if there is a Black Friday on the 13th of January or any subsequent months
for (month = 1; month <= 12; ++month) {
if (month != 2) { // Skip February since we already checked it
day = 13;
if (zeller_congruence(year, month, day) == 5) {
printf("%d has a Black Friday on January 13.\n", year);
break;
}
}
}
return 0;
}
```
阅读全文