c语言万年历程序。编写程序打印任意给定的年份的日历或者某年某月的月历或者查询某一天是星期几?

如题所述

第1个回答  2023-07-08
以下是一个示例的 C 代码,实现了打印给定年份的日历、某年某月的月历以及查询某一天是星期几的功能:
#include <stdio.h>// 判断某年是否为闰年int isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
}
return 0;}// 获取某年某月的天数int getMonthDays(int year, int month) {
int days;
switch (month) {
case 2:
days = isLeapYear(year) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
return days;}// 计算某年某月1号是星期几int getWeekday(int year, int month) {
int d, m, y;
d = 1;
m = month;
y = year - (m < 3);
return (y + y / 4 - y / 100 + y / 400 + " - m + 2 * d + 3 * (m + 1) / 5 + y") % 7;}// 打印某一年的日历void printYearCalendar(int year) {
printf("========== %d 年日历 ==========\n", year);
for (int month = 1; month <= 12; month++) {
printf("\n");
printf("======== %d 月 =======\n", month);
printf(" Sun Mon Tue Wed Thu Fri Sat\n");

int days = getMonthDays(year, month);
int weekday = getWeekday(year, month);
int currentDay = 1;

for (int i = 0; i < weekday; i++) {
printf(" ");
}

while (currentDay <= days) {
printf(" %3d", currentDay);

if ((currentDay + weekday) % 7 == 0) {
printf("\n");
}

currentDay++;
}

printf("\n");
}}// 打印某年某月的月历void printMonthCalendar(int year, int month) {
printf("======= %d 年 %d 月月历 =======\n", year, month);
printf(" Sun Mon Tue Wed Thu Fri Sat\n");

int days = getMonthDays(year, month);
int weekday = getWeekday(year, month);
int currentDay = 1;

for (int i = 0; i < weekday; i++) {
printf(" ");
}

while (currentDay <= days) {
printf(" %3d", currentDay);

if ((currentDay + weekday) % 7 == 0) {
printf("\n");
}

currentDay++;
}

printf("\n");}// 查询某一天是星期几void queryWeekday(int year, int month, int day) {
int weekday = getWeekday(year, month);
printf("%d 年 %d 月 %d 日是星期%d\n", year, month, day, (weekday + day - 1) % 7);}int main() {
int option;
int year, month, day;

printf("1. 打印某一年的日历\n");
printf("2. 打印某年某月的月历\n");
printf("3. 查询某一天是星期几\n");
printf("请选择操作:");
scanf("%d", &option);

if (option == 1) {
printf("请输入要打印的年份:");
scanf("%d", &year);
printYearCalendar(year);
} else if (option == 2) {
printf("请输入要打印的年份和月份,用空格分隔:");
scanf("%d%d", &year, &month);
printMonthCalendar(year, month);
} else if (option == 3) {
printf("请输入要查询的年份、月份和日期,用空格分隔:");
scanf("%d%d%d", &year, &month, &day);
queryWeekday(year, month, day);
}

return 0;}
相似回答