今天是星期几?这个问题看着简单,但你会用C语言运算出来今天是星期几嘛?
首先给他一个值·,例:1945年的10月1日,判断它是星期几,那么只需要通过简单的公式判断出他是星期几,并且证明其正确性。
入格式:
输入数据的数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
输出格式:
对于每组输入数据,输出一行,表示该日期是星期几英文单词。
输入样例:
2011/11/17
输出样例:
thursday
具体判断某一年的某月某日是星期几的话有专门的科学家做过研究并总结出了很多推算方法的,这个是比较简单的算法:
result=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
(其中的“/”是将除得的结果取整数部分,“%”是求余)
其中year是年份,days是某一年的天数,result得出的结果0,1,2,…,6分别对应的星期天,星期一,星期二,…,星期六;
同样,如果你想定位某年的任一天是星期几,这个公式同样适用的,不过此时的days则是这一天在这一年中的累积天数.
#include "stdio.h"char ew[7][20]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};int a[15]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //一年里面有7个月是31天的,有4个月是30天的,则2月是28天或29天的 int main(){int y,m,d; scanf("%d/%d/%d",&y,&m,&d);if(y%4==0&&y%100!=0||y%400==0) a[2]=29; int ans=d,i; for(i=1;i<=m-1;i++){ ans+=a[i];}int s,r;s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+ans;r=s%7;for(i=0;i<=6;i++){if(r==i){printf("%s\n",ew[i]);break;}}}
代码详解
int y,m,d;
这段代码的意思就是 y,m,d的类型为整数。 y是年份 m是月 d是日
if(y%4==0&&y%100!=0||y%400==0)a[2]=29;
根据输入的年份判断2月是平月还是闰月 ,如果是平月是28月,如果是闰月则是29天.闰月29天赋值给变量a中的第二字符,,也就是“28”此时替换成了29
for(i=1;i<=m-1;i++){ ans+=a[i];}
附带流程图,一看就懂
int s,r;
定义整型 s,r
s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+ans;
根据运算顺序进行运算
运算完之后再把值赋值给s
r=s%7;
s内的值抹除7,剩下的余赋值给r
for(i=0;i<=6;i++){if(r==i){printf("%s\n",ew[i]);break;
再次运行for循环
本期教程到此就结束了,希望这篇文章能够帮助大家更好的理解这段程序。