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;

posted @ 2007-04-24 15:34  rousya  阅读(1975)  评论(1)    收藏  举报