当前位置:编程学习 > C/C++ >>

程序设计,C++

定义一个时间结构体变量(包括小时,分,秒)。编写几个函数分别实现以下功能:
(1)加法运算:时间结构体变量加秒数,返回新的时间结构体变量;
(2)减法运算:两个时间结构体变量相减,返回其相隔的秒数;
(3)减法运算:时间结构体变量减秒数,返回新的时间结构体变量
答案:#include <stdio.h>
struct Time
{
 int mHour;
 
 int mMinute;
 
 int mSecond;
};

int iHour=0;
int iMinute=0;
int iSecond=0;

void GetDistance(int Sec);

Time AddSec(Time &t0,int sec);//加法运算+秒

Time IncSec(Time &t0,int sec);//减法运算-秒

int IncTime(const Time &t1,const Time &t2);//两个时间结构体相减,返回秒数。

void main()
{
 ///////////////定义两个时间结构体变量//////////////////
 Time tm1;
 tm1.mHour=5;
 tm1.mMinute=35;
 tm1.mSecond=46;

 Time tm2;
 tm2.mHour=3;
 tm2.mMinute=49;
 tm2.mSecond=23;
 ///////////////////////////////////////////////////////
 int sec=IncTime(tm1,tm2);
 printf("%d\n",sec);//输出两个时间结构体的差值(秒)
 
 
}
void GetDistance(int Sec)
{
 iHour=0;
 iMinute=0;
 iSecond=0;
 
 int temp=Sec;
 
 iHour=temp/3600;
 temp%=3600;
 iMinute=temp/60;
 iSecond=temp%60;
 
}
Time AddSec(Time &t0,int sec)
{
 GetDistance(sec);
 
 t0.mHour+=iHour;
 t0.mMinute+=iMinute;
 t0.mSecond+=iSecond;
 
 return t0;
}
Time IncSec(Time &t0,int sec)
{
 GetDistance(sec);
 
 t0.mHour-=iHour;
 t0.mMinute-=iMinute;
 t0.mSecond-=iSecond;

 return t0;
}
int IncTime(const Time &t1,const Time &t2)
{
 return (t1.mHour-t2.mHour)*3600+(t1.mMinute-t2.mMinute)*60+(t1.mSecond-t2.mSecond);
}

VC6.0下编译通过。

很早之前写过一个时间求间隔和时间加减运算的函数,但是是年月日小时分秒的,稍微改了一下,贴出来希望对你有所帮助:

 

#include <stdlib.h>
#include <time.h>
static long  SubTimeMinus(char *cBeginTime,char *cEndTime,long *iSecond);//求时间差
static long  SubTimeAdd(char *cNewTime,char *cOldTime,int iSecond);//时间加减运算 iSecond小于0时为减

typedef struct time_struct{
  char Year[5];
  char Month[3];
  char Day[3];
  char Hour[2];
  char Min[3];
  char Second[3];
}  TIME;

int main(){
  TIME  A={"2010","12","16","17","20","00"}; // 2010-12-16-17:20:00
  TIME  B;
  char  Time_A[26];
  char  Time_B[26];
  long  lSec;

  //将时间转为26位字符串形式
  memcpy(Time_A      ,A.Year  , 4 );
  memcpy(&Time_A[4]  ,"-"     , 1 );
  memcpy(&Time_A[5]  ,A.Month , 2 );
  memcpy(&Time_A[7]  ,"-"     , 1 );
  memcpy(&Time_A[8]  ,A.Day   , 2 );
  memcpy(&Time_A[10] ,"-"     , 1 );
  memcpy(&Time_A[11] ,A.Hour  , 2 );
  memcpy(&Time_A[13] ,":"     , 1 );
  memcpy(&Time_A[14] ,A.Min   , 2 );
  memcpy(&Time_A[16] ," "     , 1 );
  memcpy(&Time_A[17] ,A.Second, 2 );
  memcpy(&Time_A[19] ,".000000", 7 );
  printf("%.*s\n",26,Time_A);

  SubTimeAdd(Time_B,Time_A,10);//加10秒
  printf("%.*s\n",26,Time_B);

  SubTimeMinus(Time_B,Time_A,&lSec);//B - A
  printf("%d\n",lSec);

 

  //再将字符串中的小时、分、秒拷贝到结构体中


}
 
  /**************************************************************************/
  /*                                                                        */
  /*  Name        :  SubTimeMinus( )                                        */
  /*                                                                        */
  /*  Outline     :  EndTime Minus BeginTime                                */
  /*                 iSecond:时间差,单位秒                                 */
  /*                                                                        */
  /**************************************************************************/
static long  SubTimeMinus(char *cBeginTime,char *cEndTime,long *iSecond)// cEndTime必须大于等于cBeginTime ,且相差不能超过long ,精度为秒,毫秒级别不加减
{
  char sYear_B[5],sMon_B[3],sDay_B[3],sHour_B[3],sMin_B[3],sSec_B[3];
  char sYear_E[5],sMon_E[3],sDay_E[3],sHour_E[3],sMin_E[3],sSec_E[3];
  int  iYear_B=0,iMon_B=0,iDay_B=0,iHour_B=0,iMin_B=0,iSec_B=0;
  int  iYear_E=0,iMon_E=0,iDay_E=0,iHour_E=0,iMin_E=0,iSec_E=0;
  struct tm *ptGetTime_B,*ptGetTime_E;
  time_t    tTime_B,tTime_E;
  char cNewTime_B[27],cNewTime_E[27];
  time(&tTime_B); //初始化为本地时间
  time(&tTime_E); //初始化为本地时间
  ptGetTime_E=localtime(&tTime_E);
  ptGetTime_B=localtime(&tTime_B); //连续调用localtime或mktime时,两个指针指向的是同一个地址;因此连续调用时先保留结果 
  //---------------------------------------------------------------------
  //按[年&月&日&小时&分&秒&毫秒]拆分并转换成数字类型(除毫秒外)           |
  //---------------------------------------------------------------------
 
  memset(sYear_B  , '\0'          ,5);
  memset(sMon_B   , '\0'          ,3);
  memset(sDay_B   , '\0'          ,3);
  memset(sHour_B  , '\0'          ,3);
  memset(sMin_B   , '\0'          ,3);
  memset(sSec_B   , '\0'          ,3);
 
  memset(sYear_E  , '\0'          ,5);
  m

上一个:学好C和C++需要多长时间?
下一个:c++中窗口过程的问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,