问题及代码:
/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:test.cpp
*作者:吴胜男
*完成日期:2014年12月22日
*版本号:v1.0
*
*问题描述:定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。
*输入描述:输入年月日
*程序输出:输出该年的第几天
*/
#include <iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
};
int ldays(Date);
int main()
{
Date date1,date2;
int days1,days2,days,i;
cout<<"请输入第一个人的生日:"<<endl;
cin>>date1.year>>date1.month>>date1.day;
days1=ldays(date1);
cout<<"请输入第二个人的生日:"<<endl;
cin>>date2.year>>date2.month>>date2.day;
days2=ldays(date2);
if(date1.year==date2.year)
{
if(days1>days2)
days=days1-days2;
else
days=days2-days1;
}
else if(date1.year>date2.year)
{
if((date2.year%4==0&&date2.year%100!=0)||(date2.year%400==0))
days=days1+(366-days2);
else
days=days1+(365-days2);
for(i=date2.year+1; i<date1.year; i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
days+=366;
else
days+=365;
}
}
else
{
if((date1.year%4==0&&date1.year%100!=0)||(date1.year%400==0))
days=days2+(366-days1);
else
days=days2+(365-days1);
for(i=date1.year+1; i<date2.year; i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
days+=366;
else
days+=365;
}
}
cout<<"两人生日相差"<<days<<"天"<<endl;
return 0;
}
int ldays(Date date)
{
int days;
//计算days
int sum=date.day;
int i;
for (i=1; i<date.month; i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
sum=sum+31;
if(i==4||i==6||i==9||i==11)
sum=sum+30;
if(i==2)
{
if((date.year%4==0&&date.year%100!=0)||date.year%400==0)
sum=sum+29;
else
sum=sum+28;
}
}
days=sum;
return days;
}
运行结果:
知识点总结:这个程序关键在于,如果两人的生日年分相差很多要考虑到中间年份是不是闰年,并且中间相差年份要用到循环,这样就比较简单。
学习心得:这个程序自己也写了,但是写的不对就参考的别人的,因为已经在这个程序上花费了很长时间,不想在卡在这儿了。