题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
源代码:
# include <stdio.h>
# include <stdbool.h>
//声明函数
bool judgeOK(int year, int month, int day);
bool judgeyear(int a);
int calculatetiem(int month);
int main(void) {
int year, month, day;
int sum = 0;
printf("请输入日期(格式:年-月-日):");
scanf_s("%d-%d-%d", &year, &month, &day);
if (judgeOK(year, month, day) == true) {
sum = calculatetiem(month) + day;
if (judgeyear(year) == true)
{
sum ++;
}
printf("经过聪明的我的计算,这是一年中的第%d天!", sum);
}
else {
printf("请重新输入正确的日期!");
}
return 0;
}
//通过月份计算天数
int calculatetiem(int month)
{
int sum = 0;
switch (month)
{
case 1:sum = 0; break;
case 2:sum = 31; break;
case 3:sum = 59; break;
case 4:sum = 90; break;
case 5:sum = 120; break;
case 6:sum = 151; break;
case 7:sum = 181; break;
case 8:sum = 212; break;
case 9:sum = 243; break;
case 10:sum = 273; break;
case 11:sum = 304; break;
case 12:sum = 334; break;
default:
break;
}
return sum;
}
//判断是否是存在该日期
bool judgeOK(int year, int month, int day)
{
if (year >= 100 && year <= 10000) {
if (month > 0 && month <= 12) {
if (day > 0 && day <= 31) {
return true;
}
printf("日期不正确!\n");
return false;
}
printf("月份不正确!\n");
return false;
}
printf("年份不正确!\n");
return false;
}
//判断是否是闰年
bool judgeyear(int a)
{
if (a % 100 == 0)
{
if (a % 400 == 0)
return true;
else
return false;
}
else if (a % 4 == 0)
{
return true;
}
else
return false;
}