C语言打印日历

应同学的要求,写了个日历,输入年份,输出12个月份的日历表,代码如下 :

#include<stdio.h>

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

void printCalendar(int year)
{
    int day=1,days=0,week=0;
    int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    //得到从公元1900年01月01日到当前年份的1月1日之间的天数
    for(int i=1900;i<year;i++)
    {
        days+=365;
        days+=isLeap(i);//总天数修正
    }
    months[1]+=isLeap(year);//修正二月天数
    week=days%7;
    //循环输出12个月份日历表
    for(int i=0;i<12;i++)
    {
        //得到从二月份开始当前月份第一天的星期
        if(i>0)
        {
            days+=months[i-1];
            week=days%7;
        }
        printf("%d月:\n",i+1);
        //每月的表头
        printf("周一\t周二\t周三\t周四\t周五\t周六\t周日\n");
        //制表符 空出每个月第一天之前的位置
        for(int j=0;j<week%7;j++) printf("\t");
        //对当前月份,依次输出具体日期
        for(int j=1;j<=months[i];j++)
        {
            printf("%d\t",day);
            //一行输出七天后换行
            if((week+day)%7==0) printf("\n");
            day++;
        }
        printf("\n\n");
        day=1;
    }
}

int main()
{
    int year;
    scanf("%d",&year);
    //打印日历
    printCalendar(year);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值