c 语言日历程序,C/C++语言 小程序 日历(万年历)

假期做的,容错性不太好,暂时没啥错误,如果发现错误请留言

#include

#include

/*********************************************************************************/

int leap_year(int year)//判断是否是闰年,1是

{

if((year%4==0&&year%100!=0)||(year%400==0))

return 1;

else

return 0;

}

/*********************************************************************************/

int fday(int year)//每年的第一天是星期几

{

double s;

s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1);

return (int)s%7;

}

/*********************************************************************************/

int passd(int mon,int leap)//过了多少天

{

int sum=0;

switch(mon)/*先计算某月以前月份的总天数*/

{

case 1:sum=0;break;

case 2:sum=31;break;

case 3:sum=59;break;

case 4:sum=90;break;

case 5:sum=120;break;

case 6:sum=151;break;

case 7:sum=181;break;

case 8:sum=212;break;

case 9:sum=243;break;

case 10:sum=273;break;

case 11:sum=304;break;

case 12:sum=334;break;

}

if(leap==1&&mon>2)//闰年以后加1,当然要过了二月

return sum+1;

else

return sum;

}

/*********************************************************************************/

void put(int y,int m,int d,int fd,int l,int mon[])

{

int pd,mfd,i,j;

pd=passd(m,l);

mfd=pd%7+fd;//每月第一天星期几

switch((d-1+mfd)%7)//自己算算

{

case 0:printf("今天是星期日\n");break;

case 1:printf("今天是星期一\n");break;

case 2:printf("今天是星期二\n");break;

case 3:printf("今天是星期三\n");break;

case 4:printf("今天是星期四\n");break;

case 5:printf("今天是星期五\n");break;

case 6:printf("今天是星期六\n");break;

}

printf("~~~~~我~~~~~是~~~~~华~~~~~丽~~~~~分~~~~~割~~~~~线~~~~~\n");

printf(" %d年%d月份的日历 \n",y,m);

printf(" 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");

if(mfd>=7)

mfd-=7;

for(i=0;i

printf(" ");//七个空格

i=mfd;

for(j=1;j<=mon[m-1];)//从头排着输就行了

{

printf("%7d",j);

j++;

if(i==6)

{

printf("\n");

i=0;

}

else

i++;

}

printf("\n");

printf("~~~~~我~~~~~是~~~~~华~~~~~丽~~~~~分~~~~~割~~~~~线~~~~~\n");

}

/*********************************************************************************/

int main(int argc, char* argv[])

{

int year,mon,leap,fd,day;

char a,b;

int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//注意二月天数

int lmonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};

printf("这是一个能输出日历的程序,输入的格式为xxxx xx xx,输入0时结束。\n");

while(1)

{

year=0,mon=0;

printf("请输入年月,中间用空格隔开:\n");

scanf("%d%c%d%c%d",&year,&a,&mon,&b,&day);

/*********************************************************************************/

if(year==0)break;

leap=leap_year(year);

if(leap==1)

{

if(a!=' '||b!=' '||mon<=0||mon>12||day>lmonth[mon-1]||day<1)

//关于容错性,有点坑= =

{

printf("输入有误,请重新输入\n");

continue;

}

printf("本年是闰年\n");

printf("本月有%d天\n",lmonth[mon-1]);

fd=fday(year);

put(year,mon,day,fd,leap,lmonth);

}

else

{

if(a!=' '||b!=' '||mon<=0||mon>12||day>month[mon-1]||day<1)

{

printf("输入的格式错误,请重新输入\n");

continue;

}

printf("本年不是闰年\n");

printf("本月有%d天\n",month[mon-1]);

fd=fday(year);

put(year,mon,day,fd,leap,month);

}

}

return 0;

}

示例,像这样

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值