问题描述
要求定义函数void month day(year,yearday,"month,"day),其中year是年,yearday是天数,month和day是指针,要求通过指针返回一年中的天数yearday在year年中是几月几日。输入年份和天数,输出对应的月和日。
输入描述
两个整数,第一个整数表示年,第二个整数表示该年的第几天。
输出描述
两个整数,分别表示月份和日期,中间用.隔开。
样例输入
2022 32
样例输出
2.1
我写的
望采纳
#include <stdio.h>
void month_day(int year,int yearday,int *month,int *day) {
int i;
int leap;
int days[13] = {
0,31,28,31,30,31,30,31,31,30,31,30,31
}
;
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
leap = 1; else
leap = 0;
days[2] += leap;
for (i = 1;i <= 12;i ++) {
if(yearday <= days[i])
break;
yearday -= days[i];
}
*month = i;
*day = yearday;
}
int main(void) {
int year,yearday,month,day;
scanf("%d%d",&year,&yearday);
month_day(year,yearday,&month,&day);
printf("%d.%d",month,day);
return 0;
}
void month_day(int year, int yearday, int *month, int *day)
{
int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i = 0, s = 0;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
months[1] = 29;
while (yearday > s)
{
s += months[i];
i++;
}
s -= months[i - 1];
*day = yearday - s;
*month = i;
}
int main()
{
int year, yearday, month, day;
cin >> year >> yearday;
month_day(year, yearday, &month, &day);
cout << month << "." << day;
return 0;
}
修改如下,供参考:
#include<stdio.h>
int isLeap(int y)
{
return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
}
int Getdaysofmonth(int y, int m)
{
int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (m == 2 && isLeap(y)) return days[m - 1] + 1;
return days[m - 1];
}
void month_day(int year, int yearday, int* month, int* day)
{
int m, d = yearday;
for (m = 1; d > Getdaysofmonth(year, m) && m < 13; d -= Getdaysofmonth(year, m), m++);
*month = m;
*day = d;
}
int main()
{
int y, days, m = 0, d = 0;
do {
//printf("请输入年份 天数:");
scanf("%d%d", &y, &days);
} while (days < 1 || days > 365);
month_day(y, days, &m, &d);
printf("%d.%d", m, d);
return 0;
}