C语言实现简易万年历:包含闰年判断和月份显示

要编写一个简明的万年历程序(C语言),我们需要考虑几个关键点:

图片[1]_C语言实现简易万年历:包含闰年判断和月份显示_知途无界
  1. 闰年的判断:公历年份是4的倍数的,一般是闰年;但公历年份是整百年份的,必须是400的倍数才是闰年。
  2. 每月天数的确定:非闰年2月有28天,闰年2月有29天;其他月份的天数是固定的。
  3. 用户输入:通常需要用户输入年份和月份来查看该月的日历。

下面是一个简单的C语言实现示例:

#include <stdio.h>  
  
// 函数声明  
int isLeapYear(int year);  
void printMonth(int year, int month);  
  
int main() {  
    int year, month;  
  
    printf("请输入年份和月份(例如:2023 3):");  
    scanf("%d %d", &year, &month);  
  
    // 检查月份是否有效  
    if(month < 1 || month > 12) {  
        printf("月份输入错误!\n");  
        return 1;  
    }  
  
    printMonth(year, month);  
  
    return 0;  
}  
  
// 判断是否为闰年  
int isLeapYear(int year) {  
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {  
        return 1; // 是闰年  
    } else {  
        return 0; // 不是闰年  
    }  
}  
  
// 打印指定年份和月份的日历  
void printMonth(int year, int month) {  
    const int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
    int firstDayOfWeek = 1; // 假设每月的第一天是星期一,这里需要修正  
    int dayOfWeek, day = 1;  
    int days = daysInMonth[month - 1];  
  
    // 如果是闰年且是2月,则天数加1  
    if (month == 2 && isLeapYear(year)) {  
        days++;  
    }  
  
    // 计算第一天是星期几(这里需要更复杂的逻辑来正确计算)  
    // 这里简单假设为星期一,实际中可能需要查找或计算  
  
    // 打印表头  
    printf("   %d年%d月\n", year, month);  
    printf("日 一 二 三 四 五 六\n");  
  
    // 打印空格直到第一天的星期位置  
    for (dayOfWeek = 0; dayOfWeek < firstDayOfWeek; dayOfWeek++) {  
        printf("   ");  
    }  
  
    // 打印日历  
    while (day <= days) {  
        printf("%2d ", day);  
  
        day++;  
        dayOfWeek++;  
  
        if (dayOfWeek > 6) {  
            dayOfWeek = 0; // 重置为星期一  
            printf("\n");  
        }  
    }  
  
    // 如果最后一天不是星期六,则打印剩余的天数以保持格式  
    if (dayOfWeek != 0) {  
        for (; dayOfWeek <= 6; dayOfWeek++) {  
            printf("   ");  
        }  
        printf("\n");  
    }  
}  
  
// 注意:上述程序中的firstDayOfWeek是假设的,实际中需要通过更复杂的逻辑来正确计算  
// 这里仅为了展示基本框架

注意:上述程序中的firstDayOfWeek(每月第一天是星期几)是硬编码为1(星期一)的,实际中这个值需要通过某种方式(如使用Zeller’s Congruence等算法)来计算得到。此外,这个程序假定用户总是输入合法的年份和月份。

你可以根据这个基础框架继续完善,比如添加错误处理、优化用户界面等。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞64 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容