任务描述
本关任务:编写函数 whatDay,计算某年某月的1号是星期几并返回。
编程要求
在右侧编辑器中的Begin-End之间补充代码,计算输入数据年月份的1号是星期几并返回(周一到周日分别返回整数1到7)。
其中该函数的参数为输入的两个整数数据:年和月。
提示:由于判断是否闰年有多个地方需要用到,故已把该功能单独实现为一个函数。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:2016 1
预期输出:2016年1月1日是星期5
测试输入:2017 7
预期输出:2017年7月1日是星期6
#include <iostream>
using namespace std;
// 函数leapYear
int leapYear(int y) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月某日是星期几
// 参数:year-年,month-月
// 返回值:1-7分别表示星期一到星期日
int whatDay(int year, int month) {
// 请在这里补充代码,实现函数whatDay
/********** Begin *********/
int day = 1;
// 计算年份的天数
for (int i = 1; i < year; ++i) {
if (leapYear(i) == 1) {
day += 366;
} else {
day += 365;
}
}
// 计算月份的天数
for (int i = 1; i < month; ++i) {
switch (i) {
case 1:
day += 31;
break;
case 2:
day += 28;
break;
case 3:
day += 31;
break;
case 4:
day += 30;
break;
case 5:
day += 31;
break;
case 6:
day += 30;
break;
case 7:
day += 31;
break;
case 8:
day += 31;
break;
case 9:
day += 30;
break;
case 10:
day += 31;
break;
case 11:
day += 30;
break;
case 12:
day += 31;
break;
default:
break;
}
}
// 如果这一年是闰年,二月要 +1, 否则不变
if (leapYear(year) == 1 && month > 2) {
day += 1;
}
return day % 7 != 0 ? day % 7 : 7;
/********** End **********/
}
int main() {
int y, m, xq; // 年、月、星期几
cin >> y >> m; // 输入年月
xq = whatDay(y, m); // 计算星期几
cout << y << "年" << m << "月1日是星期"; // 输出星期
if (xq == 7)
cout << "日" << endl;
else
cout << xq << endl;
return 0;
}