输入某年某月某日,计算并输出他是这一年的第几天(考虑闰年)
可以利用函数和数组,指针进行编写
#include<stdio.h>
void transform(int* year, int* month, int* day,int num[12],int len)
{
int i = *year % 4;
int b = *year % 100;
if (i == 0 &&b!= 0)//闰年
{
for (int n = 0; n < (*month-1); n++)
{
*day += num[n];
}
if(*month>=3)
*day += 1;//二月之后闰年多一天
}
else
{
for (int n = 0; n <(*month-1); n++)
{
*day += num[n];
}
}
}
int main(void)
{
int num[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//每月的天数;
int year, month, day;
printf(" 请输入year,month, day\n");
scanf_s("%d,%d,%d", &year, &month, &day);
transform(&year, &month, &day,num,12);
printf("是%d年的第%d天", year, day);
return 0;
}
3. 按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的
问题):输入某一年的第几天,计算并输出它是这一年的第几月第几日。
#include<stdio.h>
void transform(int year, int yearDay, int* pMonth, int* pDay)
{
int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (year % 4 == 0 && year % 100 != 0)//闰年
{
arr[1] = 29;
}
int i = 0;
while (yearDay - arr[i] > 0)
{
yearDay -= arr[i];
*pMonth += 1;
i++;
}
*pDay = yearDay;
if (*pDay == 0)
*pDay += 1;
if (*pDay < 0)
*pDay = -*pDay;
}
int main(void)
{
printf("请输入年份:");
int year, yearDay;
scanf_s("%d", &year);
printf("\n请输入是%d年的第几天:", year);
scanf_s("%d", &yearDay);
int x = 0, y = 0;
int* pMonth = &x, * pDay = &y;
transform(year, yearDay, pMonth, pDay);
printf("\n这天是%d年的%d月%d日", year, *pMonth + 1, *pDay);
return 0;
}