c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言年历程序

更新时间:2024-01-16

前言

在讨论C语言年历程序之前,让我们先了解一下什么是年历程序。年历程序是指能够根据用户选择的年份和月份,生成对应的日历的程序。这种程序对于需要经常查看特定月份的日历的用户非常有用。在本文中,我们将设计和编写一个基于C语言的年历程序。

代码实现

#include 

// 函数声明
int isLeapYear(int year);
int getFirstDayOfMonth(int year, int month);
int getNumDaysInMonth(int year, int month);
void printCalendar(int year, int month);

// 判断闰年
int isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

// 获取某年某月的第一天是星期几(0-6分别表示周日到周六)
int getFirstDayOfMonth(int year, int month) {
    int century = year / 100;
    year = year % 100;

    if (month < 3) {
        month += 12;
        year--;
    }

    int firstDay = (year + year / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10) % 7;
    return (firstDay + 7) % 7;
}

// 获取某年某月的天数
int getNumDaysInMonth(int year, int month) {
    if (month == 2) {
        return isLeapYear(year) ? 29 : 28;
    } else if (month == 4 || month == 6 || month == 9 || month == 11) {
        return 30;
    } else {
        return 31;
    }
}

// 打印某年某月的日历
void printCalendar(int year, int month) {
    int firstDay = getFirstDayOfMonth(year, month);
    int numDays = getNumDaysInMonth(year, month);

    // 打印日历标题
    printf("  日  一  二  三  四  五  六\n");

    // 打印空格
    for (int i = 0; i < firstDay; i++) {
        printf("    ");
    }

    // 打印日期
    for (int day = 1; day <= numDays; day++) {
        printf("%4d", day);
        firstDay = (firstDay + 1) % 7;
        if (firstDay == 0) {
            printf("\n");
        }
    }

    printf("\n");
}

int main() {
    int year, month;

    printf("请输入年份:");
    scanf("%d", &year);

    printf("请输入月份:");
    scanf("%d", &month);

    // 打印日历
    printCalendar(year, month);

    return 0;
}

代码解释

这个年历程序的核心部分是4个函数:isLeapYear、getFirstDayOfMonth、getNumDaysInMonth和printCalendar。以下是它们的作用:

  • isLeapYear函数用于判断某年是否是闰年。根据闰年的定义,在这个函数中我们使用了一些逻辑运算符来计算,如果是闰年则返回1,否则返回0。
  • getFirstDayOfMonth函数用于确定某年某月的第一天是星期几。我们使用了蔡勒公式(Zeller's Congruence)来计算,该公式需要用到儒略历的年份表示,因此我们需要对输入的年份进行一些简单转换。
  • getNumDaysInMonth函数用于确定某年某月的天数。根据月份的不同,返回相应的天数。
  • printCalendar函数用于打印某年某月的日历。它首先打印日历标题,然后打印正确数量的空格以对齐第一天,接着按照日期的顺序打印每一天,并在适当的位置换行。

总结

通过以上的代码实现和解释,我们完成了一个基于C语言的年历程序。这个程序使用了一些常见的日期计算方法,并且具有灵活性和可扩展性。我们只需提供年份和月份,程序就能生成对应的日历。希望这个年历程序能够帮助用户更方便地查看特定月份的日历。