根据日期得到今天是星期几

问题描述:

       怎样能通过一个年月日的输入而得到该日期所处的星期呢?

解决思路:

       (1)、首先我们知道一个星期是七天,而且这七天是周而复始,不断循环的!(重要条件之一)

       (2)、其次如果我们知道一个确定的日期,而且知道它对应的是星期几。那么我们就可以通过条件(1)来

                    计算出一个指定日期对应的星期了!

                           这里,有同学可能就要问了:知道了一个确定的日期(我们称该日期为基准日期)和其对应的星

                    期(基准星期),怎么就可以知道其他日期(目标日期)所对应的星期(目标星期)了呢?

                           嗯,这就是算法的核心所在!  首先我们可以通过“基准日期”和“目标日期”计算得出它俩之间的天

                    数(AllDays),然后用该天数对7(一星期的天数)求余再加上基准星期就是目标星期了!说出来有

                    点绕,我列出下面的公式就可以一目了然了:

                      

        (3)、好了,最后一个条件:怎么得到一个基准日期和其对应的基准星期呢?

                     我是通过手机的日历功能查看知道,我的手机能翻到的最早的日期是1970年1月1日,那天是星期四。


好,那么万事俱备,只差撸代码了!

源码

#include
#include/**功能:判断是否是闰年*@year : 年号*返回值: 是闰年返回1 ,不是返回0*/
int JudgeLeapYear(int year)
{return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}/**功能:计算1970年1月1日到指定年月日总共多少天*参数说明:*@year, @month, @day 指定年月日*返回值: 总共天数*/
int GetAllDays(int year, int month, int day)
{int i, j;int AllDays = 0;for (i = 1970;i < year;i++)    //1970.1.1  是 星期四{if (JudgeLeapYear(i))      //闰年366天,平年365天{AllDays += 366;}else{AllDays += 365;}}//计算最后一年的非整年的天数for (j = 1;j < month;j++){switch (j){case 2:{AllDays += (28 + JudgeLeapYear(year));break;}case 1:case 3:case 5:case 7:case 8:case 10:case 12:{AllDays += 31;break;}default:{AllDays += 30;break;}}}AllDays += day;return AllDays;
}/**功能: 根据总天数来计算当前日期为星期几,并输出*参数说明:*@AllDays: 1970年1月1日到指定日期经过的总天数*返回值: 无*/
void JudgeWeek(int AllDays)
{switch (AllDays % 7){case 1:printf("星期四");break;case 2:printf("星期五");break;case 3:printf("星期六");break;case 4:printf("星期日");break;case 5:printf("星期一");break;case 6:printf("星期二");break;case 7:printf("星期三");break;}printf("\n");
}int main(void)
{int year, month, day;int AllDays = 0;int i;do{printf("请输入日期: xxxx.xx.xx\n");scanf("%d.%d.%d", &year, &month, &day);if (month <= 0 || month > 12 || day > 31 || year < 1970){printf("输入错误,请重新输入\n");continue;}AllDays = GetAllDays(year, month, day);JudgeWeek(AllDays);break;} while (1);
}

运行截图


                  

                                                           

                   


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部