日期之 台历(输入年月日历牌

本文介绍了一个用于计算特定年份和月份中每一天对应星期几的程序。该程序考虑了不同月份的天数变化,包括闰年的二月,并特别处理了1752年的历法变更。通过输入年份和月份,可以输出当月的日历。
# include <stdio.h>
# include <string.h>
# include <stdlib.h>   //不知道有木有0年2月三月这个日期有错误。
const int s[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

void  whatday(int m,int y)
{
    int day=0;
    int k=0;
    int flag=0;
    if(((y%4==0&&y%100!=0)||y%400==0)&&m==2)
    day=29;
    else
        day=s[m];
    printf("日     一     二     三     四     五     六\n");
    if(!(m==9&&y==1752))
    for(int d=1;d<=day;d++)
   {

    int ans;
    if(m==1||m==2)
        m+=12,y--;
        if((y<1752)||(y==1752&&m<9)||(y==1752&&m==9&&d<3))
            ans=(d+2*m+3*(m+1)/5+y+y/4+5)%7;
        else
            ans=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
     for(int i=0;i<((ans+1)%7)&&!flag;i++)          //保证第一行对齐,第一个数的确定,不但是输出空格,还的输出空了几个数的位空格
      printf("  ");
      flag=1;

     for(int i=0;i<((ans+1)%7-k);i++)
        printf("     ");
        k=(ans+1)%7;
     printf("%2d",d);
     if(k==6)
     {
         printf("\n");

     }
   }
   else                                    //1752年9月2号完事直接是14号。
       printf("               1      2     14     15     16\n"
              "17     18     19     20     21     22     23\n"
              "24     25     26     27     28     29     30\n");
}
int main()
{
    int year,mon;
    while(scanf("%d%d",&year,&mon)!=EOF)
    {
        whatday(mon,year);
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值