一个老问题 输入某年某月某日判断这一天是这一年的第几天?

2025-05-13 07:36:18
推荐回答(1个)
回答(1):

#include

void scan(); //输入函数
void prt(); //输出函数
void fun(); //计算天数函数
void dofun(); //超作函数

int year, month, day; //全局变量,声明年月日变量
int number;

//main函数
int main(void)
{
dofun();

return 0;
}

//自定义输入函数
void scan()
{

printf("请输入年份:\n");

printf("年: ");
fflush(stdin);
scanf("%d",&year);

printf("月: ");
scanf("%d",&month);

printf("日: ");
scanf("%d",&day);
}

//自定义输出函数
void prt()
{
char ch;
if (number <= 0 || number > 365)
{
printf("\n计算错误,请重新查询:\n\n");
dofun();
}
else
{
printf("\n这一天是第%d天\n\n", number);
printf("如果想继续查询请按'y'或'Y', 或按任意键退出: ");
fflush(stdin);
scanf("%c",&ch);
if (ch == 'y' || ch == 'Y')
{
dofun();
}
else
{
printf("\n谢谢使用!\n");
}
}
}

//计算天数函数
void fun()
{
int n;
switch(month)
{
case 1: n = 0; break;
case 2: n = 31; break;
case 3: n = 59; break;
case 4: n = 90; break;
case 5: n = 120; break;
case 6: n = 151; break;
case 7: n = 181; break;
case 8: n = 212; break;
case 9: n = 243; break;
case 10:n = 273; break;
case 11:n = 304; break;
case 12:n = 334; break;
}
//判断是否为闰年
if((year % 4 == 0 && year % 100 != 0 || year % 400 == 0) && (month >= 3))
{
number = n + day + 1; //是闰年,天数加1
}
else
{
number = n + day; //非闰年
}
}

//超作函数
void dofun()
{
year = 0;
month = 0;
day = 0;
number = 0;
printf("\n\t\t\t\ 欢迎进入年份查询系统!\n\n");

scan();
while ((year < 1900 || year > 2030) || (month < 1 || month >12) || (day < 1 || day > 31))
{
printf("\n对不起,您输入的数据有误,请核对后重新输入:\n");
printf("\n注: 年份在1900~2030之间; 月份在1~12之间; 日在1~31之间!\n\n");
scan();
}

fun();
prt();
}