标签:星期 int 31 printf days 特定 year 年月日 2008
一.详细分析
1-问题的开始
昨天去图书馆看到一道C语言上机题。如果2008年3月1日是星期四,那么2008年1月1日是星期几?
这里补充一下小学没有学到的“测度”知识。
- 8减1得几?
- 8到1几个数?
- 2到8几个数?
第一个问题作差就好:8-1=7
第二个问题相信大学生都没有思考过,应该是:(8-1)+1=8
第三个问题就会了,有很多解法,最基本的:(8-2)+1=7
很多人在“两个数之间有几个数”这个问题上总是算不对,或者多算1个。主要原因是小学没有进行反复训练。所以在大学上编程课这是难以逾越的鸿沟问题。
2-问题的加剧
考虑另一个问题
- 0和10个数之间有几个数。
- 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-问题的恶化
- 2008年1月1日到2008年3月1日差几天?
- 如果2008 年3月1日是星期四,2008年1月1日是星期几?
这两个问题的难度是:
- 要把1月份的天数展开和日期想相加。
- 要把3月份的天数展开和日期想相加。
- 1月1日到底算不算1天;3月1日算不算1天。
- 计算的正确吗?
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;
}
标签:星期,int,31,printf,days,特定,year,年月日,2008 来源: https://blog.csdn.net/lihongtao8209/article/details/112131301
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。