效果
实现日历的流程图
源码
#include
#include
int monthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//存放每个月月份天数的数组,这是全局变量
//以下为声明各部分需要的函数
int isLeapYear(int);//声明检验是否闰年的函数
void printClenderTitle(int,int);//打印日历标题的函数
void printClenderBody(int,int);//打印日历主体的函数
int dayOftheWeekThisYear(int);//查询某年第一天是星期几
int dayOftheWeekThisYearQueryMonth(int,int);//查询某年某月的第一天星期几,需要调用上一个函数实现
int main()
{
int queryYear,queryMonth;//这两个变量用于存放查询的年和月
XunHuan://循环标号,使用goto语句跳转到此处继续执行
printf("Please enter the year you want to inqire(1584~9999):");
scanf("%d",&queryYear);
printf("Please enter the month you want to inquire(1~12):");
scanf("%d",&queryMonth);
printClenderTitle(queryYear,queryMonth);//调用打印日历标题函数,
printClenderBody(queryYear,queryMonth);//调用打印日历主题函数
printf("\n*******************Clender************************* \n\n");
printf("Enter y/n to continue or exit:");
char yn;
scanf("%c",&yn);
scanf("%c",&yn);//
getchar();
if(yn=='Y' || yn=='y')//判断语句,输入y则执行goto语句跳转执行
goto XunHuan;//跳转到XunHuan处执行
//test
/*以下是程序书写过程中进行测试的代码
printf("\n*********This is a test zone***********\n");
printf("%d\n",isLeapYear(queryYear));
printf("%d\n", dayOftheWeekThisYear(queryYear));
printf("%d\n", dayOftheWeekThisYearQueryMonth(queryYear,queryMonth));
printf("\n*********This is a test zone*********** \n");
*/
system("pause");
return 0;
}
void printClenderTitle(int year,int month)
{
printf("\n*******************Clender************************* \n");
printf("\n*****************公元%d年%d月********************* \n\n",year,month);//打印日历标题,用两个数据输出即可
}
void printClenderBody(int year,int month)
{
printf("Sun\tMon\tTue\tWes\tThu\tFri\tSar\n");
//打印日历上方的星期标题,用\t,输入制表符隔开
if(isLeapYear(year)==1)monthDays[2]=29;
else monthDays[2]=28;//修正数组,修正闰年2月的天数
int i=0,b;//定义几个临时变量,i用于循环数组,b是这一年这一月第一天星期几
b=dayOftheWeekThisYearQueryMonth(year,month);
for(i;i
蔡勒公式
原文:https://www.cnblogs.com/faterazer/p/11393521.html
使用蔡勒公式计算某年一月一日的星期
星期几=(5(year-1)/4-(year-1)/100+(year-1)/400)%7+1
公式推导
首先不仅仅是1990年1月1号是星期一,公元1年1月1日它也是星期一。
然后大家都知道求星期几使用总天数余7 也就是 days%7 为了方便理解可以对结果进行+1。
假如没有闰年一说那么 year年的第一天之前有多少天呢?答案就是
(year-1)365
总结一下公式变成了 星期几=(year-1)365%7+1
有人这时候就要说了最关键的闰年哪去了?好我们先要知道,闰年有366天,也就是比平年多一天,所以只要在原有的基础上加上闰年的数量就好了
闰年的数量为
(year-1)/4-(year-1)/100+(year-1)/400
这个不难理解吧,因为有被100整除不能被400整除的不算闰年。
接下来公式就完成了
星期几=((year-1)365+(year-1)/4-(year-1)/100+(year-1)/400)%7+1
看着长长的公式我们可以优化一下
365=364+1
(year-1)365=(year-1)*364+(year-1)
364/7=52 我们要求余所以前面364那部分可以直接扔了。
公式变为
星期几=(5(year-1)/4-(year-1)/100+(year-1)/400)%7+1
原文:如何计算某年第一天星期几? - (jianshu.com)