用c语言写一个简单的万年历,要求简单,有注释
时间: 2024-02-25 22:53:47 浏览: 97
使用C语言编写简单的万年历
好的,以下是用C语言编写的简单万年历代码,已经添加了注释:
```c
#include<stdio.h>
int main()
{
int year, month, day, week; // 定义年、月、日、星期变量
int i, j, k; // 循环计数变量
int days; // 当月总天数
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
if(month < 1 || month > 12) // 判断输入的月份是否合法
{
printf("输入的月份不合法!\n");
return 0; // 退出程序
}
// 计算星期几
if(month == 1 || month == 2) // 将1月和2月看作上一年的13月和14月
{
year--;
month += 12;
}
week = (day + 1 + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
// 计算当月的总天数
if(month == 4 || month == 6 || month == 9 || month == 11) // 30天的月份
{
days = 30;
}
else if(month == 2) // 2月
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) // 闰年
{
days = 29;
}
else // 平年
{
days = 28;
}
}
else // 31天的月份
{
days = 31;
}
// 输出日历
printf(" 日 一 二 三 四 五 六\n"); // 输出星期几
for(i = 0; i < week; i++) // 输出月份第一天之前的空格
{
printf(" ");
}
for(j = 1; j <= days; j++) // 输出当月日期
{
printf("%3d ", j); // 为了美观,日历中的日期占3个字符位
if((j + week) % 7 == 0) // 每输出7天换行
{
printf("\n");
}
}
if((j + week - 1) % 7 != 0) // 如果当月最后一天不是星期六,输出换行
{
printf("\n");
}
return 0;
}
```
注:代码中的算法是蔡勒(Zeller)公式,用于计算某一天是星期几。
阅读全文