}
}
~CMatrix(){
delete[m]a;}
};
voidmain(){
intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
cout<<"原始方阵:
"<for(inti=0;i<4;i++){
for(intj=0;j<4;j++)
cout<cout<}
cout<<"变换后的方阵:
"<CMatrixtest(arr,4);
test.Transform();
test.show();
}
运行结果
4.基础题17
题目:
17.定义一个类SIN,求sin(x)=x/1-x3/3!
+x5/5!
-x7/7!
+....+(-1)n+1x(2n-1)/(2n-1)!
具
体要求如下:
(1)私有成员数据。
intx:
输入公式中x的值,求sin(x)。
intn:
输入公式中n的值。
(2)公有成员函数。
SIN(intx,intn):
构造函数,用于初始化x和n的值。
intpower(intq):
求q!
的值。
lintmi(intm,intn):
求mn的值。
lintfun():
用于求SIN(X)的值。
lvoidshow():
输出求得的结果。
(3)在主程序中定义对象test,对该类进行测试
源程序代码:
#include
classSIN{
private:
intx;intn;
public:
SIN(intx,intn){
this->x=x;
this->n=n;
}
intpower(intq){
ints=1;
if(q<=1)return1;
while(q>1){
s=s*q;
q--;
}
returns;
}
intmi(intm,intn){
inttemp=1;
for(inti=1;i<=n;i++)
{
temp*=m;
}
returntemp;
}
intfun(){
intresult=0;
for(inti=0;i<=n;i++){
result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);
}
returnresult;
}
voidshow(){
cout<<"sin("<"<};
voidmain(){
intx,n;
cout<<"输入一个整数x"<cin>>x;
cout<<"输入一个整数n"<cin>>n;
SINtest(x,n);
test.show();
}
运行结果:
5.提高题9
题目:
设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:
(1)定义长方形类Rectangle
保护的数据成员
intl,w;//表示长方形的长和宽
ints;//表示长方形的面积
公有的构造函数
Rectangle(intx,inty):
初始化长方形的长和宽;
公有的虚函数
virtualvoidfun():
求长方形的面积;
virtualvoidshow():
输出长方形的长、宽和面积。
(2)定义长方形类A的公有派生类Cuboid,表示长方体类
私有的数据成员
inth;//表示长方体的高
公有的构造函数:
Cuboid(intx,inty,intz):
初始化长方体的长、宽和高。
公有函数
voidfun():
求长方体的表面积;
voidshow():
输出长方体的长、宽、高和表面积。
(3)在主函数中对定义的类进行测试,要求定义长方形对象a1(长为2,宽为3),
长方体对象b1(长、宽、高分别为2,3,4),通过基类的指针p分别求长方形
的面积和长方体的表面积,输出数据成员,并体现运行的多态性。
源程序代码:
#include
classRectangle{
protected:
intl,w;
ints;
public:
Rectangle(intx,inty){
l=x;
w=y;
}
virtualvoidfun(){
s=l*w;
}
virtualvoidshow(){
cout<<"长方形的长为:
"<"<"<
}
};
classCuboid:
publicRectangle{
inth;
public:
Cuboid(intx,inty,intz):
Rectangle(x,y){
h=z;
}
voidfun(){
s=2*(w*l+w*h+h*l);
}
voidshow(){
cout<<"长方体的长为:
"<"<"<"<
}
};
voidmain(){
Rectangle*p;
Rectanglea1(2,3);
p=&a1;
p->fun();
p->show();
Cuboidb1(2,3,4);
p=&b1;
p->fun();
p->show();
}
运行结果:
6.提高题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,31
intm2[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,
调用相关成员函数,输出判断结果。
程序运行结果如下:
请输入要查询的日期(年月日):
2009915
2009/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;jresult+=(leap(j)+365);
for(i=1;iif(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+d1.get_day()-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<<"是星期六。
";break;
case0:
cout<<"是星期天。
";break;
case1:
cout<<"是星期一。
";break;
case2:
cout<<"是星期二。
";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<f(a,b,c,m1,m2);
weekw(a,b,c,m1,m2);
dateM(a,b,c);
M.show();
w.fun();
w.print();
}
运行结果:
三.实践小结
1.通过选择不同类型,不同难度层次的题目,有效地复习了一学期以来C++的学习内容。
2.实践过程中通过个人思考及小组合作,对细节之处和难点进行了有效的分析,极大地提高了学习效率。
3.通过对题目的分析和理解,我发现自己在字符串处理,指针等方面基础较好,而在虚函数,友元函数等较琐碎的知识掌握得不太透彻,这是寒假期间我在准备等级考试所要留心的地方。
4.这次的课程实践在一定程度上是为即将到来的计算机二级考试打下良好的基础。
5.在最后一次的成果展示上,我发现自己的程序缺乏创新,追求实用性,却忽略了其潜在价值。