C语言:已知1980年1月1日是星期二。 任意输入一个日期,求这一天是星期几
时间: 2024-11-20 15:43:00 浏览: 58
在C语言中,你可以使用蔡勒公式(Zeller's congruence)来计算给定日期是星期几。该公式是一种基于格里高利历(即公历)的算法,它不需要闰年的特殊处理。以下是蔡勒公式的步骤:
```c
int dayOfWeek(int year, int month, int date) {
if (month < 3) { // 如果是前三个月(一月和二月)
month += 12;
year--;
}
int century = year / 100; // 取整数年份除以100
int weekDay = (date + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
return weekDay; // 返回的结果0代表周日,1代表周一,以此类推
}
```
你可以把这个函数应用到1980年1月1日,如果输入其他任意日期,比如用户输入的`year`, `month`, 和`date`,就可以得到这个日期是星期几。
相关问题
用C语言实现:输入年月日,输出当天是星期几的英文单词(Monday…)。注:已知2000年1月1日是星期天
在C语言中,我们可以使用蔡勒公式(Zeller's congruence)来计算给定日期对应的星期。这个公式如下:
```c
int dayOfWeek(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;
switch (h) {
case 0: return "Sunday";
case 1: return "Monday";
case 2: return "Tuesday";
case 3: return "Wednesday";
case 4: return "Thursday";
case 5: return "Friday";
case 6: return "Saturday";
}
}
```
这里我们首先调整月份(如果一月或二月,则将月份加12并将年份减1),然后应用蔡勒公式计算出星期数(范围0-6,其中0表示周日)。最后通过switch语句返回相应的英文单词。
你可以使用类似这样的函数来获取任何给定日期的星期:
```c
#include <stdio.h>
int main() {
int year = 2000;
int month = 1;
int day = 1;
printf("For the date %d-%d-%d, it's %s.\n", year, month, day, dayOfWeek(year, month, day));
return 0;
}
```
如果你想让用户输入年、月、日,你可以替换`main`函数中的`year`, `month`, 和 `day`变量,并添加输入处理部分。
已知1900年1月1日是星期一,问这天之后的任意一天是星期几?1900年1月1日以后的任一合法日期,格式为yyyy-MM-dd,如2000-01-01。输出日期所对应的星期。用C语言做这个题
在C语言中,计算从特定日期开始到另一个日期之间的天数,然后根据一周七天的周期来确定星期几是一个常见的任务。你可以使用`mktime()`函数将日期转换为时间戳,加上相应的天数,再通过`gmday()`函数获取星期几。这里提供一个简单的步骤:
1. 定义一个辅助函数,例如`weekday_from_date(char* date)`,接收输入的字符串日期作为参数。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 帮助函数:返回给定日期的星期几
int weekday_from_date(char* date) {
struct tm t = {0};
strptime(date, "%Y-%m-%d", &t); // 解析日期格式
time_t timestamp = mktime(&t); // 转换为时间戳
return (int)t.tm_wday; // tm_wday范围0-6,0代表周日
}
int main() {
char input_date[] = "1900-01-01";
int days_since_1900 = 0; // 自1900年1月1日起的天数
// 确保输入日期是星期一
if (weekday_from_date(input_date) != 1) {
printf("Given date is not a Monday. Cannot determine subsequent day.\n");
return 1;
}
// 添加额外的天数
// 例如,如果你想知道第二天是哪天,days_since_1900 = 1;
days_since_1900 = 1;
// 计算新的星期几
char result_date[32];
strftime(result_date, sizeof(result_date), "%Y-%m-%d", localtime(×tamp + days_since_1900 * 86400)); // 加上天数并格式化结果
int new_weekday = weekday_from_date(result_date);
// 输出结果
switch (new_weekday) {
case 0: printf("New date is Sunday.\n"); break;
case 1: printf("New date is Monday.\n"); break;
// ...处理其他六天...
}
return 0;
}
```
请注意,这个示例假定了输入的日期确实是1900年1月1日的星期一。如果需要验证这一点,你需要在主函数中先检查。同时,实际应用中可能需要处理闰年等复杂情况,这里简化了处理。
阅读全文
相关推荐
















