printf输出当月日历
时间: 2024-11-16 16:04:17 浏览: 20
日历的C代码
在C语言中,打印当前月份的日历通常会涉及到一些日期处理函数和数组来表示月份的天数。以下是一个简单的示例,使用`<stdio.h>`库的`printf`函数以及自定义的辅助函数来完成这个任务:
```c
#include <stdio.h>
#include <stdlib.h>
// 辅助函数,获取给定月份和年的总天数
int get_days_in_month(int month, int year) {
switch (month) {
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return 29; // 虽然是闰年,但2月有29天
} else {
return 28;
}
case 1, 3, 5, 7, 8, 10, 12:
return 31;
default: // 4, 6, 9, 11
return 30;
}
}
// 打印日历
void print_calendar(int month, int year) {
const int days_per_week = 7;
int i, j;
// 获取该月份第一天是星期几
int start_day = day_of_week(month, year);
// 初始化一周的日历数组
char calendar[days_per_week][3];
for (i = 0; i < days_per_week; i++) {
calendar[i][0] = '\0'; // 确保每个元素初始化为空
}
// 将月份中的每一天填充到数组中
for (i = 1; i <= get_days_in_month(month, year); i++) {
int weekday = (start_day + i - 1) % days_per_week;
calendar[weekday][j++] = (char)i + '0'; // 从1开始计数,加字符'0'
if (j == 3) {
j = 0;
printf("%s\n", calendar[weekday]);
}
}
}
// 计算给定月份的第一天是星期几
int day_of_week(int month, int year) {
int century = year / 100;
int year_of_century = year % 100;
int day = (month - 1) * 28 + century / 4 - century / 100 + century / 400 - 2;
if (month > 2 && (year_of_century % 4 == 0 && year_of_century % 100 != 0) || (year_of_century % 400 == 0)) {
day++;
}
return day % 7;
}
int main() {
int month, year;
printf("请输入月份(1-12): ");
scanf("%d", &month);
printf("请输入年份: ");
scanf("%d", &year);
print_calendar(month, year);
return 0;
}
```
当你运行这个程序并输入月份和年份时,它将打印出指定月份的日历。
阅读全文