C++总复习习题讲解.docx
《C++总复习习题讲解.docx》由会员分享,可在线阅读,更多相关《C++总复习习题讲解.docx(17页珍藏版)》请在冰豆网上搜索。
C++总复习习题讲解
1、点、线段、三角形详细参考版
#include
#include
classPoint
{
protected:
intx1,y1;
public:
Point(intx=0,inty=0)
{x1=x;y1=y;}
voidSetPoint(intx,inty)
{x1=x;y1=y;}
voidGetPoint(int*px,int*py)
{*px=x1;*py=y1;}
voidShow()
{cout<<"Point("<};
classLine:
publicPoint
{
protected:
intx2,y2;
public:
Line()//自动调用父类缺省的构造函数
{x2=0;y2=0;}
Line(intxx1,intyy1,intxx2,intyy2):
Point(xx1,yy1)
{x2=xx2;y2=yy2;}
voidSetPoint1(intxx1,intyy1)
{x1=xx1;y1=yy1;}
voidSetPoint2(intxx2,intyy2)
{x2=xx2;y2=yy2;}
voidGetPoint1(int*px1,int*py1)
{*px1=x1;*py1=y1;}
voidGetPoint2(int&rx2,int&ry2)
{rx2=x2;ry2=y2;}
doubleLineLen()
{
doublelen;
len=sqrt((double)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
return(len);
}
voidShow()
{
cout<<"Line:
("<cout<<"LineLength="<}
};
classTriangle:
publicLine
{
protected:
intx3,y3;
public:
Triangle()//自动调用父类缺省的构造函数
{x3=0;y3=0;}
Triangle(intxx1,intyy1,intxx2,intyy2,intxx3,intyy3):
Line(xx1,yy1,xx2,yy2)
{x3=xx3;y3=yy3;}
voidGetPoint3(int&rx3,int&ry3)//不另定义GetPoint1()、GetPoint2()
{rx3=x3;ry3=y3;}//因已继承
voidSetPoint3(intxx3,intyy3)//不另定义SetPoint1()、SetPoint2()
{x3=xx3;y3=yy3;}//因已继承
doubleLineLen12()
{return(LineLen());}
doubleLineLen13()
{
doublelen;
len=sqrt((double)((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)));
return(len);
}
doubleLineLen23()
{
doublelen;
len=sqrt((double)((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)));
return(len);
}
doubleAroundLen()
{return(LineLen12()+LineLen23()+LineLen13());}
doubleArea()
{
doublearea,s,a,b,c;
a=LineLen12();
b=LineLen23();
c=LineLen13();
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
return(area);
}
voidShow()
{cout<<"Triangle:
("<cout<<"LineLen12="<cout<<"LineLen13="<cout<<"LineLen23="<cout<<"AroundLen="<cout<<"Area="<
}
};
voidmain()
{
cout<<"测试三角形类:
\n";
Triangletri(0,0,0,2,2,0);
tri.Show();
}
1.1点、线段、三角形简化参考版
#include
#include
classPoint
{
protected:
intx1,y1;
public:
Point(intx=0,inty=0)
{x1=x;y1=y;}
};
classLine:
publicPoint
{
protected:
intx2,y2;
public:
Line(intxx1,intyy1,intxx2,intyy2):
Point(xx1,yy1)
{x2=xx2;y2=yy2;}
doubleLineLen()
{
doublelen;
len=sqrt((double)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
return(len);
}
voidShow()
{
cout<<"Line:
("<cout<<"LineLength="<}
};
classTriangle:
publicLine
{
protected:
intx3,y3;
public:
Triangle(intxx1,intyy1,intxx2,intyy2,intxx3,intyy3):
Line(xx1,yy1,xx2,yy2)
{x3=xx3;y3=yy3;}
doubleLineLen12()
{return(LineLen());}
doubleLineLen13()
{
doublelen;
len=sqrt((double)((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)));
return(len);
}
doubleLineLen23()
{
doublelen;
len=sqrt((double)((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)));
return(len);
}
doubleAroundLen()
{return(LineLen12()+LineLen23()+LineLen13());}
doubleArea()
{
doublearea,s,a,b,c;
a=LineLen12();
b=LineLen23();
c=LineLen13();
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
return(area);
}
voidShow()
{cout<<"Triangle:
("<cout<<"LineLen12="<cout<<"LineLen13="<cout<<"LineLen23="<cout<<"AroundLen="<cout<<"Area="<
}
};
voidmain()
{
cout<<"测试三角形类:
\n";
Triangletri(0,0,0,2,2,0);
tri.Show();
}
2、分数重载详细参考版
#include
#include
classFraction
{
intm,n;//m是分子,n是分母
public:
Fraction(intim=0,intin=1)
{
intt=gcd(im,in);
m=im/t;n=in/t;
if(m*n>0)//若分子和分母同号
{m=abs(m);n=abs(n);}
else//若分子和分母异号
{m=-abs(m);n=abs(n);};
}
intgcd(intx,inty);
Fraction&operator=(Fractionb)
{
m=b.m;n=b.n;
return*this;
}
Fractionoperator+(Fractionb)
{returnFraction(m*b.n+n*b.m,n*b.n);}
Fractionoperator-(Fractionb)
{returnFraction(m*b.n-n*b.m,n*b.n);}
friendFractionoperator*(Fractiona,Fractionb);
friendFractionoperator/(Fractiona,Fractionb);
voidShow()
{cout<};
intFraction:
:
gcd(intx,inty)//返回的最大公约数是正数
{
intr;
if(x<0)x=-x;
if(y<0)y=-y;
while(r=x%y)
{x=y;y=r;}
returny;
}
Fractionoperator*(Fractiona,Fractionb)
{returnFraction(a.m*b.m,a.n*b.n);}
Fractionoperator/(Fractiona,Fractionb)
{returnFraction(a.m*b.n,a.n*b.m);}
voidmain()
{
Fractiona(1,3),b(3,-12),c;
cout<<"a=";a.Show();
cout<<"b=";b.Show();
c=a+b;
cout<<"a+b=";c.Show();
c=a-b;
cout<<"a-b=";c.Show();
c=a*b;
cout<<"a*b=";c.Show();
c=a/b;
cout<<"a/b=";c.Show();
}
2.2分数重载运算简化参考版
#include
#include
classFraction
{
intm,n;//m是分子,n是分母
public:
Fraction(intim=0,intin=1)
{
intt=gcd(im,in);
m=im/t;n=in/t;
if(m*n>0)//若分子和分母同号
{m=abs(m);n=abs(n);}
else//若分子和分母异号
{m=-abs(m);n=abs(n);};
}
intgcd(intx,inty);
Fractionoperator+(Fractionb)
{returnFraction(m*b.n+n*b.m,n*b.n);}
voidShow()
{cout<};
intFraction:
:
gcd(intx,inty)//返回的最大公约数是正数
{
intr;
if(x<0)x=-x;
if(y<0)y=-y;
while(r=x%y)
{x=y;y=r;}
returny;
}
voidmain()
{
Fractiona(1,3),b(3,-12),c;
cout<<"a=";a.Show();
cout<<"b=";b.Show();
c=a+b;
}
3、矩阵运算符重载详细参考版
#include
classMatrix
{public:
Matrix();
friendMatrixoperator+(Matrix&,Matrix&);
friendostream&operator<<(ostream&,Matrix&);
friendistream&operator>>(istream&,Matrix&);
private:
intmat[2][3];
};
Matrix:
:
Matrix()
{for(inti=0;i<2;i++)
for(intj=0;j<3;j++)
mat[i][j]=0;
}
Matrixoperator+(Matrix&a,Matrix&b)
{Matrixc;
for(inti=0;i<2;i++)
for(intj=0;j<3;j++)
{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
returnc;
}
istream&operator>>(istream&in,Matrix&m)
{cout<<"inputvalueofmatrix:
"<for(inti=0;i<2;i++)
for(intj=0;j<3;j++)
in>>m.mat[i][j];
returnin;
}
ostream&operator<<(ostream&out,Matrix&m)
{for(inti=0;i<2;i++)
{for(intj=0;j<3;j++)
{out<out<returnout;
}
intmain()
{Matrixa,b,c;
cin>>a;
cin>>b;
cout<"<cout<"<c=a+b;
cout<"<return0;
}
4、根据以下程序运行结果,结合测试程序,设计类
运行结果为:
55-44=11
voidmain()
{
Testt1;
t1.set(55,44);
t1.show();
}
#include"iostream.h"
classTest
{
inta1,a2;
public:
voidset(intx,inty){a1=x;a2=y;}
voidshow(){cout<};
5.#include
usingnamespacestd;
classStudent
{public:
Student(intn,floats):
num(n),score(s){}
voiddisplay();
private:
intnum;
floatscore;
};
voidStudent:
:
display()
{cout<intmain()
{Studentstud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
Student*p=stud;
for(inti=0;i<=2;p=p+2,i++)
p->display();
return0;
}
6、#include
usingnamespacestd;
classStudent
{public:
Student(intn,floats):
num(n),score(s){}
intnum;
floatscore;
};
voidmain()
{Studentstud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
voidmax(Student*);
Student*p=&stud[0];
max(p);
}
voidmax(Student*arr)
{floatmax_score=arr[0].score;
intk=0;
for(inti=1;i<5;i++)
if(arr[i].score>max_score){max_score=arr[i].score;k=i;}
cout<}
7、#include
usingnamespacestd;
classProduct
{public:
Product(intn,intq,floatp):
num(n),quantity(q),price(p){};
voidtotal();
staticfloataverage();
staticvoiddisplay();
private:
intnum;
intquantity;
floatprice;
staticfloatdiscount;
staticfloatsum;
staticintn;
};
voidProduct:
:
total()
{floatrate=1.0;
if(quantity>10)rate=0.98*rate;
sum=sum+quantity*price*rate*(1-discount);
n=n+quantity;
}
voidProduct:
:
display()
{cout<cout<}
floatProduct:
:
average()
{return(sum/n);}
floatProduct:
:
discount=0.05;
floatProduct:
:
sum=0;
intProduct:
:
n=0;
intmain()
{
ProductProd[3]={
Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5)
};
for(inti=0;i<3;i++)
Prod[i].total();
Product:
:
display();
return0;
}