// 输入某一年的第几天,计算并输出它是这一年的第几月第几日。
/* 函数功能: 对给定的某一年的第几天,计算它是这一年的第几月第几日。
函数入口参数: 整形变量year,存储年;
整形变量yearDay,存储某一年的第几天;
函数出口参数: 整型指针pMonth,指向存储这一年第几月的整形变量;
整型指针pDay,指向存储第几日的整形变量;
函数返回值: 无 */
//int MonthDay(int year, int yearDay, int *pMonth, int *pDay)
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算并输出它是这一年的第几月第几日
int MonthDay(int year, int yearDay, int* pMonth, int* pDay) {
int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int i = 0;
// 如果是闰年,2月有29天
if (isLeapYear(year)) {
daysInMonth[1] = 29;
}
// 遍历月份,直到找到对应的日期
while (yearDay > daysInMonth[i]) {
yearDay -= daysInMonth[i];
i++;
}
// 返回月份和日期
*pMonth = i + 1; // 数组从0开始,月份从1开始
*pDay = yearDay;
// 函数没有返回值(返回类型为void也可以,但这里为了与问题描述一致使用int)
return 0;
}
int main() {
int year, yearDay, month, day;
printf("请输入年份: ");
scanf_s("%d", &year);
printf("请输入这一年的第几天: ");
scanf_s("%d", &yearDay);
MonthDay(year, yearDay, &month, &day);
printf("%d年的第%d天是%d月的第%d天\n", year, yearDay, month, day);
return 0;
}