用c语言输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。 输出格式: 在一行输出日期是该年中的第几天。
时间: 2024-10-21 08:10:15 浏览: 85
在C语言中,你可以通过以下步骤实现这个功能:
1. 首先,创建一个函数用于判断是否为闰年,根据提供的年份规则检查。
```c
int is_leap_year(int year) {
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
return 1; // leap year
} else {
return 0; // not a leap year
}
}
```
2. 创建主函数,接收用户输入的年、月、日作为字符串,并转换成整数。然后计算总天数。
```c
#include <stdio.h>
#include <stdlib.h>
int days_in_month(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 is_leap_year(year) ? 30 : 28; // February
default:
return 0; // invalid month
}
}
int main() {
char date[11];
fgets(date, sizeof(date), stdin); // Read input line
// Parse the date string and convert to integers
char* endptr;
int year = strtol(date, &endptr, 10);
if (*endptr != '/') {
printf("Invalid format. Please enter date as 'yyyy/mm/dd'.\n");
return 1;
}
int month = strtol(endptr+1, &endptr, 10);
if (*endptr != '/') {
printf("Invalid format. Please enter date as 'yyyy/mm/dd'.\n");
return 1;
}
int day = strtol(endptr, NULL, 10);
// Check for valid date range
if (day <= 0 || day > days_in_month(month, year)) {
printf("Invalid day for the given month.\n");
return 1;
}
// Calculate total days since January 1 of the year
int total_days = (year - 1) * 365 + sum_days_from_jan_1_to_given_month(month, year);
printf("The date %d/%d/%d is day %d of the year.\n", year, month, day, total_days);
return 0;
}
```
在这个代码中,`sum_days_from_jan_1_to_given_month`是一个辅助函数,用于累加给定月份前的所有月份的天数。
阅读全文