编写程序从键盘输入一个日期,要求计算输出该日期是这一年的第几天。要求如下: I.用 switch 语句实现。 2.用scanf函数实现日期的年,月,日三个整数的输入,且输入前要有相应的提示。 了.程序中需要判断所输入的年份值是否为闰年。
时间: 2024-12-20 18:28:30 浏览: 8
C语言案例:键盘输入年月日,计算这一天是这一年的第几天.docx
为了编写这个程序,首先需要了解闰年的判断规则,即能被4整除的年份通常为闰年,但是能被100整除而不能被400整除的年份不是闰年。接下来,我会按照你的要求步骤来实现这个功能:
```c
#include <stdio.h>
#include <string.h>
int isLeapYear(int year) {
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
return 1; // 是闰年
}
else {
return 0; // 非闰年
}
}
int daysInMonth(int month, int year) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default: // 判断闰年情况下的2月天数
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
}
}
int main() {
int year, month, day;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份(1-12):");
scanf("%d", &month);
printf("请输入日期(1-31):");
scanf("%d", &day);
if (year <= 0 || month <= 0 || day <= 0) {
printf("输入的日期无效,请重新输入。\n");
return 0;
}
int totalDays = (year - 1) * 365 + day; // 计算到年初总天数
for (int m = 1; m < month; ++m) { // 计算到当前月份之前的天数
totalDays += daysInMonth(m, year);
}
if (isLeapYear(year) && month > 2) { // 如果是闰年且月份大于2,减去一天
totalDays--;
}
printf("输入的日期 %d/%d/%d 是这一年的第%d天。\n", day, month, year, totalDays + 1); // 加1是因为我们是从1开始计数的
return 0;
}
```
阅读全文