用C语言实现一个万年历
一、如何实现一个万年历
①要实现万年历,首先你得知道每年的1月1日是星期几
这里要用到一个数学公式(这里不做数学证明)
w = d+2*m+3*(m+1)/5+y+y/4-y/100+y/400;
②要判断一年是否为闰年,关系到输出2月的天数
③写一个年份数组,然后输出,并且在周六(当然是你的每周最后一天)过后换行
二、代码块
#include
int TheFirstDay(int y) //计算1月1日星期几
{
int m = 13,d = 1;
int w;
y--;
w = d+2*m+3*(m+1)/5+y+y/4-y/100+y/400;
w=w%7+1;
printf("w = %d",w);
return w;
}
int IsLeapYear(int year)//判断是否为闰年
{
return ((year%4==0&&year%100!=0)||year%400==0);
}
void Print_year()//打印一年的日历
{
int year = 0;
int day = 0;
int count = 0;//一行7个,根据count取余来换行
int kong = 0;//月历中第一行空的格数
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31} ;//月份数组,记录每月天数
printf("请输入年份:");
scanf("%d",&year);
count = TheFirstDay(year);//判断是否为闰年
if(IsLeapYear(year)==1)
month[1]+=1;//闰年的二月加一天
for(int i = 0; i<12; i++)//打印每个月的月历。从1月到12月
{
printf("\n========%d月=========",i+1);
printf("\n日 一 二 三 四 五 六\n");
kong = count%7;
while(kong)
{
printf(" ");
kong--;
}
for(int j=1;j<=month[i];j++)
{
printf("%2d ",j);
count++;//每输出一个,count就+1
if(count%7==0)//count到7就输出换行符“\n”
{
printf("\n");
count = 0;
}
}
}
}
int main()
{
Print_year();
return 0;
}
三、运行结果
今天是2016.6.12星期日,咦。对啦
-------------------->>>C++实现万年历及查询节日功能