c语言万年历源代码csdn,用C语言编写万年历,可以阳历和阴历转换?谢了
时间: 2024-02-17 22:05:20 浏览: 155
以下是一个简单的 C 语言编写的万年历程序的源代码,可以实现阳历和阴历的转换:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义全局变量
int year, month, day, week;
// 函数声明
void print_calendar(int year, int month);
int get_weekday(int year, int month, int day);
int is_leap_year(int year);
int get_month_days(int year, int month);
int main()
{
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
if (month < 1 || month > 12) {
printf("输入的月份不合法!\n");
exit(1);
}
print_calendar(year, month);
return 0;
}
// 打印日历
void print_calendar(int year, int month)
{
int i, j, k, days;
printf("------------------------------\n");
printf(" %d年%d月\n", year, month);
printf("------------------------------\n");
printf("日 一 二 三 四 五 六\n");
// 计算当月天数
days = get_month_days(year, month);
// 计算当月第一天是星期几
week = get_weekday(year, month, 1);
for (i = 0; i < week; i++) {
printf(" ");
}
for (j = 1; j <= days; j++) {
printf("%2d ", j);
week++;
if (week == 7) {
printf("\n");
week = 0;
}
}
if (week > 0) {
for (k = week; k < 7; k++) {
printf(" ");
}
printf("\n");
}
}
// 判断某一年是否为闰年
int is_leap_year(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 获取某一年某一月的天数
int get_month_days(int year, int month)
{
int days;
if (month == 2) {
if (is_leap_year(year)) {
days = 29;
} else {
days = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else {
days = 31;
}
return days;
}
// 获取某一天是星期几
int get_weekday(int year, int month, int day)
{
int c, y, m, d;
if (month == 1 || month == 2) {
m = month + 12;
y = year - 1;
} else {
m = month;
y = year;
}
c = y / 100;
y = y % 100;
d = day;
return (c / 4 - 2 * c + y + y / 4 + 13 * (m + 1) / 5 + d - 1) % 7;
}
```
该程序的运行示例:
```
请输入年份:2022
请输入月份:2
------------------------------
2022年2月
------------------------------
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
```
注意:该程序只是一个简单的万年历,可能存在一些缺陷,比如对于一些特殊日期的处理等。如果需要更完善的功能,可以参考其他更为专业的万年历程序或库。
阅读全文