各位高手,帮帮忙啊,别嫌麻烦啊!红色代码是什么意思啊???
红色代码是什么意思啊???md为什么等于零啊???
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
int mdays(int y,int m){
if (m==2) return (y%4==0 && (y%100==0 || y%400==0))?29:28;
else if (m==4 || m==6 || m==9 || m==11) return 30;
else return 31;
}
void DayOfWeek()
{
int rtnDay;
int y,m,d;
char ch;
while (1)
{
printf("请输入年月日(xxxx,xx,xx): ");
scanf("%d,%d,%d", &y, &m, &d);
fflush(stdin);
rtnDay = (3*y-(7*(y+(m+9)/12))/4+(23*m)/9+d+17-((y+(m<3?-1:0))/100+1)*3/4) % 7;
printf("%04d年%02d月%02d日 是 星期%d\n", y, m, d, rtnDay?rtnDay:7);
printf("继续查询(y/n)");
ch = getchar();
if(ch != 'y' && ch != 'Y')
break;
}
}
void GetMonth(int D, int md, int n)
{
int N ,m,d,y,c,Wd;
int i,maxday,i1;
if(md>=13||md<=0)
printf("HAVE WRONG!");
else
{
for(i1=0;;md++,i1++)
{
if(md==0)
{
md=12;
D-=1;
}
else
if(md==13)
{
md=1;
D+=1;
}
m=md;
printf("\n============%d,%2d============\n",D,md);
if(0<m&&m<=12)
{
switch(m)
{
case 1:maxday=31;break;
case 2:if(D%4==0&&D%100!=0||D%400==0)
maxday=29;
else
maxday=28;
break;
case 3:maxday=31;break;
case 4:maxday=30;break;
case 5:maxday=31;break;
case 6:maxday=30;break;
case 7:maxday=31;break;
case 8:maxday=31;break;
case 9:maxday=30;break;
case 10:maxday=31;break;
case 11:maxday=30;break;
case 12:maxday=31;break;
default:printf("HAVE WRONG");
}
if(0<m&&m<=2)
{
N=D-1;
m=m+10;
}
else
{
N=D;
m=m-2;
}
c=N/100;
y=N%100;
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7;/*caiyz6301
孕1月w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 蔡勒公式
公式中的符号含义如下,w:星期;c:世纪;y:年(两位数);m:月
(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,
比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
*/
printf(" SUN MOU TUE WED TUR FRI SAT\n");
for(i=0;i<Wd;i++)
printf("%4c",' ');
for(d=1;d<=maxday;d++)
{
printf("%4d",d);
Wd=(Wd+1)%7;
if(Wd==0)
printf("\n");
}
}
else
printf("HAVE WRONG!");
if(i1==n)
break;
}
}
}
void MonthOfYear()
{
char ch;
int y, m;
while (1)
{
printf("请输入年月(xxxx,xx): ");
scanf("%d,%d", &y, &m);
fflush(stdin);
GetMonth(y, m, 0);
printf("\n继续查询(y/n)");
ch = getchar();
if(ch != 'y' && ch != 'Y')
break;
}
}
void GetYear()
{
char ch;
int y;
while (1)
{
printf("请输入年: ");
scanf("%d", &y);
if(y==2011)
{
printf("2011年2月4日(农历月初二)12:33 立春\n");
printf("农历正月十七2月19日08:25 雨水\n");
printf("农历二月初二3月6日06:30 惊蛰\n");
printf("二月十七3月21日07:21 春分");;
printf("4月5日(农历三月初三)11:12 清明\n");
printf("4月20日(三月十八)18:17 谷雨\n");
printf("2011年5月6日(农历四月初四)04:23 立夏\n");
printf("5月21日(四月十九)17:21 小满\n");
printf("6月6日(五月初五)08:27 芒种\n");
printf("6月22日(五月廿一日)01:17 夏至\n");
printf("7月7日(六月初七)18:42 小暑\n");
printf("月23日(六月廿三日)12:12 大暑\n");
printf("2011年立秋详细时间:阳历8月8日04:34(七月初九)\n");
printf("8月23日19:21 处暑(七月廿四日)\n");
printf("9月8日07:34 白露(农历八月十一)\n");
printf("9月23日17:05 秋分(八月廿六日)\n");
printf("10月8日23:19 寒露(九月十二)\n");
printf("10月24日02:30 霜降(九月廿八日)\n");
printf("2011年11月8日02:35 立冬(十月十三)\n");
printf("11月23日00:08 小雪(十月廿八日)\n");
printf("12月7日19:29 大雪(十一月十三)\n");
printf("12月22日13:30 冬至(农历十一月廿八日)\n");
printf("2012年1月6日06:44 小寒(十二月十三)\n");
printf("2012年1月21日00:10 大寒(十二月廿八日) \n");
}
fflush(stdin);
GetMonth(y, 1, 11);
printf("\n继续查询(y/n)");
ch = getchar();
if(ch != 'y' && ch != 'Y')
break;
}
}
int main()
{int y,m,d,days,z; char ch;
system("color 64");
while(1)
{
printf("请输入年月日(xxxx,xx,xx): ");
scanf("%d,%d,%d", &y, &m, &d);
days=d;z=m;
while(z>1){days+=mdays(y,z-1);z--;}
printf(" 距离%04d年1月1日 %03d 天\n",y,days);
if(y==2011&&m==2&&d>=4&&d<=19)ch='a';
if(y==2011&&(m==2&&(d>19&&d<=29))||(y==2011&&m==3&&(d>=1&&d<=6)))ch='b';
if(y==2011&&m==3&&d>6&&d<=21)ch='c';
if(y==2011&&(m==3&&(d>21&&d<=31))||(y==2011&&m==4&&(d>=1&&d<=5)))ch='d';
if(y==2011&&m==4&&d>5&&d<=20)ch='e';
if(y==2011&&(m==4&&(d>20&&d<=30))||(y==2011&&m==5&&(d>=1&&d<=6)))ch='f';
if(y==2011&&m==5&&d>6&&d<=21)ch='g';
if(y==2011&&(m==5&&(d>21&&d<=31))||(y==2011&&m==6&&(d>=1&&d<=6)))ch='h';
if(y==2011&&m==6&&d>6&&d<=22)ch='i';
if(y==2011&&(m==6&&(d>22&&d<=30))||(y==2011&&m==7&&(d>=1&&d<=7)))ch='j';
if(y==2011&&m==7&&d>7&&d<=23)ch='k';
if(y==2011&&(m==7&&(d>23&&d<=31))||(y==2011&&m==8&&(d>=1&&d<=8)))ch='l';
if(y==2011&&m==8&&d>8&&d<=23)ch='m';
if(y==2011&&(m==8&&(d>23&&d<=31))||(y==2011&&m==9&&(d>=1&&d<=8)))ch='n';
if(y==2011&&m==9&&d>8&&d<=23)ch='o';
if(y==2011&&(m==9&&(d>23&&d<=30))||(y==2011&&m==10&&(d>=1&&d<=8)))ch='p';
if(y==2011&&m==10&&d>8&&d<=24)ch='q';
if(y==2011&&(m==10&&(d>24&&d<31))||(y==2011&&m==11&&(d>=1&&d<=8)))ch='r';
if(y==2011&&m==8&&d>8&&d<=23)ch='s';
if(y==2011&&(m==11&&(d>23&&d<=30))||(y==2011&&m==12&&(d>=1&&d<=7)))ch='t';
if(y==2011&&m==12&&d>7&&d<=22)ch='u';
if((y==2011&&(m==12&&(d>22&&d<=31)))||(y==2012&&m==1&&(d>=1&&d<=6)))ch='v';
if(y==2012&&m==1&&d>6&&d<=20)ch='w';
if(y==2012&&(m==1&&(d>20&&d<=31))||(y==2012&&m==2&&(d>=1&&d<=3)))ch='x';
switch(ch)
{case'a':printf("2011年2月4日(农历月初二)12:33 立春\n");break;
case'b':printf("农历正月十七2月19日08:25 雨水\n");break;
case'c':printf("农历二月初二3月6日06:30 惊蛰\n");break;
case'd':printf("二月十七3月21日07:21 春分");break;
case'e':printf("4月5日(农历三月初三)11:12 清明\n");break;
case'f':printf("4月20日(三月十八)18:17 谷雨\n");break;
case'g':printf("2011年5月6日(农历四月初四)04:23 立夏\n");break;
case'h':printf("5月21日(四月十九)17:21 小满\n");break;
case'i':printf("6月6日(五月初五)08:27 芒种\n");break;
case'j':printf("6月22日(五月廿一日)01:17 夏至\n");break;
case'k':printf("7月7日(六月初七)18:42 小暑\n");break;
case'l':printf("月23日(六月廿三日)12:12 大暑\n");break;
case'm':printf("2011年立秋详细时间:阳历8月8日04:34(七月初九)\n");break;
case'n':printf("8月23日19:21 处暑(七月廿四日)\n");break;
case'o':printf("9月8日07:34 白露(农历八月十一)\n");break;
case'p':printf("9月23日17:05 秋分(八月廿六日)\n");break;
case'q':printf("10月8日23:19 寒露(九月十二)\n");break;
case'r':printf("10月24日02:30 霜降(九月廿八日)\n");break;
case's':printf("2011年11月8日02:35 立冬(十月十三)\n");break;
case't':printf("11月23日00:08 小雪(十月廿八日)\n");break;
case'u':printf("12月7日19:29 大雪(十一月十三)\n");break;
case'v':printf("12月22日13:30 冬至(农历十一月廿八日)\n");break;
case'w':printf("2012年1月6日06:44 小寒(十二月十三)\n");break;
case'x':printf("2012年1月21日00:10 大寒(十二月廿八日) \n");break;
defult:printf("error\n");
}
printf("是否退出(y/n)");
fflush(stdin);
ch = getchar();
if(ch == 'y' || ch == 'Y')
break;
}
while(1)
{
system("cls");
printf("1.查询星期\n");
printf("2.查询月份\n");
printf("3.显示一年\n");
printf("4.退出程序\n");
ch = getchar();
fflush(stdin);
switch(ch)
{
case '1':
DayOfWeek();
break;
case '2':
MonthOfYear();
break;
case '3':
GetYear();
break;
case '4':
printf("是否退出(y/n)");
ch = getchar();
fflush(stdin);
if(ch == 'y' || ch == 'Y')
exit(0);
break;
}
}
}