输入某年,某月,某日,计算出它是星期几

如题所述

蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。

简单地说,c是年份的前两位,y是年份后两位,m是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时c和y均按上一年取值。)

算出来的w除以7,余数是几就是星期几。如果余数是0,则为星期日。

以今天2006年7月21日为例,用蔡勒(Zeller)公式进行计算,过程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=6+[6/4]+[20/4]-2×20+[26×(7+1)/10]+21-1
=6+[1.5]+5-40+[20.8]+21-1
=6+1+5-40+20+20
=12 (除以7余5)
即2006年7月21日是星期5。

程序应该比较简单
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-07-27
/*程序实现从键盘输入年份,打印出这一年的日历的功能
你可以自己查看对应的是星期几。*/

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int IsLeapYear(int);

main()
{
int i;
int day;
int year;
int temp;
int temp_i;
long int Year_days = 0;
int Year_Start = 1;
int Per_Year_Days;
int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};

printf("输入年份: "); /*从键盘输入年份*/
scanf("%d",&year);

while(Year_Start < year)
{
if( IsLeapYear( Year_Start ) ) /*判断输入的年份是否为闰年*/
Per_Year_Days = 366;
else
Per_Year_Days = 365;

Year_days = Year_days + Per_Year_Days;
Year_Start++;
} /*这个while循环计算从1到输入的年份共有多少天*/

for( temp = 1; temp <=12; temp++ )
{ /*这个for循环打印出该年每个月的日历*/
switch( temp )
{
case 1:
printf(" January(%d)\n",year);
break;
case 2:
printf(" February(%d)\n",year);
break;
case 3:
printf(" March(%d)\n",year);
break;
case 4:
printf(" April(%d)\n",year);
break;
case 5:
printf(" May(%d)\n",year);
break;
case 6:
printf(" June(%d)\n",year);
break;
case 7:
printf(" July(%d)\n",year);
break;
case 8:
printf(" August(%d)\n",year);
break;
case 9:
printf(" September(%d)\n",year);
break;
case 10:
printf(" October(%d)\n",year);
break;
case 11:
printf(" November(%d)\n",year);
break;
case 12:
printf(" December(%d)\n",year);
break;
}
i = Year_days % 7;
printf("Mon Tue Wed Thu Fri Sat Sun\n");
if( i != 0 )
for( temp_i = 0; temp_i < i; temp_i++)
printf(" ");
day = 1;
if( IsLeapYear(year) && temp == 2) /*如果是闰年的2月*/
while( day <= month_day[12] )
{
if( day >1 )
if( Year_days % 7 == 0 )
printf("\n");
if( day >= 10 )
printf("%-4d",day);
else
printf("%-4d",day);
Year_days++;
day++;
}

else /*不是闰年*/
while (day <= month_day[temp-1])
{
if( day > 1 )
if( Year_days % 7 == 0 )
printf("\n");
if( day >=10 )
printf("%-4d",day);
else
printf("%-4d",day);
Year_days++;
day++;
}
printf("\n");
if( getch() == 'q' ) /*输入Q结束*/
exit(0);
}
getch();
}

int IsLeapYear( int year ) /*判断是否为闰年*/
{
if ((year %4 == 0) && (year % 100 != 0) ||
(year % 400 == 0) )
return 1;
else
return 0;
}
第2个回答  2007-07-27
又臭又长
<input name="YearText" type="text" id="YearText" value="2007" size="6" />
<input name="MonthText" type="text" id="MonthText" value="7" size="4" />
<input name="DayText" type="text" id="DayText" value="1" size="4" />
<input type="button" name="button" id="button" value="计算" onclick="js();"/>
<script language="javascript">
function js()
{
var date=new Date(document.all.YearText.value,document.all.MonthText.value,document.all.DayText.value);
var xq=date.getDay();
var xqr="";
switch(xq)
{

case 0: xqr="星期四";break;
case 1: xqr="星期五";break;
case 2: xqr="星期六";break;
case 3: xqr="星期日";break;
case 4: xqr="星期一";break;
case 5: xqr="星期二";break;
case 6: xqr="星期三";break;
}

alert(date.getYear()+"年"+date.getMonth()+"月"+date.getDate() +"日:"+xqr)
}
</script>
用记事本新建文本文档 输入上面的内容 存为test.html后打开就可以实现
第3个回答  2007-07-27
楼上的,c/c++里面怎么出了js了?看好了分别再发表

mfc的:
CTime time(2007,7,27,15,15,15);
int nWeek=time.GetDayOfWeek();
//1-7分别代表星期一到星期天
第4个回答  2007-07-27
用这类软件就行了,网站、手机上面都有。

而且,还能够阴阳历互换!
相似回答