已知公元 1 年 1 月 1 日是星期一。 编写一个程序, 只要输入年月日, 就能回答那天 是星期几。在设计测试用例时应该注意在什么情况下能通过,什么原因导致的错误,如何避免同类的错误。结合理论知识进行讨论
时间: 2024-02-09 18:07:05 浏览: 138
在设计测试用例时,应该考虑以下情况:
1. 输入的年份、月份和日期是否合法,即年份、月份和日期是否在合理的范围内。例如,日期不能为负数,月份必须在 1-12 之间,日期必须在该月份的合理范围内。这个错误可以通过对用户输入进行判断来避免。
2. 是否考虑了闰年的情况。闰年每年的 2 月份有 29 天,其他月份的天数不变。闰年的判断方法是:能被 4 整除但不能被 100 整除,或者能被 400 整除的年份是闰年。这个错误可以通过在程序中加入判断闰年的代码来避免。
3. 是否考虑了月份为 1、2 时要减去一年的情况。因为公元 1 年 1 月 1 日是星期一,所以对于输入的年份和月份,需要计算这一年之前的天数,再加上该月份之前的天数,最后再加上输入的日期。这个错误可以通过在程序中对月份为 1 和 2 的情况进行特殊处理来避免。
4. 是否考虑了星期天的情况。星期天的值为 0,但有些编程语言中星期的值是从 1 开始计数的。这个错误可以通过在程序中对星期天的值进行特殊处理来避免。
综上所述,正确的测试用例应该包括不同年份、月份和日期的情况,包括闰年和非闰年,特别是月份为 1、2 的情况。
在实现程序时,可以使用公式:
weekday = (days + 1) % 7
其中 days 表示输入的日期距离公元 1 年 1 月 1 日的天数,weekday 表示这一天是星期几。在计算 days 时,需要考虑闰年和月份为 1、2 的情况,使用条件语句和循环语句可以有效地避免错误。
相关问题
已知公元 1 年 1 月 1 日是星期一。编写一个程序,只要输入年月日,就能回答那天是星期几。
可以使用公式来计算某一天是星期几,具体步骤如下:
1. 计算该年到公元 1 年的天数,记为 yearDays。
2. 计算该月到 1 月的天数,记为 monthDays。
3. 计算该日是该年的第几天,记为 dayOfYear。
4. 计算星期几,公式为:(yearDays + monthDays + dayOfYear) % 7。
以下是一个 Python 的实现:
```python
def is_leap_year(year):
# 判断是否为闰年
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
def get_weekday(year, month, day):
# 计算该年到公元 1 年的天数
yearDays = (year - 1) * 365 + sum(is_leap_year(y) for y in range(1, year))
# 计算该月到 1 月的天数
monthDays = sum([31, 29 if is_leap_year(year) else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][:month - 1])
# 计算该日是该年的第几天
dayOfYear = day
if month > 2 and is_leap_year(year):
dayOfYear += 1
# 计算星期几
weekday = (yearDays + monthDays + dayOfYear - 1) % 7 + 1
return weekday
# 测试
print(get_weekday(2021, 8, 12)) # 输出 4,即星期四
```
这个程序中,is_leap_year 函数用来判断是否为闰年,get_weekday 函数接受三个参数 year、month 和 day,返回对应的星期几。我们可以将输入的年月日作为参数传入 get_weekday 函数,得到对应的星期几。
已知公元 1 年 1 月 1 日是星期一。编写一个程序,只要输入年月日,就能回答那天是星期几。java实现
可以使用类似的公式来计算某一天是星期几,具体步骤如下:
1. 计算该年到公元 1 年的天数,记为 yearDays。
2. 计算该月到 1 月的天数,记为 monthDays。
3. 计算该日是该年的第几天,记为 dayOfYear。
4. 计算星期几,公式为:(yearDays + monthDays + dayOfYear) % 7。
以下是一个 Java 的实现:
```java
public class WeekdayCalculator {
public static boolean isLeapYear(int year) {
// 判断是否为闰年
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
public static int getWeekday(int year, int month, int day) {
// 计算该年到公元 1 年的天数
int yearDays = (year - 1) * 365 + IntStream.range(1, year).map(y -> isLeapYear(y) ? 1 : 0).sum();
// 计算该月到 1 月的天数
int[] monthDays = new int[] {31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int monthDaysSum = Arrays.stream(monthDays, 0, month - 1).sum();
// 计算该日是该年的第几天
int dayOfYear = day;
if (month > 2 && isLeapYear(year)) {
dayOfYear += 1;
}
// 计算星期几
int weekday = (yearDays + monthDaysSum + dayOfYear - 1) % 7 + 1;
return weekday;
}
public static void main(String[] args) {
int year = 2021, month = 8, day = 12;
int weekday = getWeekday(year, month, day);
System.out.println(weekday); // 输出 4,即星期四
}
}
```
这个程序中,isLeapYear 函数用来判断是否为闰年,getWeekday 函数接受三个参数 year、month 和 day,返回对应的星期几。我们可以将输入的年月日作为参数传入 getWeekday 函数,得到对应的星期几。
阅读全文