6-4 日期类 - 1. 判断闰年 分数 10 全屏浏览题目 切换布局 作者 李祥 单位 湖北经济学院 请编写函数,判断闰年。 函数原型 // 判断闰年 bool IsLeapYear(int year); 说明:参数 year 为年数。若 year 是闰年,则函数值为true,否则为false。 按照现行历法(格里高利历):四年一闰,百年不闰,四百年再闰。即:年数是 4 的倍数且不是 100 的倍数,或者年数是 400 的倍数,则为闰年,否则为平年。 注:为简化函数设计,作以下限制 年数一律为正整数(即不考虑公元前的情况); 不考虑历法演变过程(即假定从一开始就一直使用现行的历法)。 请按下列步骤,以工程项目的形式来组织程序。 创建文件夹“日期类”,然后将日期类的所有文件都保存到该文件夹中。 进入 Dev-C++,创建 C++ 项目“Project”,保存项目文件 Project.dev。 在项目中创建头文件 MyDate.h 和源程序文件 MyDate.cpp。 在头文件 MyDate.h 中声明日期类。 MyDate.h #ifndef _MyDate_h_ #define _MyDate_h_ // 定义日期类 class MYDATE { public: // 判断闰年 static bool IsLeapYear(int year); }; #endif 在程序文件 MyDate.cpp 中编写函数。 MyDate.cpp #include <iostream> #include <iomanip> using namespace std; #include "MyDate.h" /* 你提交的代码将被嵌在这里 */ 在程序文件 main.cpp 中编写主函数进行测试。 main.cpp #include <iostream> using namespace std; #include "MyDate.h" int main() { int y; cin >> y; if (MYDATE::IsLeapYear(y)) { cout << "闰年\n"; } else { cout << "平年\n"; } return 0; } 输入样例1 2008 输出样例1 闰年 输入样例2 2018 输出样例2 平年 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
时间: 2023-06-25 07:02:28 浏览: 1365
MyDate.h:
```cpp
#ifndef _MyDate_h_
#define _MyDate_h_
class MYDATE {
public:
static bool IsLeapYear(int year);
};
#endif
```
MyDate.cpp:
```cpp
#include "MyDate.h"
bool MYDATE::IsLeapYear(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return true;
else
return false;
}
```
main.cpp:
```cpp
#include <iostream>
#include "MyDate.h"
using namespace std;
int main()
{
int y;
cin >> y;
if (MYDATE::IsLeapYear(y))
{
cout << "闰年\n";
}
else
{
cout << "平年\n";
}
return 0;
}
```
相关问题
6-1 判断日期 分数 20 作者 李祥 单位 湖北经济学院 请编写函数,判断日期是否有效。 函数原型 int IsValidDate(int year, int month, int day);
好的,根据您的要求,我为您编写了如下的函数,用于判断给定的日期是否合法:
```
int IsValidDate(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1) {
return 0;
}
int max_day = 31;
if (month == 4 || month == 6 || month == 9 || month == 11) {
max_day = 30;
} else if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
max_day = 29;
} else {
max_day = 28;
}
}
return day <= max_day;
}
```
这个函数接受三个参数:年份、月份和日期,返回一个整数值,如果日期是合法的,则返回1,否则返回0。
该函数的实现思路如下:
首先,如果年份、月份或日期中有任何一个小于1,则该日期无效,直接返回0。
其次,根据每个月的天数以及闰年的情况,计算该月最大的天数。对于4、6、9、11月,最大天数为30;对于2月,如果是闰年,则最大天数为29,否则为28;其余月份最大天数为31。
最后,比较给定的日期是否小于等于该月最大天数,如果是,则该日期有效,返回1,否则返回0。
希望这个函数能够满足您的需求!
6-2 求总天数 分数 10 作者 李祥 单位 湖北经济学院 请编写函数,根据所给日期求从公元纪年开始到该日期的总天数。 函数原型 int TotalDay(int year, int month, int day);
这个题目要求编写一个名为 `TotalDay` 的函数,它接受三个整数参数:年份 (`year`)、月份 (`month`) 和日期 (`day`),用于计算从公元1年到指定日期(包括该日期)总共的天数。这是一个涉及到历法计算的问题,需要考虑到闰年的规则。
在格里高利历中(即公历),闰年的判断条件通常如下:
- 如果年份能被4整除,那么它是闰年;
- 但是,如果年份能够被100整除,它不是闰年;
- 然而,如果年份同时能被400整除,它又是闰年。
下面是根据这个规则编写的一个简单的 `TotalDay` 函数示例(假设函数采用的是每月天数固定的普通算法,不考虑二月29日的情况):
```c
#include <stdio.h>
int isLeapYear(int year) {
if (year % 4 == 0) {
if (year % 100 == 0) {
return year % 400 == 0;
} else {
return true;
}
}
return false;
}
int daysInMonth(int month, bool isLeapYear) {
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 4: case 6: case 9: case 11:
return 30;
default: // 2月
return isLeapYear ? 29 : 28; // 考虑闰年和平年
}
}
int TotalDay(int year, int month, int day) {
int totalDays = 0;
for (int y = 1; y <= year; ++y) {
totalDays += isLeapYear(y) ? 366 : 365; // 计算前一年的天数
}
for (int m = 1; m < month; ++m) {
totalDays += daysInMonth(m, isLeapYear(year));
}
totalDays += day; // 加上当前月份的天数
return totalDays;
}
// 示例
int main() {
int year, month, day;
printf("请输入年月日(例如:2023 2 28): ");
scanf("%d %d %d", &year, &month, &day);
int total = TotalDay(year, month, day);
printf("从公元1年到%04d-%02d-%02d的总天数是:%d\n", year, month, day, total);
return 0;
}
```
阅读全文
相关推荐














