用C语言实现简单的日历

效果

用C语言实现简单的日历

实现日历的流程图

Calendar流程图

源码

#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

蔡勒公式

0.png

原文: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

image

原文:如何计算某年第一天星期几? - (jianshu.com)

你可能感兴趣的:(用C语言实现简单的日历)