用c语言实现:模仿现实生活中的挂历,输入年份和月份,显示该月的月历。或输入年份显示一整年的月历
时间: 2024-02-25 07:54:32 浏览: 57
好的,以下是用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void print_calendar(int year, int month) {
int days, i;
time_t t;
struct tm *tmp;
// 获取指定年月的第一天
tmp = malloc(sizeof(struct tm));
tmp->tm_year = year - 1900;
tmp->tm_mon = month - 1;
tmp->tm_mday = 1;
tmp->tm_hour = 12;
tmp->tm_min = 0;
tmp->tm_sec = 0;
tmp->tm_isdst = -1;
t = mktime(tmp);
// 计算该月的天数
if (month == 12) {
tmp->tm_year = year;
tmp->tm_mon = 0;
} else {
tmp->tm_mon = month;
}
tmp->tm_mday = 1;
t = mktime(tmp);
t -= 86400;
tmp = localtime(&t);
days = tmp->tm_mday;
// 输出月历
printf(" %d 年 %d 月\n", year, month);
printf("日 一 二 三 四 五 六\n");
for (i = 1; i < tmp->tm_wday; i++) {
printf(" ");
}
for (i = 1; i <= days; i++) {
printf("%2d ", i);
if ((tmp->tm_wday + i) % 7 == 0) {
printf("\n");
}
}
printf("\n\n");
free(tmp);
}
void print_year_calendar(int year) {
int i;
for (i = 1; i <= 12; i++) {
print_calendar(year, i);
}
}
int main() {
int year, month;
printf("请输入年份和月份:\n");
scanf("%d%d", &year, &month);
if (month >= 1 && month <= 12) {
print_calendar(year, month);
} else {
print_year_calendar(year);
}
return 0;
}
```
该程序使用了 C 标准库中的 `time.h` 和 `stdio.h` 头文件,可以方便地获取日期、时间和输入输出相关的信息。其中,`mktime()` 函数可以将一个 `struct tm` 结构体转换为对应的时间戳,`localtime()` 函数则可以将一个时间戳转换为对应的本地时间。利用这些函数,我们可以方便地计算出指定年月的天数和第一天是星期几,并输出对应的月历。
注意,在计算月数和天数时,需要将月份从 1 到 12 映射到 0 到 11,这是因为 C 语言中的月份是从 0 开始计数的。
阅读全文