30分求C++编程:输入生日,计算活了多少天?

谢谢了,最好讲讲思路,我很想不通~!要编好的程序,谢谢~!
2025-02-22 23:20:36
推荐回答(5个)
回答1:

修改了explorewin存在的问题,可以计算任意两天之间所隔的天数,首先输入生日,再输入今天的日期,电脑会自动计算。
代码如下:
#include
int dayfun(int nowYear,int nowMonth,int nowDay)//此函数计算今天是今年的第几天
{
bool isrunnian=((nowYear%4==0)&&(nowYear%100!=0)||(nowYear%400==0)); //今年是闰年吗
int whichday=0;
for(int i=1;i{
switch(i) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
{ whichday+=31; break; }
case 4: case 6: case 9: case 11:
{ whichday+=30; break; }
case 2:
if (isrunnian==true) { whichday+=29; break; }
else
{ whichday+=28; break; }
}
return whichday+nowDay;
}
}

int main(void)
{
int nowYear,nowMonth,nowDay;
int biryear,birmonth,birday;
bool isRunNian;
int ff=0,bb=0,pp; //pp为出生年的天数
cout<<"input a birthday:"<cout<<"year=";
cin>>biryear;
cout<<"month=";
cin>>birmonth;
cout<<"day=";
cin>>birday;

cout<<"input a date:"<cout<<"year=";
cin>>nowYear;
cout<<"month=";
cin>>nowMonth;
cout<<"day=";
cin>>nowDay;

ff=dayfun(nowYear,nowMonth,nowDay);//求今天是今年的第几天的函数
bb=dayfun(biryear,birmonth,birday);//求出生日是出生年的第几天的函数

int age=nowYear-biryear;//得到周岁数
cout<<"age="<
int counter=0;//counter用来作记数器,计闰年数
for(int i=biryear+1;i{
isRunNian=((i%4==0)&&(i%100!=0)||(i%400==0)); //判断是否为闰年
if(isRunNian==true)
{
counter++;
isRunNian=false;
}
}

cout<<"run nian= "<int pingYear=age-counter;//平年数
cout<<"ping nian="<
//cout<<"total months="<int totalday=0;
if (age>=0)
{
totalday=7*31*age+4*30*age+(counter*29+(age-counter)*28)+ff-bb;//总天数等于出生年剩余天数+周岁数(未包括今年)+ 今天是今年的第几天
}
else
{
totalday=ff;
}
cout<<"共活了"<return 0;

}

回答2:

又作下修改,感觉还有点问题.出生那年也应该单算,算出出生那天是那年的第几天,判断一下出生那年是不是润年,看是用366减去它还是用365减去它,若是想是今年出生的呢,只用今天是今年的第几天减生日是今年第几天就行了
#include
#include

int dayfun(int nowYear,int nowMonth,int nowDay)//´Ëº¯Êý¼ÆËãijÌìÊÇijÄêµÄµÚ¼¸Ìì
{
bool isleap=((nowYear%4==0)&&(nowYear%100!=0)||(nowYear%400==0)); //½ñÄêÊÇÈòÄêÂð
int whichday=0;
for(int i=1;i{
switch(i) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
{ whichday+=31; break; }
case 4: case 6: case 9: case 11:
{ whichday+=30; break; }
case 2:
if (isleap==true) { whichday+=29; break; }
else
{ whichday+=28; break; }
}
}
return whichday+nowDay;
}

int main(void)
{
int nowYear,nowMonth,nowDay;
int biryear,birmonth,birday;
bool isleap;

struct tm *times; //¶¨Òåʱ¼äÖ¸Õë±äÁ¿.....(Ö»ÄÜÓÃÖ¸Õë)

time_t t; //¶¨Òåϵͳʱ¼ä±äÁ¿,¹©Ìṩϵͳʱ¼ä

t = time(0); //µ±Ç°ÏµÍ³Ê±¼ä¸ø±äÁ¿t

times = localtime(&t); //°Ñϵͳʱ¼ä±äÁ¿Ç¿ÖÆת»»³Étm½á¹¹ÌåÐÎʽʱ¼ä

nowYear=(times->tm_year+1900);//get this year

nowMonth=times->tm_mon;//get this month

nowDay=times->tm_mday;//get today

cout<<"input a birthday:"<cout<<"year=";
cin>>biryear;
cout<<"month=";
cin>>birmonth;
cout<<"day=";
cin>>birday;

int age=nowYear-biryear;//get age
cout<<"age="<
int counter=0;//var counter is used to calculate how many leap years there is
for(int i=biryear+1;i{
isleap=((i%4==0)&&(i%100!=0)||(i%400==0)); //is the year is a leap year
if(isleap==true)
{
counter++;
isleap=false;
}
}

cout<<"leap= "<int pingYear=age-counter;//not leap year quantity

cout<<"not leap="<
int totalday=0;
if (age>=1)
{
int temp=0;
int ff=dayfun(nowYear,nowMonth,nowDay);//Çó½ñÌìÊǽñÄêµÄµÚ¼¸ÌìµÄº¯Êý
cout<<"today is the "<int bb=dayfun(biryear,birmonth,birday);//Çó³öÉúÈÕÊdzöÉúÄêµÄµÚ¼¸ÌìµÄº¯Êý
cout<<"birthday was the "<if(((biryear%4==0)&&(biryear%100!=0)||(biryear%400==0))) //ÅжϳöÉúÄêÊÇ·ñΪÈòÄê
{
temp=366-bb;
}
else
{
temp=365-bb;
}
totalday=temp+7*31*(age-1)+4*30*(age-1)+(counter*29+(age-1-counter)*28)+ff;//×ÜÌìÊýµÈÓÚ³öÉúÄêÊ£ÓàÌìÊý+ÖÜËêÊý£¨Î´°üÀ¨½ñÄêºÍ³öÉúÄ꣩+ ½ñÌìÊǽñÄêµÄµÚ¼¸Ìì
}
else
{
int day1=dayfun(nowYear,nowMonth,nowDay);//½ñÌìÊǽñÄêµÄµÚ¼¸Ìì
cout<<"today is the "<int day2=dayfun(biryear,birmonth,birday);//ÉúÈÕÊǽñÄêµÄµÚ¼¸Ìì
cout<<"birthday was the "<totalday=day1-day2;
}
cout<<"total live"<return 0;
}

回答3:

#include
using namespace std;
void main()
{
int day,month,year,k,leap;
int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
cout<<"\nplease input year,month,day\n";
cin>>year>>month>>day;
leap=(year%4==0&&year%100!=0)||year%400==0;
for(k=0;kday=day+a[leap][k];
cout<<"It is the "<}

//以上方法最简单,细心揣测你就会发现它的好

回答4:

你们都忽略了一个问题。其实还需要一个参数,那就是人所在的时区。如果一个人在本初子午线那边,就要多加一天,等等。

回答5:

恩~
give me EMAIL
SEND it to you