计算任何一个日期对应的教学周,以及星期几。从键盘输入某学期第1周周一的日期,以及该学期中的某个日期,输出这个日期对应的教学周,以及星期几。学期可能跨年,全年的任何一个周一都可能是第1周,学期教学周长度不限,需要考虑闰年的问题。要求: (1)在程序内部添加必要的注释(至少3处) (2)输入输出要有文字说明 (3)main主函数尽可能只有函数调用语句
时间: 2024-03-18 19:40:14 浏览: 76
求某一天是周几,打印周历、月历和求某年的节假日函数集合。C语言代码,下载即可用!
好的,以下是代码实现和注释:
```c
#include <stdio.h>
#include <stdlib.h>
// 判断某一年是否为闰年
int isLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算某个日期是一年中的第几天
int getDayOfYear(int year, int month, int day)
{
int daysInMonth[] = {0,31,59,90,120,151,181,212,243,273,304,334};
int dayOfYear = daysInMonth[month - 1] + day;
if (month > 2 && isLeapYear(year)) {
dayOfYear += 1;
}
return dayOfYear;
}
// 根据日期计算是星期几
int getWeekday(int year, int month, int day)
{
// 基姆拉尔森计算公式
int weekday = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7;
return (weekday + 6) % 7 + 1; // 转换为1-7的范围
}
int main()
{
// 输入第一周周一的日期
printf("请输入某学期第1周周一的日期(如2021年9月6日):");
int year1, month1, day1;
scanf("%d年%d月%d日", &year1, &month1, &day1);
// 输入要查询的日期
printf("请输入要查询的日期(如2021年10月1日):");
int year, month, day;
scanf("%d年%d月%d日", &year, &month, &day);
// 计算第一周的第一天是一年中的第几天
int dayOfYear1 = getDayOfYear(year1, month1, day1);
// 计算要查询的日期是一年中的第几天
int dayOfYear = getDayOfYear(year, month, day);
// 计算要查询的日期是第几周
int week = (dayOfYear - dayOfYear1) / 7 + 1;
// 计算要查询的日期是星期几
int weekday = getWeekday(year, month, day);
// 输出结果
printf("%d年%d月%d日是第%d周,星期%d。\n", year, month, day, week, weekday);
return 0;
}
```
输入格式要求为“xxxx年xx月xx日”,输出结果为“xxxx年xx月xx日是第x周,星期x”。
阅读全文