编写程序从键盘输入一个日期,要求计算输出该日期是这一年的第几天。要求如下: 用switch语句实现。 用scanf函数实现日期的年,月,日三个整数的输入,且输入前要有相应的提示。 程序中需要判断所输入的年份值是否为闰年。
时间: 2024-10-08 20:12:09 浏览: 54
当你编写一个这样的程序时,可以按照以下步骤进行:
首先,定义一个函数接收用户的输入并使用`switch`语句处理月份的不同天数。因为每个月的天数不同,所以你需要为一月、二月(特殊闰年情况)、三月到十二月分别设置对应的天数。
```c
#include <stdio.h>
#include <stdbool.h>
// 判断是否为闰年的辅助函数
bool is_leap_year(int year) {
if (year % 4 != 0)
return false;
else if (year % 100 != 0)
return true;
else if (year % 400 != 0)
return false;
else
return true;
}
int main() {
int day, month, year;
printf("请输入日期(格式:YYYY-MM-DD): ");
scanf("%d-%d-%d", &year, &month, &day);
// 初始设定一年的总天数
int total_days = 0;
switch(month) {
case 1:
total_days += day; // 一月有固定的31天
break;
case 2: // 考虑闰年
if (is_leap_year(year))
total_days += 29;
else
total_days += 28;
break;
case 3:
total_days += 31;
break;
case 4:
total_days += 30;
break;
case 5:
total_days += 31;
break;
case 6:
total_days += 30;
break;
case 7:
total_days += 31;
break;
case 8:
total_days += 31;
break;
case 9:
total_days += 30;
break;
case 10:
total_days += 31;
break;
case 11:
total_days += 30;
break;
case 12:
total_days += 31;
break;
default:
printf("错误的月份");
return 1;
}
// 如果输入的是二月,还要加上额外的一天(如果闰年)
if (month == 2 && is_leap_year(year)) {
total_days++;
}
total_days += (year - 1) * 365 + floor((year - 1) / 4); // 根据格里高利历算法
printf("该日期是一年中的第 %d 天.\n", total_days);
return 0;
}
```
阅读全文