你知道你生日那天是星期几吗,你知道你爸爸生日那天是星期几吗?你也许会说:可以查万年历啊。然而,不查万年历你能计算出来吗? C语言编程序实现:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到该日期前一年的年末总共有多少天,到该日期前一个月的月末总共有多少天,到这一天总共有多少天,并求出这一天是星期几(用英文表示)。 假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。 提示:可以将每个月的天数存入一个数组中。 输入格式: 输入年、月、日的值,数据之间以空格分隔。
时间: 2024-02-13 21:02:06 浏览: 67
birthday-weather:我的第一个应用程序!
好的,我会尽力回答你的问题。这个问题涉及到日期、闰年等知识,需要用到一些计算方法。以下是 C 语言编写的程序实现:
```c
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算该年前一年年末总共有多少天
int daysBeforeYear(int year, int month, int day) {
int days = 0;
int leap = isLeapYear(year - 1); // 前一年是否为闰年
int monthDays[] = {31, 28 + leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
for (int i = 0; i < month - 1; i++) {
days += monthDays[i];
}
days += day - 1;
return days;
}
// 计算该月前一个月月末总共有多少天
int daysBeforeMonth(int year, int month, int day) {
int days = 0;
int leap = isLeapYear(year); // 是否为闰年
int monthDays[] = {31, 28 + leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
for (int i = 0; i < month - 2; i++) {
days += monthDays[i];
}
if (month > 2) {
days += 1; // 闰年二月有29天
}
days += day;
return days;
}
int main() {
int year, month, day;
printf("请输入日期(年 月 日,用空格分隔):");
scanf("%d %d %d", &year, &month, &day);
// 计算从公元1年1月1日到该日期前一年的年末总共有多少天
int daysBeforeLastYear = daysBeforeYear(year, month, day);
if (isLeapYear(year - 1)) {
daysBeforeLastYear += 366;
} else {
daysBeforeLastYear += 365;
}
printf("从公元1年1月1日到该日期前一年的年末总共有 %d 天\n", daysBeforeLastYear);
// 计算到该日期前一个月的月末总共有多少天
int daysBeforeLastMonth = daysBeforeMonth(year, month, day);
printf("到该日期前一个月的月末总共有 %d 天\n", daysBeforeLastMonth - 1);
// 计算到这一天总共有多少天
int leap = isLeapYear(year); // 是否为闰年
int monthDays[] = {31, 28 + leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
int days = 0;
for (int i = 0; i < month - 1; i++) {
days += monthDays[i];
}
days += day;
printf("到这一天总共有 %d 天\n", days - 1);
// 计算这一天是星期几
int daysSinceMonday = (daysBeforeLastYear + days) % 7; // 从星期一开始计算
char weekdays[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
printf("这一天是 %s\n", weekdays[daysSinceMonday]);
return 0;
}
```
这个程序可以实现输入任意一个日期的年、月、日的值,求出从公元1年1月1日到该日期前一年的年末总共有多少天,到该日期前一个月的月末总共有多少天,到这一天总共有多少天,并求出这一天是星期几。
阅读全文