cin>>n;
SINtest(x,n);
();
}
运行结果:
5.提高题9
题目:
设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:
(1)定义长方形类Rectangle
保护的数据成员intl,w;高题10题目:
设计一个程序,查询2000年1月1日(星期六)后的某天是星期几,具体要求如下:
(1)定义函数intleap(intyear):
判断某年year是否为润年。
能够被400整除,或者能够被4整除但不能衩100整除的年份是润年。
(2)定义函数intf(inty,intm,intd,int*m1,int*m2):
判断输入的日期是否合法,其中y、m、d分别表示年、月、日,m1表示非润年每月的天数,m2表示润年每月的天数。
(3)定义类date,表示日期私有数据成员
intyear,month,day;//分别表示某年某月某日公有成员函数:
date(inty,intm,intd):
构造函数,用形参分别初始化数据成员;
intget_year():
访问私有成员year;intget_month():
访问私有成员month;intget_day():
访问私有成员day;voidshow():
以指定格式输出数据成员。
(4)定义类week,判断某天是星期几私有数据成员
dated1;//日期类的对象,表示某日
intm1[12];//存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31intm2[12];//存储润年每月的天数31,29,31,30,31,30,31,31,30,31,30,31
intw;//表示用0表示星期天,1表示星期一,以此类推6表示星期六公有成员函数
week(inty,intm,intd,int*p1,int*p2):
构造函数,用y,m,d初始化日期,用
p1,p2分别初始化m1,m2;
intdays():
计算d1距2000年1月1日的时间间隔(天数);
voidfun():
根据days()的计算结果判断d1是星期几(求以0~6表示w的值);
voidprint():
输出判断结果。
(5)在主函数中对定义的类进行测试。
从键盘输入一个日期,并检查输入数据的合法性,然后用输入的数据和表示每月天数的数组初始化week类的对象w,调用相关成员函数,输出判断结果。
程序运行结果如下:
请输入要查询的日期(年月日):
20099152009/9/15,是星期二。
源程序代码:
#include<>
intleap(intyear){
if(year%400==0||year%100!
=0&&year%4==0)return1;elsereturn0;
}
intf(inty,intm,intd,int*m1,int*m2){
if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)return0;
elseif((m==4||m==6||m==9||m==11)&&d>30)return0;
elsereturn1;while(leap(y))
if(m==2&&(d==28||d>=30))return0;
elsereturn1;while(!
(leap(y)))
if(m==2&&(d==29||d>=30))return0;
elsereturn1;
}
classdate{
intyear,month,day;public:
date(inty,intm,intd){year=y;month=m;day=d;
}
intget_year(){returnyear;}
intget_month(){returnmonth;}intget_day(){returnday;}
voidshow(){
cout<}
};
classweek{
dated1;intm1[12];intm2[12];
intw;public:
week(inty,intm,intd,int*p1,int*p2):
d1(y,m,d){for(inti=0;i<12;i++)
m1[i]=p1[i];
for(intj=0;j<12;j++)m2[i]=p2[i];
w=0;
}
intdays(){
inti,j,result=0;for(j=2000;j<();j++)
result+=(leap(j)+365);for(i=1;i<();i++){
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)result+=31;elseif(i==4||i==6||i==9||i==11)result+=30;
elseif(i==2)result+=(28+leap(j));
}
result=result+()-1;
returnresult;
}
voidfun(){
switch(days()%7){case0:
w=6;break;
case1:
w=0;break;case2:
w=1;break;case3:
w=2;break;case4:
w=3;break;case5:
w=4;break;case6:
w=5;break;
}
}
voidprint(){
switch(w){
case6:
cout<<"
case0:
cout<<"
是星期六。
是星期天。
";break;
";break;
case1:
cout<<"
case2:
cout<<"
是星期一。
是星期二。
";break;
";break;
case3:
cout<<"
是星期三。
";break;
case4:
cout<<"
是星期四。
";break;
case5:
cout<<"是星期五。
";break;
}
}
};
voidmain(){
intm1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
intm2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
cout<<"请输入要查询的日期(年月日):
";inta,b,c;
cin>>a>>b>>c;cout<weekw(a,b,c,m1,m2);
dateM(a,b,c);();
();
();
}
运行结果:
三.实践小结
1.通过选择不同类型,不同难度层次的题目,有效地复习了一学期以来C++的学习内容。
2.实践过程中通过个人思考及小组合作,对细节之处和难点进行了有效的分析,极大地提高了学习效率。
3.通过对题目的分析和理解,我发现自己在字符串处理,指针等方面基础较好,而在虚函数,友元函数等较琐碎的知识掌握得不太透彻,这是寒假期间我在准备等级考试所要留心的地方。
4.这次的课程实践在一定程度上是为即将到来的计算机二级考试打下良好的基础。
5.在最后一次的成果展示上,我发现自己的程序缺乏创新,追求实用性,却忽略了其潜在价值。