这个的思路应该是什么?该怎么实现如果不是在2022年,那求距离冬奥会还有多少天是要求出这一年中所输入的日期在该年是第几天,然后再加上与2022年2月4日相差几天吗?我自己以及写了判断闰年,以及求该日期是该年的第几天这一部分。
下面是该题题目:
北京冬奥会是2022年2月4日。编写一个程序,用户输入日期,计算该日期距离冬奥会还有多少天。
要求使用结构
struct Date {
int year;
int month;
int day;
};
【输入形式】
用户在第一行输入一个日期(年 月 日,中间以空格分割)
【输出形式】
程序在下一行输出一个整数
【样例输入】
2022 2 3
【样例输出】
1
【样例说明】
用户以年月日的格式输入,中间以空格分割,程序计算出该天是输入年份的第几天并输出该天数。另外还需要判断这一年是否为闰年。
思路:
1、定义一个结构体 Date 用于存储日期信息。
2、读入用户输入的日期信息。
3、判断该日期是否是闰年,然后计算出该日期是该年的第几天。
4、计算出2022年2月4日是该年的第几天。
5、输出:2022年2月4日减去输入日期所得的天数。
完整实现和详细注释如下,望采纳
#include <stdio.h>
#include <stdbool.h>
// 定义日期结构体
struct Date {
int year;
int month;
int day;
};
// 判断是否为闰年
bool isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0) {
return true;
}
if (year % 400 == 0) {
return true;
}
return false;
}
// 计算每个月的天数
int getDaysInMonth(int year, int month) {
// 数组存储每个月的天数
int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
// 2 月闰年为 29 天
return 29;
}
return daysInMonth[month - 1];
}
// 计算输入日期是该年的第几天
int getDayOfYear(struct Date date) {
int days = 0;
for (int i = 1; i < date.month; i++) {
// 累加前几个月的天数
days += getDaysInMonth(date.year, i);
}
// 加上当前月的天数
days += date.day;
return days;
}
int main() {
// 定义冬奥会日期
struct Date winterOlympics = {2022, 2, 4};
// 输入日期
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
struct Date inputDate = {year, month, day};
// 计算输入日期距离冬奥会还有多少天
int inputDays = getDayOfYear(inputDate);
int winterOlympicsDays = getDayOfYear(winterOlympics);
int diffDays = winterOlympicsDays - inputDays;
printf("%d\n", diffDays);
return 0;
}
供参考!谢谢!
负数表示已经过去x天了。
#include <stdio.h>
#include <time.h>
struct Date
{
int year;
int month;
int day;
} t1;
// 计算两个日历的时间差,天为单位
double mydifftime(struct Date t1)
{
time_t time1, time0;
struct tm ti1, ti0;
ti1.tm_year = t1.year - 1900;
ti1.tm_mon = t1.month - 1;
ti1.tm_mday = t1.day;
ti1.tm_hour = 0;
ti1.tm_min = 0;
ti1.tm_sec = 1;
ti1.tm_isdst = -1;
time1 = mktime(&ti1);
ti0.tm_year = 2022 - 1900;
ti0.tm_mon = 1;
ti0.tm_mday = 4;
ti0.tm_hour = 0;
ti0.tm_min = 0;
ti0.tm_sec = 1;
ti0.tm_isdst = -1;
time0 = mktime(&ti0);
double res = difftime(time0, time1);
return res / (60 * 60 * 24);
}
int main()
{
scanf("%4d%2d%2d", &t1.year, &t1.month, &t1.day);
printf("%.0lf\n", mydifftime(t1));
return 0;
}