计算特定年月日是星期几

一.详细分析

1-问题的开始

昨天去图书馆看到一道C语言上机题。如果2008年3月1日是星期四,那么2008年1月1日是星期几?
这里补充一下小学没有学到的“测度”知识。

  1. 8减1得几?
  2. 8到1几个数?
  3. 2到8几个数?

第一个问题作差就好:8-1=7
第二个问题相信大学生都没有思考过,应该是:(8-1)+1=8
第三个问题就会了,有很多解法,最基本的:(8-2)+1=7

很多人在“两个数之间有几个数”这个问题上总是算不对,或者多算1个。主要原因是小学没有进行反复训练。所以在大学上编程课这是难以逾越的鸿沟问题。

2-问题的加剧

考虑另一个问题

  1. 0和10个数之间有几个数。
  2. 1和10之间有几个数。

这个问题的困难是两个数之间的通项公式怎么写。比如d=4的等差数列。
3 7 10 14 17
1 2 3 4 5
0 1 2 3 4
问个问题:等差数列的通项公式:

a n = a 1 + ( n − 1 ) d a_{n}=a_{1}+(n-1)d an​=a1​+(n−1)d

其索引是1为起点?还是以0为起点?
二项式定理呢?
这个问题在微积分中会有很大影响。

3-问题的恶化

  1. 2008年1月1日到2008年3月1日差几天?
  2. 如果2008 年3月1日是星期四,2008年1月1日是星期几?

这两个问题的难度是:

  1. 要把1月份的天数展开和日期想相加。
  2. 要把3月份的天数展开和日期想相加。
  3. 1月1日到底算不算1天;3月1日算不算1天。
  4. 计算的正确吗?

4-解决之道

很多知识都有歧义,以数学学科最多。天下问题,唯记不破。如果能记得住就好。

二.概要开发

运行程序代码后可以依次输入:
1
2
2021
来计算一下2021年2月1日是星期几?

#include<stdio.h>

int main()
{
int year,mon,day;
int days;
int wk;
int weeks[12]={31,29,31,30,31,30,31,31,30,31,30,31};
days=0;
printf("day:");
scanf ("%d", &day);
days+=day;
printf("month:");
scanf ("%d", &mon);
for(int i=0;i<mon-1;i++)
{
   days=days+weeks[i];
}

printf("year:");
scanf ("%d", &year);
if (year%4==0&& year%100!=0 || year%400==0)
{
  printf("(leap year.)");
}
else
{days--;}

year-=1;
wk=(year+year/4-year/100+year/400+days) %7;
printf("%d,%d", year+1,wk);

    return 0;
}
上一篇:GB50108-2008 地下工程防水技术规范 免费下载


下一篇:2020年2月最新可用KMS激活服务器地址