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

来源:互联网 发布:2015年度网络流行语 编辑:程序博客网 时间:2024/06/06 09:45

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

#include <stdio.h>#include <math.h>/*********************************************************************************/int leap_year(int year)//判断是否是闰年,1是{if((year%4==0&&year%100!=0)||(year%400==0))return 1;elsereturn 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;elsereturn 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<mfd;i++)//日历格式printf("       ");//七个空格i=mfd;for(j=1;j<=mon[m-1];)//从头排着输就行了{printf("%7d",j);j++;if(i==6){printf("\n");i=0;}elsei++;}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;}

示例,像这样

1 0