标签:min bsp target 处理 个数 mon 范围 描述 else
问题描述:
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出。
解决方案:
#include "stdafx.h" #pragma warning (disable : 4996) typedef struct { int year; int month; int day; int hour; int minute; int second; }Time; void input_time(Time *p); void output_time(Time *p); void ddays_later(Time *p); int main() { Time time,*pt; pt = &time; input_time(pt); output_time(pt); Time dtime = time; pt = &dtime; ddays_later(pt); return 0; } int is_leapyear(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) { return 1; } else { return 0; } } void judge_time(int *time, int low, int high) { while (true) { scanf("%d", time); if (*time >= low && *time <= high) { break; } printf("数值无效,请重新输入有效数值:"); } } void input_time(Time *p) { int month_day[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; printf("请输入年份:"); scanf("%d", &p->year); if (is_leapyear(p->year)) { month_day[2] = 29; } printf("请输入月份:"); judge_time(&p->month,1,12); printf("请输入日期:"); judge_time(&p->day,1,month_day[p->month]); printf("请输入小时:"); judge_time(&p->hour, 0, 23); printf("请输入分钟:"); judge_time(&p->minute, 0, 59); printf("请输入秒:"); judge_time(&p->second, 0, 59); printf("\n输入的时间:%d年%d月%d日 %d:%d:%d\n", p->year, p->month,p->day,p->hour,p->minute,p->second); } void output_time(Time *p) { int month_day[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (is_leapyear(p->year)) { month_day[2] = 29; } int days(0); for (int i = 0; i < p->month; i++) { days += month_day[i]; } days += p->day; printf("\n该日是本年第%d日\n", days); int seconds = (p->hour * 60 + p->minute) * 60 + p->second; printf("本日第%d秒\n",seconds); printf("本年第%d秒\n", days * 24 * 60 * 60 + seconds); } void ddays_later(Time *p) { int e,d; printf("\n请输入未来天数:"); scanf("%d",&e); d = e; //求得该日是该年第几天 int month_day[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (is_leapyear(p->year)) { month_day[2] = 29; } int days(0); for (int i = 0; i < p->month; i++) { days += month_day[i]; } days += p->day; //处理年份 while (1) { if (is_leapyear(p->year)) { if (d>=366) { d -= 366; (p->year)++; } else { break; } } else { if (d >= 365) { d -= 365; (p->year)++; } else { break; } } } //处理剩余天数 int month_daysum[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 }; if (is_leapyear(p->year)) { for (int i = 2; i < 13; i++) { month_daysum[i]++; } } if ((days + d)>month_daysum[12]) { (p->year)++; d = (days + d) - month_daysum[12]; int month_daysum[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 }; if (is_leapyear(p->year)) { for (int i = 2; i < 13; i++) { month_daysum[i]++; } } for (int i = 0; i < 13; i++) { if (d<=month_daysum[i]) { p->month = i; d -= month_daysum[i - 1]; break; } } p->day = d; } else { d += days; for (int i = 0; i < 13; i++) { if (d<=month_daysum[i]) { p->month = i; d -= month_daysum[i - 1]; break; } } p->day = d; } printf("\n%d天之后的时间为:%d年%d月%d日 %d:%d:%d", e, p->year, p->month, p->day, p->hour, p->minute, p->second); }
=
标签:min bsp target 处理 个数 mon 范围 描述 else
原文地址:https://www.cnblogs.com/miyazakehime/p/9813666.html