习题9.1——初级
题目描述
定义一个结构体变量(包括年、月、日)。
输入年月日,计算该日是这一年中的第几天。
注意闰年问题。
输入格式
输入仅包含三个正整数y,m,d,分别代表年、月、日。
1900<=y<=2012
保证日期合法
思路:
1.先创建结构体变量Date储存年月日
2.在主函数中调用Date,并对其成员赋值
3.在getdayofyear函数中创建数组daysInMonth,用来存放每月的天数 对于完整经过的月份直接将天数相加,注意考虑闰年的情况,再创建isleapyear函数判断一下
4.将没有完整经过的月份天数加进去
#include <stdio.h>
typedef struct
{
int year;
int month;
int day;
} Date;
int isLeapYear(int year)
{
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
return 1; // 是闰年
}
else
{
return 0; // 不是闰年
}
}
int getDayOfYear(Date date)
{
int daysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int dayOfYear = 0;
// 计算1月到前一个月的天数
for (int i = 1; i < date.month; i++)
{
dayOfYear += daysInMonth[i];
}
if (isLeapYear(date.year) && date.month > 2)
{
dayOfYear += 1;
}
dayOfYear += date.day;
return dayOfYear;
}
int main()
{
Date date;
scanf("%d %d %d", &date.year, &date.month, &date.day);
int dayOfYear = getDayOfYear(date);
printf("%d\n", dayOfYear);
return 0;
}