第几天(C++) 难度:初阶

题目描述
定义一个结构体dates,结构体里有三个成员变量,年(years),月(months),日(days);然后输入年月日,计算并输出该日在本年中是第几天。注意闰年问题。

输入格式
三行 每行分别表示年、月、日

输出格式
一行 表示该日期为本年第几天

img

#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;
}

输出格式为:

img

以下是一个用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()函数计算并输出结果。

请注意,此代码假定输入的日期是合法的,并且没有进行输入验证。在实际应用中,可能需要添加额外的输入验证来确保输入的正确性。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632