题目描述
定义一个结构体dates,结构体里有三个成员变量,年(years),月(months),日(days);然后输入年月日,计算并输出该日在本年中是第几天。注意闰年问题。
输入格式
三行 每行分别表示年、月、日
输出格式
一行 表示该日期为本年第几天
#include <iostream>
using namespace std;
struct dates {
int years;
int months;
int days;
};
int main() {
dates date;
int days_in_month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int days = 0;
// 输入年月日
cin >> date.years >> date.months >> date.days;
// 判断是否为闰年
if ((date.years % 4 == 0 && date.years % 100 != 0) || date.years % 400 == 0) {
days_in_month[2] = 29;
}
// 计算本年第几天
for (int i = 1; i < date.months; i++) {
days += days_in_month[i];
}
days += date.days;
cout << days;
return 0;
}
#include <iostream>
struct dates {
int years;
int months;
int days;
};
bool isLeapYear(int year) {
if (year % 400 == 0) {
return true;
}
if (year % 100 == 0) {
return false;
}
if (year % 4 == 0) {
return true;
}
return false;
}
int getDayOfYear(const dates& date) {
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int dayOfYear = 0;
for (int i = 1; i < date.months; i++) {
dayOfYear += daysInMonth[i];
}
dayOfYear += date.days;
if (isLeapYear(date.years) && date.months > 2) {
dayOfYear += 1;
}
return dayOfYear;
}
int main() {
dates date;
std::cout << "请输入年份:";
std::cin >> date.years;
std::cout << "请输入月份:";
std::cin >> date.months;
std::cout << "请输入日期:";
std::cin >> date.days;
int dayOfYear = getDayOfYear(date);
std::cout << "该日期为本年第 " << dayOfYear << " 天" << std::endl;
return 0;
}
class Date
{
//友元函数
//流提取
friend std::ostream& operator<<(std::ostream& out, const Date& d);
public:
private:
int _year;
int _month;
int _day;
};
//由于成员函数是私有的 我们无法访问
//1.可以使用GetYear() GetMOnth() GetDay()接口 然后在外调用函数
//2.友元函数
std::ostream& operator<<(std::ostream& out,const Date&d)
{
out << d._year << "-" << d._month << "-" << d._day << endl;
return out;
}
输出格式为:
以下是一个用C++编写的示例代码,实现了输入年月日,并计算输出该日期在本年中是第几天的功能,考虑了闰年问题:
#include <iostream>
struct Dates {
int years;
int months;
int days;
};
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int getDayOfYear(Dates date) {
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 处理闰年2月的天数
if (isLeapYear(date.years))
daysInMonth[2] = 29;
int dayOfYear = 0;
for (int i = 1; i < date.months; i++) {
dayOfYear += daysInMonth[i];
}
dayOfYear += date.days;
return dayOfYear;
}
int main() {
Dates date;
std::cout << "请输入年: ";
std::cin >> date.years;
std::cout << "请输入月: ";
std::cin >> date.months;
std::cout << "请输入日: ";
std::cin >> date.days;
int dayOfYear = getDayOfYear(date);
std::cout << "该日期为本年第" << dayOfYear << "天" << std::endl;
return 0;
}
这段代码首先定义了一个名为Dates的结构体,包含年、月和日三个成员变量。然后,使用isLeapYear()函数判断给定的年份是否是闰年。接下来,getDayOfYear()函数根据输入的日期计算该日期在本年中是第几天。最后,在main()函数中获取用户输入的年、月、日,调用getDayOfYear()函数计算并输出结果。
请注意,此代码假定输入的日期是合法的,并且没有进行输入验证。在实际应用中,可能需要添加额外的输入验证来确保输入的正确性。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!