用c语言实现打印日历

只要输入年份就能打印出相应的日历

#ifndef MAIN_H
#define MAIN_H

#include "stdio.h"
#include "math.h"
#include "stdlib.h"

//获取某一个月的最大天数 
int monthday(int, int);

//判断闰年 ,是返回1,不是返回0 
int isleapyear(int);

#endif 


int main()
{
    int year, month, days, weekday;
    int i, d;
    while (1)
    {
        printf("please input the year:\n");
        scanf_s("%d", &year);
        days = year - 1 + (year - 1) / 400 + (year - 1) / 4 - (year - 1) / 100;//计算某年第一天是星期几 

        for (month = 1; month <= 12; month++)
        {
            printf("\t\t****%d年--%d月****\n", year, month);
            printf("sun\tmon\ttues\twed\tthur\tfir\tsat\t\n");//表头
            i = 1;    d = 1;
            weekday = (days + 1) % 7;  //求星期几 
            while (i <= weekday)   //输出前面的空格 
            {
                printf("\t");
                i++;
            }

            while (d <= monthday(month, year))     //输出日期 
            {
                weekday = (days + 1) % 7;
                if (weekday == 6)   //最后一个是星期六,输出之后要换行 
                    printf("%d\n", d);
                else             //不是星期六的输出后不换行 
                    printf("%d\t", d);
                if (d == monthday(month, year))
                    printf("\n");
                d++;
                days++;
            }
        }
    }
}

int monthday(int month, int year)
{
    switch (month)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return 31; break;

    case 4:
    case 6:
    case 9:
    case 11:
        return 30; break;

    case 2:
        if (isleapyear(year))
        {
            return 29;//闰年29天 
            break;
        }
        else
        {
            return 28;
            break;
        }

    }

}


int isleapyear(int year)
{
    if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
        return 1;
    else
        return 0;
}

这是运行结果(2018年的日历)
2018年一月至四月
2018年五月至八月
2018年九月至十二月

猜你喜欢

转载自blog.csdn.net/LSMSMD0526/article/details/79680520
今日推荐