2011年 下半年 C++程序设计(二十八)

 

(揭开关于你生世的秘密)这不是一个唬人的程序,很有用。老贺由小孩儿过百日,
想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26 年
多,第三个万日,谁敢说一定能过上?20 岁左右的你,要算清楚了。只要在第(1)问中输入你
的生日就行了。时分秒不知?可能妈妈也忘了,输入一个喜欢的、吉利的时间吧。
下面的程序可以在一个 main 函数中完成,也可以用函数求解,main 函数调用即可。
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中中需要取随机数时需要
一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d 天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的
万天日期靠这个功能了)
(6)求你输入的时间s 秒后是何日何时,将结果保存在一个结构体变量中输出;

 

#include <iostream>
using namespace std;
//定义Data结构体;
struct Data
{
 int year;
 int month;
 int day;
 int hours;
 int minute;
 int second;
};
void cin_data();//声明cin_data
bool judge_year(int year);//声明及judge_year
void cout_sth();//声明输出函数
void retreat_day(int day1,int select);
void retreat_second();
Data my_data;
int store_day;
int main()
{
 int day1;
 cin_data();
 cout_sth();
 cout<<"请输入后退的天数:"<<endl;
 cin>>day1;
 retreat_day(day1,1);
 retreat_second();
 system("PAUSE");
 return 0;
}
//定义输入数据cin_data函数
void cin_data()
{
 int num;
 
 do{
  cout<<"请输入您的出生年份:"<<endl;
  cin>>num;
  my_data.year=num;
 }while(num>2000||num<1900);
 
 do{
  cout<<"请输入您的出生月份:"<<endl;
  cin>>num;
  my_data.month=num;
 }while(num<1||num>12);
 
 do{
  cout<<"请输入您的出生日期:"<<endl;
  cin>>num;
  my_data.day=num;
 }while(num<1||num>31);
 
 do{
  cout<<"请输入您的出生时:"<<endl;
  cin>>num;
  my_data.hours=num;
 }while(num<0||num>24);
 
 do{
  cout<<"请输入您的出生分:"<<endl;
  cin>>num;
  my_data.minute=num;
 }while(num<0||num>60);
 
 do{
  cout<<"请输入您的出生秒:"<<endl;
  cin>>num;
  my_data.second=num;
 }while(num<0||num>60);
 
}
//定义判断闰年的函数
bool judge_year(int year)
{
 bool leap;
 
 if(year%4==0)
 {
  if(year==0)
  {
   if(year==0)
    leap=true;
   else
    leap=false;
  }
  else
   leap=true;
 }
 else
  leap=false;
 return leap;
}
//定义输出函数
void cout_sth()
{
 int day=0,month=1;
 while(month<my_data.month){
  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  {
   day=day+31;
   month++;
   continue;
  }
  if(month==4||month==6||month==9||month==11)
  {
   day=day+30;
   month++;
   continue;
  }
  if(month==2)
  {
   if(judge_year(my_data.year))
    day=day+29;
   else
    day=day+28;
   month++;
   continue;
  }
 }
 day=day+my_data.day;
 store_day=day;
 cout<<"该日在本年中是第"<<day<<"天。"<<endl;
 int second=0;
 second=(my_data.hours*60+my_data.minute)*60+my_data.second;
 cout<<"这是这一天中的第"<<second<<"秒。"<<endl;
 second=second+(day-1)*24*60*60;
 cout<<"这是这一年中的第"<<second<<"秒。"<<endl;
}
//定义void retreat_day()函数;
void retreat_day(int day1,int select)
{
 int day,month;
 bool pass;
 Data store;
 
 store=my_data;
 
 day=store_day+day1;
 do{
  pass=false;
  if(judge_year(store.year))
  {
   if(day-366>0)
   {
    pass=true;
    store.year+=1;
    day-=366;
   }
  }
  else
  {
   if(day-365>0)
   {
    pass=true;
    store.year+=1;
    day-=365;
   }
  }
 }while(pass);
 if(day==0)day=1;
 month=1;
 do{
  pass=false;
  if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day-31>0)
  {
   pass=true;
   day-=31;
   month++;
  }
  if((month==4||month==6||month==9||month==11)&&day-30>=0)
  {
   pass=true;
   day-=30;
   month++;
  }
  if(month==2)
  {
   if(judge_year(store.year))
   {
    if(day-29>0)
    {
     pass=true;
     day-=29;
     month++;
    }
   }
   else
   {
    if(day-28>=0)
    {
     pass=true;
     day-=28;
     month++;
    }
   }
  
  }
 }while(pass);
 store.month=month;
 if(select==1)
 {
 cout<<"过"<<day1<<"天后是"<<store.year<<"年"<<store.month<<"月"<<day<<"日。"<<endl;
 }
 else
 {
  cout<<"过"<<select<<"秒后是"<<store.year<<"年"<<store.month<<"月"<<day<<"日"<<endl;
 }

}
//定义retreat_second();
void retreat_second()
{
 Data store;
 int day,second;
 cout<<"请输入后退的秒数:"<<endl;
 cin>>second;
 day=second/(24*3600);
 retreat_day(day,second);
 second=second%(24*3600);
 store.hours=second/3600;
 second=second;
 store.minute=second/60;
 second=second;
 cout<<store.hours<<"时"<<store.minute<<"分"<<second<<"秒。"<<endl;
}

 

 

运行结果

C++ <wbr>程序设计 <wbr>十二 <wbr>(3)

 

我的博客真的好神奇,只能在学校计算中心才能登上!

这不逼着我去计算中心学C++吗?

C++ <wbr>程序设计 <wbr>十二 <wbr>(3)

说去就去!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值