第三部分首先实现第四步,如下图所示,定义 crt secure no warnings 1
#include
#define start_year 1900
int main()
printf("--- 欢迎来到 Easy Calendar System ---n");
int year, month, monthdays;
1.输入年月,判断输入的年份是否为闰年。
do {printf("请输入年份:");
scanf("%d", &year);
rewind(stdin);
while (year < start_year);
do {printf("请输入月份:");
scanf("%d", &month);
rewind(stdin);
while (month < 1 ||month > 12);
int isleapyear = 0;
if (year % 4 == 0 &&year % 100 != 0 ||year % 100 == 0) {
闰年。 isleapyear = 1;
printf("isleapyear=%d", isleapyear);
计算输入月份的天数。
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthdays = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthdays = 30;
break;
case 2:
if (isleapyear == 1) {
monthdays = 29;
else {
monthdays = 28;
break;
printf("monthdays=%d", monthdays);
3. 在每月的第一天计算星期几。
温馨提示:1)循环计算从1900年到进入年份的一年中的总天数;
2)要确定每年是闰年还是平年,闰年有366天,平年有365天;
3)计算输入月份与当年1月之间的天数,并将输入年份之前的天数相加;
4) 一周的第一天是根据 1900 年 1 月 1 日星期一计算的
第 x 天 = (1 + 总天数) %7;星期一到第 6 周,可以使用数字 1-6,数字 0 可以用来表示星期日。
int yeardays = 0;
for (int i = 0; i < year; i++)
if (i % 4 == 0 &&i % 100 != 0 ||i % 400 == 0) {
闰年。 yeardays += 366;
else {
平年。 yeardays += 365;
printf("yeardays=%d", yeardays);
int monthtotaldays = 0;
for (int i = 0; i < month; i++)
if (month == 1 ||month == 3 ||month == 5 ||month == 7 ||month == 8 ||month == 10 ||month == 12) {
monthtotaldays += 31;
else if (month == 4 ||month == 6 ||month == 9 ||month == 11) {
monthtotaldays += 30;
else if (month == 2) {
if (isleapyear == 1) {
monthtotaldays += 29;
else {
monthtotaldays += 28;
printf("monthtotaldays=%d", monthtotaldays);
int week = (yeardays + monthtotaldays + 1) %7;
printf("week=%d ", week);
4.以格式输出日历。
1) 按格式顺序输出:
周日、周一、周二、周三、周四、周五、周六。
2)循环输出空格,在输入月的第一天根据星期几确定空格数;
3)循环输出当月的所有日子;
printf("周日、周一、周二、周三、周四、周五、周六");
for (int i = 0; i < week; i++)
printf("\t");
for (int i = 1; i < monthdays; i++)
printf("%d\t", i);
将空格和输出日期视为一个整体,并在每次输出 7 个数字时换行。
if ((week + i) %7 == 0) {
printf("");
return 0;
测试结果如下,也在 2023 年 11 月进行了测试
日历中的 2023 年 11 月的第一天也是星期三。
实考最好多试几遍,大月、小月、平年闰年的二月都要求考。