作业帮 > 综合 > 作业

设计一个程序,对于从键盘输入年月日,计算出对应是星期几

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/05/03 16:45:09
设计一个程序,对于从键盘输入年月日,计算出对应是星期几
设计一个程序,对于从键盘输入年月日,计算出对应是星期几
星期几的算法有以下两种:
W=[Y-1]+[(Y-1)/4]-[(Y-1)/100]+[(Y-1)/400]+D
Y是年份,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天.
W=[C/4]-2C+y+[y/4]+[13*(m+1)/5]+d-1
C是世纪数减1
y是年份后两位
M是月份,d是日数
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值
两个公式中的[]均指只取整数部分
算出来的W余几就是星期几,0=日
参考例子:(测试正确)
#include
bool IsLeapYear(int nYear)
{
return ((!(nYear % 4) && nYear % 100) || !(nYear % 400));
}
int CalcWeekday(int nYear,int nMonth,int nDay)
{
/*
W=[Y-1]+[(Y-1)/4]-[(Y-1)/100]+[(Y-1)/400]+D
Y是年份,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天.
*/
int DT[] = {1,4,4,0,2,5,0,3,6,1,4,2};
int nDayIn = (nMonth > 2) ((IsLeapYear(nYear) (DT[nMonth - 1] + 1) :DT[nMonth - 1])) :DT[nMonth - 1];
int nWeekday = (nYear - 1 + (nYear - 1)/4 - (nYear - 1)/100 + (nYear - 1)/400 + nDayIn) % 7;
// 算出本月第一天为星期几
nWeekday = (nWeekday < 0) (nWeekday + 7) :nWeekday;
// 返回该天为星期几
return (nWeekday + nDay - 1) % 7;
}
int main()
{
int nYear,nMonth,nDay;
char arrDayName[][25] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
printf("Year Month Day:");
scanf("%d %d %d",&nYear,&nMonth,&nDay);
printf("%d-%d-%d:%s\n",nYear,nMonth,nDay,arrDayName[CalcWeekday(nYear,nMonth,nDay)]);
return 0;
}
希望我的回答能对你有所帮助!
如果还有问题,可以BaiduHi我,!