C语言练习题:得到下一秒的时间
// ***************************************************************
// 例如输入当前时间2006年12月20日19时17分59秒,
// 计算后输出时间是2006年12月20日19时18分00秒。
// 程序要求:
// 1) 程序应该可以运行:通过控制台输入数据,输出数据通过printf给出;
// 2) 程序结构明了、逻辑清晰;
// 3) 请考虑闰年、月份(大小)等逻辑;
// 4) 程序功能完整;
// ***************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Month_Day[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
//判断是否是闰年,是则返回1,否则返回0
int isLeapYear(int y)
{
return ((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)));
}
// 得到下一天的日期,M:月份,0~11,日期[0~31]
void getNextDay(int * Y,int * M,int * D)
{
int iC1 = 0, iC2 = 0; //记录进位
iC2 = ((*D) + 1) / Month_Day[isLeapYear(*Y)][(*M)];
*D = ((*D) + 1) % Month_Day[isLeapYear(*Y)][(*M)];
iC1 = ((*M) + iC2) / 12;
*M = ((*M) + iC2) % 12;
*Y += iC1;
}
// 得到下一秒的时间,如果返回小时向前的进位
int getNextSec(int * h,int * m,int * s)
{
int iC1 = 0, iC2 = 0;
iC1 = (*s + 1) / 60;
*s = (*s + 1) % 60;
c2 = (*m + iC1) / 60;
*m = (*m + iC1) % 60;
iC1 = (*h + iC2) / 24;
*h = (*h + iC2) % 24;
return iC1;
}
//得到下一秒的时间
void nextSec(struct tm * st)
{
//得到时间的下一秒,返回进位
int c = getNextSec(& st->tm_hour, & st->tm_min, & st->tm_sec);
if ( c != 0 ) //如果
{
getNextDay(& st->tm_year, & st->tm_mon, & st->tm_mday);
}
}
//输入时间
struct tm * inPutTime(struct tm * st)
{
printf("请输入时间(格式:yy mm dd hh mi ss):/n");
while( 6 != scanf("%d%d%d%d%d%d", //如果输入不正确则继续提示输入
& st->tm_year, & st->tm_mon, & st->tm_mday,
& st->tm_hour, & st->tm_min, & st->tm_sec))
{
printf("输入格式错误,请重新输入/n"
"/t格式:yy mm dd hh mi ss/n");
fflush(stdin); //清除输入缓冲区
}
st->tm_mon -= 1; //输入的月份转换成内部存储的月份
st->tm_mday -= 1; //输入的日期转换成内部存储的日期
return st;
}
//输出日期和时间
void outPutTime(struct tm *st)
{
//输出日期
printf("%d年%d月%d日", st->tm_year, st->tm_mon +1, st->tm_mday +1);
//输出时间
(st->tm_hour < 10) ? printf("0"):printf("");
printf("%d时", st->tm_hour);
(st->tm_min == 0) ? printf("0"):printf("");
printf("%d分", st->tm_min);
(st->tm_sec == 0) ? printf("0"):printf("");
printf("%d秒", st->tm_sec);
}
int main()
{
struct tm st;
inPutTime(&st);
printf("/n当前时间:/n");
outPutTime(&st);
nextSec(&st);
printf("/n一秒以后的时间是:/n");
outPutTime(&st);
printf("/n");
system("pause");
return 0;
}
浙公网安备 33010602011771号