C的简单实现——万年历
C语言从“Hello world”入门,那不如用伴随我们每一天的星期来教会我们走路吧。
- 首选,万年历程序的实现我们需要建立一个模型而有关时间的无非就是时间轴了。不妨我们可以以1900年1月1日为原点进行参考。
- 紧接着从年开始分析,发现有平闰年之分,正所谓“四年一闰,百年再闰,四百年不闰”也就是年份可以被4或者100整除但是不能被400整除(if语句)。
- 年之后便是月 ,一年12个月这个容易解决。可是,日有30,31,29,28,而28,29由以上闰平年决定可以用if语句解决。那又该如何细分呢?这里就需要用switch——case。
- 最后如何精确到星期几呢?可以用%取余解决适当加上if语句。
代码如下:
#include<stdio.h>
int main()
{
int nian, yue, ri, xingqi, t;
int nian1=1900; /*yue1=1, ri1=1, xingqi1=1;*/
scanf("%d %d %d",&nian, &yue, &ri);
printf("您输入的是%d年%d月%d日\n",nian, yue, ri);
/* scanf("%d %d %d",&nian1, &yue1, &ri1);*/
int i;
if(nian>nian1)
{
i=1900;
while(i<nian)
{
if(i/4==0&&i/100!=0||i/400==0)
{
t+=366 ;
}
t+=365;
i++;
}
/*for(i=1900;i<nian;i++)
{
if(i/4==0&&i/100!=0||i/400==0)
{
t+=366 ;
}
t+=365;
}*/
}
else
{
i=nian;
while (i<1900)
{
if(i/4==0&&i/100!=0||i/400==0)
{
t+=366 ;
}
t+=365;
i++;
}
/*for(i=nian;i<1900;i++)
{
if(i/4==0&&i/100!=0||i/400==0)
{
t+=366 ;
}
t+=365;
}*/
}
for(i=0;i<yue;i++)
{
switch(i)
{
case 0:
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
t+=31;
break;
case 4:
case 6:
case 9:
case 11:
t+=30;
break;
case 2:
t+=28;
if(nian/4==0&&nian/100!=0||nian/400==0)
{
t+=29;
}
break;
default:
printf("月份输入错误:\n");
return 0;
}
}
/* if(nian/4==0&&nian/100!=0||nian/400==0)
{
t++;
}*/
xingqi=(t+ri)%7;
if(xingqi==0)
xingqi=7 ;
printf("星期%d\n",xingqi);
return 0;
}
*希望有所帮助,也希望能指出毛病*