稍微改了下对齐格式,加了注释
*/
/*
1、闰年的算法:
如果某年能被4整除但不能游则敏被100整除,
或者能被400整除,
则该年是闰年.
用表达式表示就是
(year
%4
==
0
&&
year%100
!=
0)
||
(year%400
==
0)
2、计算某一天是星期几:
已知1900年的1月1号为神枝星期一,
然后就可以用某一天和1900年的1月1号相差的天数对7取余来求星期,
本题是用盯喊的公元1年的1月1号作为基准
*/
#include
<stdio.h>
#include<conio.h>
#include<stdlib.h>
int
IsLeapYear(int)
//函数定义
void
main()
{
int
i
int
day
int
year
int
temp
int
temp_i
long
int
Year_days
=
0
int
Year_Start
=
1
int
Per_Year_Days
int
month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}
printf("Please
enter
the
year:
")
scanf("%d",&year)
//输入年份
while(Year_Start
<
year)
//从公元1年开始执行while循环,
该年的一月一号为星期一
{
if(
IsLeapYear(
Year_Start
)
)
Per_Year_Days
=
366
//如果是闰年,
则一年有366天
else
Per_Year_Days
=
365
//如果不是闰年,
则一年有365天
Year_days
=
Year_days
+
Per_Year_Days
//Year_days为从公元1年到输入年份的前一年的天数的总和
Year_Start++
}
for(
temp
=
1
temp
<=12
temp++
)
//temp从1到12,
对应一年内12个月
{
switch(
temp
)
//用switch语句将temp和12个月对应起来
{
case
1:
printf("
January(%d)\n",year)
//一月
break
case
2:
printf("
February(%d)\n",year)
//二月
break
case
3:
printf("
March(%d)\n",year)
//三月
break
case
4:
printf("
April(%d)\n",year)
//四月
break
case
5:
printf("
May(%d)\n",year)
//五月
break
case
6:
printf("
June(%d)\n",year)
//六月
break
case
7:
printf("
July(%d)\n",year)
//七月
break
case
8:
printf("
August(%d)\n",year)
//八月
break
case
9:
printf("
September(%d)\n",year)
//九月
break
case
10:
printf("
October(%d)\n",year)
//十月
break
case
11:
printf("
November(%d)\n",year)
//十一月
break
case
12:
printf("
December(%d)\n",year)
//十二月
break
}
i
=
Year_days
%
7
//每个星期有7天,
故用每年的天数对7取余
printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n")
if(
i
!=
0
)
//如果余数不为零
for(
temp_i
=
0
temp_i
<
i
temp_i++)
printf("\t")
//则打印空格(这里用\t代替空格,
更加美观),
空格数为i
day
=
1
//初始化day为1,
为下面的while循环做准备
if(
IsLeapYear(year)
&&
temp
==
2)
//如果输入的年份是闰年,
并且月份为2
while(
day
<=
month_day[12]
)
//day为一循环变量,
取值为1-365(闰年的话为1-366)
{
if(
day
>1
)
//如果天数大于一
if(
Year_days
%
7
==
0
)
//如果是星期日,
则换行
printf("\n")
if(
day
>=
10
)
printf("%d\t",day)
//打印天数+空格
else
printf("%d\t",day)
Year_days++
day++
}
else
//如果不满足"输入的年份是闰年,
并且月份为2"
while
(day
<=
month_day[temp-1])
{
if(
day
>
1
)
if(
Year_days
%
7
==
0
)
printf("\n")
if(
day
>=10
)
printf("%d\t",day)
else
printf("%d\t",day)
Year_days++
day++
}
printf("\n")
if(
getch()
==
'q'
)
//如果输入为q,
则退出程序
exit(0)
}
getch()
//每按一次键,
打印一个月份
}
int
IsLeapYear(
int
year
)
{
//判断是否是闰年,
是则返回1,
否则返回0
if
((year
%4
==
0)
&&
(year
%
100
!=
0)
||
(year
%
400
==
0)
)
return
1
else
return
0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)