/**
*c语言万年历,dev c++运行通过
*参数输入格式eg:
*显示这一天是星期几:2013/01/01 2013.01.01
*显示这个月的整个日历:2013.01. 2013/01/
*控制台下运行
*/ #include #include #include int main(int x,char* date[]) { void wrong();//参数错误处理函数 void line();//输出横线格式函数 int week,t=0,k,i,year,month,day=0,flag1,flag2; /** *week:计算给定的时间是星期几 *t:计算与标定时间(公元1年1月1日星期一)相差的星期差。平年差一天,闰年差两天 *i是循环控制变量 *year,month,day分别是输入时间的年月日 *flag1记录有无精确日期输入,有day,输出这一天是星期几,没day输出这一整月 *flag2分别是判断平年闰年的记录 */ int common_day_of_the_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年年份每月天数 int leap_day_of_the_month[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年年份每月天数 char c[20];//储存输入日期的字符串 if(x==1){//输入参数错误,没有给日期,退出 wrong(); } strcpy(c,date[1]);//把输入的日期拷贝到c数组 if(c[0]!=0&&c[1]!=0&&c[2]!=0&&c[3]!=0&&c[4]!=0&&c[5]!=0&&c[6]!=0&&c[7]!=0){//数据安全性检查 for(i=0;i<4;i++){//检查年份 if(c[i]>='0'&&c[i]<='9'); else wrong(); } for(i=5;i<7;i++){//检查月份 if(c[i]>='0'&&c[i]<='9'); else wrong(); } flag1=0; } if(c[8]!=0&&c[9]!=0&&c[10]=='\0'){ for(i=9;i<10;i++){//检查日期day if(c[i]>='0'&&c[i]<='9'); else wrong(); } flag1=1; } year=(c[0]-'0')*1000+(c[1]-'0')*100+(c[2]-'0')*10+(c[3]-'0');//年月日的处理由char转换成int month=(c[5]-'0')*10+(c[6]-'0'); if(flag1==1)day=(c[8]-'0')*10+(c[9]-'0');//如果有日就转换 if(flag1==0){//输出整月 line(); printf("\n一 二 三 四 五 六 日\n"); for(i=1;i