定义一个结构体变量,(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。

img


如图,定义一个结构体变量,(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。 怎么解决非静态成员必须与特定对象相对的问题?

结构体不是这样用的呀,Date 表示的是这个结构体,你要声明一个变量才能读取和写入它的属性:

#include <stdio.h>

struct Date
{
    int year;
    int month;
    int day;
} date; // 声明变量

int main()
{
    scanf("%d,%d,%d", &date.year, &date.month, &date.day);
    int days = date.day;
    bool isLeap = (date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0;
    int monthDays[12] = { 31, isLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    for (int i = 0; i < date.month - 1; i++)
    {
        days += monthDays[i];
    }
    printf("days=%d", days);
    return 0;
}

#include <iostream>

struct Date {
    int year;
    int month;
    int day;
};

bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

int getDayOfYear(const Date& date) {
    int daysOfMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int dayOfYear = 0;

    // 计算非闰年的天数
    for (int i = 1; i < date.month; i++) {
        dayOfYear += daysOfMonth[i];
    }

    // 如果是闰年并且当前月份大于等于3月,需要加上1if (isLeapYear(date.year) && date.month >= 3) {
        dayOfYear += 1;
    }

    // 加上当前日期的天数
    dayOfYear += date.day;

    return dayOfYear;
}

int main() {
    Date date = {2023, 5, 16};
    int dayOfYear = getDayOfYear(date);

    std::cout << "The day of year is: " << dayOfYear << std::endl;
    return 0;
}

首先定义了一个名为Date的结构体,包括year、month和day三个成员变量。然后,我们定义了一个名为isLeapYear()的函数,用于判断给定年份是否是闰年。接下来,我们定义了一个名为getDayOfYear()的函数,用于计算给定日期在所在年份中的第几天。在getDayOfYear()函数中,我们使用了一个名为daysOfMonth的数组,存储每个月份的天数。然后,我们遍历当前日期之前的每个月份,并将每个月份的天数累加到dayOfYear变量中。如果当前年份是闰年并且当前月份大于等于3月,我们需要将天数加1,以处理闰年的问题。最后,我们将当前日期的天数加到dayOfYear变量中,并返回结果。

在main()函数中,我们创建了一个名为date的Date结构体变量,并将其初始化为年份为2023、月份为5、日期为16。然后,我们调用getDayOfYear()函数来计算该日期在所在年份中的第几天,并将结果打印到控制台中。

需要注意的是,以上示例假设所有日期均为有效日期(例如不会出现2月30日这样的日期)。如果您需要对无效日期进行处理,可以在getDayOfYear()函数中添加相应的校验逻辑。