用c语言实现以下代码:编写一个闰年判断函数【int Isleap(int year)】、一个验证日期合法性的函数【int IsDate(int year,int month,int day)】和一个计算日期对应天数的函数【int Days(int year,int month,int day),要求计算前调用IsDate()函数判断日期的合法性,调用Isleap()判断闰年】,在main函数输入给定日期的年-月-日,调用Days函数求出这天是该年的第几天。 【输入形式】输入一个日期(年-月-日格式) 【输出形式】输出这一天是这一年的第?天。
时间: 2024-02-25 17:57:57 浏览: 110
以下是用C语言实现的程序:
```c
#include <stdio.h>
int Isleap(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return 1;
} else {
return 0;
}
}
int IsDate(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {
return 0;
}
if (month == 2) {
if (Isleap(year)) {
if (day > 29) {
return 0;
}
} else {
if (day > 28) {
return 0;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
return 0;
}
}
return 1;
}
int Days(int year, int month, int day) {
int days = 0, i;
if (!IsDate(year, month, day)) {
return -1;
}
for (i = 1; i < month; i++) {
if (i == 2) {
days += Isleap(year) ? 29 : 28;
} else if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else {
days += 31;
}
}
days += day;
return days;
}
int main() {
int year, month, day, days;
scanf("%d-%d-%d", &year, &month, &day);
days = Days(year, month, day);
if (days == -1) {
printf("Invalid date\n");
} else {
printf("%d\n", days);
}
return 0;
}
```
首先定义了一个闰年判断函数`Isleap`和一个验证日期合法性的函数`IsDate`。在`Isleap`函数中,使用条件语句判断年份是否为闰年,如果是,返回1;否则,返回0。在`IsDate`函数中,使用条件语句判断日期的合法性,如果年份、月份、日份不在合法范围内,或者日期不符合该月份的天数,就返回0;否则,返回1。
然后定义了一个计算日期对应天数的函数`Days`,接受三个参数`year`、`month`和`day`,表示年、月、日。首先调用`IsDate`函数判断日期的合法性,如果不合法,直接返回-1。然后使用一个循环遍历该日期之前的所有月份,累加每个月份的天数,最后加上该日期的天数,返回总天数。
在`main`函数中,先从键盘输入给定日期的年-月-日,然后调用`Days`函数计算该日期是该年的第几天。如果返回的是-1,表示日期不合法,输出提示信息;否则,输出计算出的天数即可。
阅读全文