C语言实现月历输出:计算并输出指定年份月份的月历
C语言实现月历输出:计算并输出指定年份月份的月历
本篇文章提供了一个C语言函数Calendar,用于计算并输出指定年份月份的月历。函数接收两个参数year和month分别代表年份和月份,并根据输入输出符合格式要求的月历。
需求
右侧编辑器中有一个函数Calendar,它有两个参数year和month,分别代表年份和月份。其中1900 <= year <= 9999,1 <= month <= 12。
请在这个函数中补充代码,计算并输出当月的月历,格式要求如下:
- 要求输出有7列,从左至右分别是从星期一到星期日。
- 同一列的数字对齐右边。
- 每一个位置上的数字占2个字符,不够长的用空格补充。
- 如果第一行的头几个位置上没有数字,则用两个空格代替。
- 最后一行不用补全缺少数字的位置。
- 不同列之间有一个空格,最后一列后面没有空格。
- 允许自由增加函数,只要
Calendar函数的功能正确即可。
思路
- 计算当月1号是星期几;
- 计算当月的天数;
- 根据以上两个数据,输出当月的月历。
代码实现
#include <stdio.h>
int is_leap_year(int year) { // 判断闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
int get_days_of_month(int year, int month) { // 计算当月天数
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && is_leap_year(year)) { // 闰年2月29天
return 29;
} else {
return days[month];
}
}
void Calendar(int year, int month) {
int week_day_of_first_day = 1; // 1900年1月1日是星期一
for (int i = 1900; i < year; i++) { // 计算1900年到(year-1)年有多少天
week_day_of_first_day += is_leap_year(i) ? 366 : 365;
}
for (int i = 1; i < month; i++) { // 计算(year,1,1)到(year,month-1,31)有多少天
week_day_of_first_day += get_days_of_month(year, i);
}
week_day_of_first_day %= 7; // 计算(year,month,1)是星期几
int days_of_month = get_days_of_month(year, month);
printf(" Mo Tu We Th Fr Sa Su\n"); // 输出月历头部
for (int i = 0; i < week_day_of_first_day; i++) { // 输出第一行前面的空格
printf(" ");
}
for (int i = 1; i <= days_of_month; i++) { // 输出日期
printf("%2d", i);
if ((week_day_of_first_day + i - 1) % 7 == 6) { // 判断是否到了星期日
printf("\n"); // 换行
} else {
printf(" "); // 输出空格
}
}
if ((week_day_of_first_day + days_of_month - 1) % 7 != 6) { // 判断最后一天是否是星期日
printf("\n"); // 换行
}
}
int main() {
int year, month;
scanf("%d%d", &year, &month);
Calendar(year, month);
return 0;
}
代码解析
is_leap_year(int year)函数用于判断年份是否为闰年。get_days_of_month(int year, int month)函数用于计算指定年份和月份的天数。Calendar(int year, int month)函数实现月历输出,具体步骤如下:- 计算当月1号是星期几:通过循环计算1900年1月1日到指定日期的天数,然后对7取余得到星期几。
- 计算当月的天数:调用
get_days_of_month函数获取。 - 输出月历:根据计算结果输出月历头部,并根据星期几输出日期,最后输出换行符。
总结
本文提供了一个C语言函数Calendar,用于计算并输出指定年份月份的月历,并详细解释了代码的实现过程。希望本文能帮助你更好地理解C语言编程和算法。
原文地址: https://www.cveoy.top/t/topic/m3IZ 著作权归作者所有。请勿转载和采集!