算星期几

已知年、月、日计算星期几(用C)(对1960-2010年都有效)
这个问题困扰我好久了,一直找不到一个适合那个时间段的公式,希望大家能帮助我,非常感谢!
怎么没做呢,请高手指点指点吧,不胜感激!!!!!!

第1个回答  2007-05-25
没仔细检查,如有错误请自行修改。

#include <stdio.h>

int main()
{
static char *w[]={"日", "一", "二", "三", "四", "五", "六"};
int y, m, d, n;
while (1) {
printf("---请输入年,月,日: ");
n = scanf("%d %d %d", &y, &m, &d);
if (y==0) break;
n = weekday(y, m, d); /* 此前最好检查y, m, d 是否合法 */
printf("%d年%d月%d日是星期%s.\n", y, m, d, w[n]);
}
return 0;
}

int weekday(int y, int m, int d)
{
static int dm[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, days=d;
/* 计算当日是该年的第多少天 */
for (i=0; i<m; ++i) days += dm[i];
if (m>2 && y%4==0) {
if (y%100 || y%400==0) days++; /* 闰年二月份以后的日子要多算一天 */
}
--y;
return (y + y/4 -y/100 + y/400 + days) % 7;
}

运行起来是这样的:

---请输入年,月,日: 2007 5 24
2007年5月24日是星期四.
---请输入年,月,日: 2007 1 1
2007年1月1日是星期一.
---请输入年,月,日: 2004 8 6
2004年8月6日是星期五.
---请输入年,月,日: 2000 1 1
2000年1月1日是星期六.
---请输入年,月,日: 2000 12 31
2000年12月31日是星期日.
---请输入年,月,日: 0 0 0