课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。
【项目4 - 日期结构体】
(1)定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; int days; //计算days cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<days<<"天."<<endl; return 0; }
参考解答一:
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; int days; switch(date.month) { case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; } if ((date.year %4== 0 && date.year % 100 != 0 ||date.year % 400 == 0) && date.month >=3) days+=1; cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<days <<"天."<<endl; return 0; }
参考解答二:
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; int days=0,i; for(i=1;i<date.month;++i) days+=d[i]; //当月之前的天数 days+=date.day; //加上本月天数 if ((date.year %4== 0 && date.year % 100 != 0 ||date.year % 400 == 0) && date.month >=3) days+=1; //闰年的2月要加1天 cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<days <<"天."<<endl; return 0; }
参考解答三: 函数版1——用结构体的分量当形参
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int days(int,int,int); int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"; cout<<days(date.year,date.month,date.day)<<"天."<<endl; return 0; } int days(int yy,int mm,int dd) { int n=0,i; for(i=1;i<mm;++i) n+=d[i]; //当月之前的天数 n+=dd; //加上本月天数 if ((yy %4== 0 && yy % 100 != 0 ||yy % 400 == 0) && mm >=3) n+=1; //闰年的2月要加1天 return n; }
参考解答四:函数版2——用结构体整体作为参数
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int days(Date); int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"; cout<<days(date)<<"天."<<endl; return 0; } int days(Date ymd) { int n=0,i; for(i=1;i<ymd.month;++i) n+=d[i]; //当月之前的天数 n+=ymd.day; //加上本月天数 if ((ymd.year %4== 0 && ymd.year % 100 != 0 ||ymd.year % 400 == 0) && ymd.month >=3) n+=1; //闰年的2月要加1天 return n; }
(2)输入两个人的生日,求出他们相差多少天。
参考解答:
#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日共多少天 }
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |
时间: 2024-09-17 21:21:16