问题及代码:
/*
*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 daysOfMonth[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int day(Date); //计算出日期d和1900年1月1日差多少天
int main()
{
Date date;
int d1=0,d2=0,t;//d1和d2分别代表两个人的生日和1900年1月1日相差多少天
cout<<"第一个人的出生日期:";
cin>>date.year>>date.month>>date.day;
d1=day(date);
cout<<"第二个人的出生日期:";
cin>>date.year>>date.month>>date.day;
d2=day(date);
//对两个人的生日,求出了和1900年1月1日相差多少天(d1和d2),下面相减
t=d2-d1;
if(t<0)
{
t=-t;//若出现负数,则将其化为正数
}
cout<<"两人生日相差"<<t<<"天."<<endl;
}
int day(Date d)
{
int days=0,i;
for(i=1900; i<d.year; i++)//算出这年1月1日到1900年1月1日共多少天
{
days+=365;
if(i%400==0||(i%4==0&&i!=0))
{
days++;
}
}
for(i=1; i<d.month; ++i)
days+=daysOfMonth[i]; //加上当年当月之前的天数
days+=d.day; //再加上本月天数
if (d.month >=3 && ((d.year %4== 0 && d.year % 100 != 0) ||d.year % 400 == 0))
days+=1; //当年为闰年且进入了3月,还要加1天
return days; //生日到1900年1月1日共多少天
}
运行结果:
知识点总结:贺老师在这个程序中用到了数组表示一年中的12个月的天数,把第一个月记为0,当为一月时只加日就可以了。并且还以1900年为基准,计算两人生日相差的天数。。
学习心得:要善于积累,通过比较知道自己在for语句循环用的还不是很灵活。