日期计算(C语言)

谁知道 一年中第几天是星期几 如何计算?

给你个更强大的程序,只要你输入那年的年和月
就能得出一分月历,不过是C++编的。
你的程序要求能用下边的部分代码,自己选择,
再加以完善,就能实现了。
#include<iostream>
#include<iomanip>
using namespace std;
//---------------------------------------------------------
void main()
{
int year1=1,month,wkday11=1,daysfrom11=0,year;
//year . month --年 . 月;
//year1是计算的最初基数,也是能够查询到的最早年限;
//daysfrom11 -- 某年某月距离1月1日即元旦的天数,初值为0;
//功能实现靠daysfrom11累加而得;
int mthdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//mthdays[i]表示月份为i的那一个月的天数(若闰年的话,2月分要再增加1天);
cout<<"请出入你所要查询的年份以及月份(例如2007 2):";
cin>>year>>month;//输入要查询的年份以及月份
int i,ans;
//----------------------------------------------------------
for(i=1;i<year;i++)
{
if(year==1)
break;
daysfrom11+=365;
if( (i%4==0)&&(i%100!=0)||(i%400==0) )
daysfrom11+=1; //从公元元年起到要查的年份的头一年总共有的天数(闰年加1);
}
//--------------------------------------------------------
for(i=1;i<month;i++)
daysfrom11+=mthdays[i];
if(month>2)
if( (year1%4==0)&&(year1%100!=0)||(year1%400==0) )
daysfrom11+=1; //从公元元年起到要查的年份以及月份总共有的天数((闰年2月加1));
ans=(wkday11+daysfrom11)%7; //ans用来决定日期是周几;
//-------------------------------------------------------------
cout<<year<<"."<<month<<"月历表:"<<endl;
cout<<" ............................."<<endl;
cout<<" Sun Mon Tue Wed Thu Fri Sat"<<endl;
cout<<" ............................."<<endl;
//----------------------------------------------------------
int wday=ans;
cout<<" "<<setw(4*(wday+1))<<1; //以4字节为单位表示输出
for(i=2;i<=mthdays[month];i++)
{
wday++;
if(wday%7==0)
{
cout<<endl;
cout<<" ";
wday=0;
}
cout<<setw(4)<<i; //以4字节为单位表示输出
}
cout<<endl;
cout<<" ............................."<<endl;
}//======================================================
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-29
怎样巧算星期数
在日常生活和工作中,人们经常需要知道某一确定的公历日期为星期几?笔者经过研究,推算出一种计算方法,可以简单地口算出近几年中任何一天为星期几。经过简单计算还能确定任何公历日期的星期数。例如:2006年11月11日是星期六,就是(11+3-1)被7整除的余数6。其中,11是所需推算的日数;3是按月份确定的月份被加数,一年中12个月的月份被加数分别为:0、3、3、6、1、4、6、2、5、0、3、5 这是一组固定不变的数字,必须熟记下来,可以永久使用。如果所推算的时间在1月份,这个被加数就是0;如果所推算的时间在2月份,这个被加数就是3;如果所推算的时间在4月份,这个被加数就是6;……以此类推。2是按年份确定的年初被减数,也就是每年第一个星期日的公历日数,其变化规律通常是下一年的年初被减数逐年递减1天。当这个被减数减至0时,下一年从6开始递减,使这个被减数在0—6之间循环。例如:2005年的年初被减数为2;2006年的年初被减数为1;2007年的年初被减数为0;2008年的年初被减数为6,年初被减数一经确定,便能很快口算出这一年中的任何一天为星期几?例如2005年12月10日的计算结果为:(12+5-2)÷7=2余1,那么这一天就是星期一;2006年年初被减数为1,6月29日的计算结果为:(29+4-1)÷7=4余4,那么这一天就是星期四。

以上计算方法中,共有三个变量,即日期数、按月份确定的被加数和按年份确定的年初被减数。其中日期数是一个随意数字;按月份确定的被加数是一组固定数字,因而均可视为已知数。只有按年份确定的年初被减数是一个未知数。虽然在近几年中可以按照逐年递减1天的方法确定,但如果需要知道长时间中某一确定日期的星期数,这个年初被减数就需要进行一下简单的计算。因为在正常年份,一年365天恰好是365天÷7=52余1即52个星期零1天,把这余下的一天推到下一年,就形成了下一年的年初被减数,形成年初被减数的另一个原因是由于闰年所增加的日数,因为公历闰年是很有规则的,即能被4整除且不能被100整除;或者能被400整除的年份为闰年,闰年年份为366天。根据这些条件,我们可以推算出公元纪年中任何一个年份之前所有闰年日数的累加数,我们把每年52个星期余下的1天和由于闰年所增加的日数累加起来,合称为积数,用这个积数便可以计算出这一年的年初被减数,计算方法是:
① 计算积数,计算公式是
积数=(年份-1)+INT[(年份-1)÷4]—INT[(年份-1)÷100]
上式中INT是一个取整函数,即其后边括号内的计算结果只取其整
数部分。
② 用这个积数减去7的若干倍数,直至减到出现负数为止,这个负数
的绝对值(小于7)就是这个年份的年初被减数。
有了这个年初被减数,我们就可以计算出公元纪年中任何一天的星期
数。例如:1974年3月21日的星期数为:
①积数=1973+INT(1973÷4)+ INT(1973÷400)—INT((年份-1)÷100)=2451
②年初被减数=|2451—7×351|=6
那么这一天为:(21+3-6) ÷7=2余4即星期四。
注意:因为公元闰年所增加的一天都是固定地安排在二月份,所以闰年二月份为29天,常年为28天。这样,在计算闰年年份某一确定的星期日数时,就要以二月份为界限,即1月份和2月份的年初被减数比上一年少1天,3月以后的年初被减数比上一年少2天。本回答被提问者采纳
相似回答