c语言编写程序“输入任意一个年份和月份,打印当月日历。”

时间:2021-05-19 09:17:32

日常生活中我们所见到的日历如图所示:
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
代码思路:
1. 我们想打印某年某月的日历,我们就得知道这个月是从星期几开始,且这个月有多少天。
2. 要想知道这个月是从星期几开始的,就得知道上一个月的最后一天是星期几,要想知道上一个月的最后一天是星期几,就得知道上上一个月是星期几结束的,以此推类,我们就需要定义一个基准年以及基准年是从星期几开始的。
3. 然后计算这个年份是从星期几开始的,以及月份是从星期几开始的,并实现打印。

代码:
1. 主函数
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
2.其次定义一个全局的数组变量,用于存放每个月的天数。
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
3. first_ day_ of _year函数
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
其中isleap函数:
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
4. first_ day _ of_month函数
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
5. show展示函数
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
参考代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

mon[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
//判断闰年
int isleap(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        return 1;
    else
        return 0;
}
//年份的第一天
int first_day_of_year(int year)
{
    int base_year = 2000;  //定义一个基准年2000年
    int first_day = 6;     //基准天:2000年1月1号是星期6
    int i = 2000;
    int total = 0;          //天数总和
    for (i = base_year; i < year; i++)
    {
        total = total + 365 + isleap(i);  //isleap函数用于判断年份是否是闰年,如果是返回1,不是返回0
    }
    return (total+first_day)%7;
}
//月份第一天
int first_day_of_month(int year, int month, int first_year)
{
    int total = 0;  //天数和
    int i = 0;
    for(i = 1; i < month; i++)
    {
        total = total + mon[isleap(year)][i];
    }
    return (total + first_year) % 7;
}
//展示日历
void show(int year,int  month, int first_month)
{
    int i = 0;
    printf("一 二 三 四 五 六 日\n");
    for (i = 0; i < first_month-1; i++)
    {
        printf(" ");     //月份第一天是从first_month开始的,所以首先打印first_month-1个空格
    }
    for (i = 1; i <= mon[isleap(year)][month]; i++)
    {
        printf("%-5d", i);
        if ((first_month-1+i) % 7 ==0) //如果(数字+空格数)%7==0,则换行
            printf("\n");
    }
    printf("\n");
}
int main()
{
    int year, month;
    printf("年/月:");  //输入你想打印的年份
    scanf("%d/%d", &year, &month);
    int first_year = first_day_of_year(year);//年份第一天
    int first_month = first_day_of_month(year, month, first_year);//月份第一天
    show(year, month, first_month);
    system("pause");
    return 0;
}

运行:
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
对照日历:
c语言编写程序“输入任意一个年份和月份,打印当月日历。”
c语言编写程序“输入任意一个年份和月份,打印当月日历。”