C primer plus第6版中文版编程练习答案第11章.docx
《C primer plus第6版中文版编程练习答案第11章.docx》由会员分享,可在线阅读,更多相关《C primer plus第6版中文版编程练习答案第11章.docx(46页珍藏版)》请在冰点文库上搜索。
Cprimerplus第6版中文版编程练习答案第11章
1、
//vector.h
#ifndefVECTOR_H_
#defineVECTOR_H_
#include
#include
#include
#include
#include
usingnamespacestd;
namespaceVECTOR
{
classVector
{
public:
enumMode{RECT,POL};
private:
doublex;
doubley;
doublemag;
doubleang;
Modemode;
voidset_mag();
voidset_ang();
voidset_x();
voidset_y();
public:
Vector();
Vector(doublen1,doublen2,Modeform=RECT);
voidreset(doublen1,doublen2,Modeform=RECT);
~Vector();
doublexval()const{returnx;}
doubleyval()const{returny;}
doublemagval()const{returnmag;}
doubleangval()const{returnang;}
voidpolar_mode();
voidrect_mode();
Vectoroperator+(constVector&b)const;
Vectoroperator-(constVector&b)const;
Vectoroperator-()const;
Vectoroperator*(doublen)const;
friendVectoroperator*(doublen,constVector&a);
friendostream&operator<<(ostream&os,constVector&v);
};
}
#endif
//vector.cpp
#include"vector.h"
namespaceVECTOR
{
constdoubleRad_to_deg=45.0/atan(1.0);
voidVector:
:
set_mag()
{
mag=sqrt(x*x+y*y);
}
voidVector:
:
set_ang()
{
if(x==0.0&&y==0.0)
ang=0.0;
else
ang=atan2(y,x);
}
voidVector:
:
set_x()
{
x=mag*cos(ang);
}
voidVector:
:
set_y()
{
y=mag*sin(ang);
}
Vector:
:
Vector()
{
x=y=mag=ang=0.0;
mode=RECT;
}
Vector:
:
Vector(doublen1,doublen2,Modeform)
{
mode=form;
if(form==RECT)
{
x=n1;
y=n2;
set_mag();
set_ang();
}
elseif(form==POL)
{
mag=n1;
ang=n2/Rad_to_deg;
set_x();
set_y();
}
else
{
cout<<"Incorrect3rdargumenttoVector()--";
cout<<"vectorsetto0\n";
x=y=mag=ang=0.0;
mode=RECT;
}
}
voidVector:
:
reset(doublen1,doublen2,Modeform)
{
mode=form;
if(form==RECT)
{
x=n1;
y=n2;
set_mag();
set_ang();
}
elseif(form==POL)
{
mag=n1;
ang=n2/Rad_to_deg;
set_x();
set_y();
}
else
{
cout<<"Incorrect3rdargumenttoVector()--";
cout<<"vectorsetto0\n";
x=y=mag=ang=0.0;
mode=RECT;
}
}
Vector:
:
~Vector()
{
}
voidVector:
:
polar_mode()
{
mode=POL;
}
voidVector:
:
rect_mode()
{
mode=RECT;
}
VectorVector:
:
operator+(constVector&b)const
{
returnVector(x+b.x,y+b.y);
}
VectorVector:
:
operator-(constVector&b)const
{
returnVector(x-b.x,y-b.y);
}
VectorVector:
:
operator-()const
{
returnVector(-x,-y);
}
VectorVector:
:
operator*(doublen)const
{
returnVector(n*x,n*y);
}
Vectoroperator*(doublen,constVector&a)
{
returna*n;
}
ostream&operator<<(ostream&os,constVector&v)
{
if(v.mode==Vector:
:
RECT)
os<<"(x,y)=("<elseif(v.mode==Vector:
:
POL)
{
os<<"(m,a)=("<<}
else
os<<"Vectorobjectmodeisinvalid";
returnos;
}
}
//randwalk.cpp
#include"vector.h"
intmain()
{
usingVECTOR:
:
Vector;
srand(time(0));
doubledirection;
Vectorstep;
Vectorresult(0.0,0.0);
unsignedlongsteps=0;
doubletarget;
doubledstep;
ofstreamfout;
fout.open("savesteps.txt");
cout<<"Entertargetdistance(qtoquit):
";
while(cin>>target)
{
cout<<"Entersteplength:
";
if(!
(cin>>dstep))
break;
fout<<"TargetDistance:
"<"<while(result.magval(){
fout<"<direction=rand()%360;
step.reset(dstep,direction,Vector:
:
POL);
result=result+step;
steps++;
}
cout<<"After"<"hasthefollowinglocation:
\n";
cout<fout<<"After"<"hasthefollowinglocation:
\n";
fout<result.polar_mode();
cout<<"or\n"<cout<<"Averageoutwarddistanceperstep="
<fout<<"or\n"<fout<<"Averageoutwarddistanceperstep="
<steps=0;
result.reset(0.0,0.0);
cout<<"Entertargetdistance(qtoquit):
";
}
cout<<"Bye!
\n";
cin.clear();
while(cin.get()!
='\n')
continue;
cin.get();
return0;
}
2、
//vector.h
#ifndefVECTOR_H_
#defineVECTOR_H_
#include
#include
#include
#include
usingnamespacestd;
namespaceVECTOR
{
classVector
{
public:
enumMode{RECT,POL};
private:
doublex;
doubley;
Modemode;
doubleset_mag()const;
doubleset_ang()const;
voidset_x(doublemag,doubleang);
voidset_y(doublemag,doubleang);
public:
Vector();
Vector(doublen1,doublen2,Modeform=RECT);
voidreset(doublen1,doublen2,Modeform=RECT);
~Vector();
doublexval()const{returnx;}
doubleyval()const{returny;}
doublemagval()const{returnset_mag();}
doubleangval()const{returnset_ang();}
voidpolar_mode();
voidrect_mode();
Vectoroperator+(constVector&b)const;
Vectoroperator-(constVector&b)const;
Vectoroperator-()const;
Vectoroperator*(doublen)const;
friendVectoroperator*(doublen,constVector&a);
friendostream&operator<<(ostream&os,constVector&v);
};
}
#endif
//vector.cpp
#include"vector.h"
namespaceVECTOR
{
constdoubleRad_to_deg=45.0/atan(1.0);
doubleVector:
:
set_mag()const
{
returnsqrt(x*x+y*y);
}
doubleVector:
:
set_ang()const
{
if(x==0.0&&y==0.0)
return0.0;
else
returnatan2(y,x);
}
voidVector:
:
set_x(doublemag,doubleang)
{
x=mag*cos(ang);
}
voidVector:
:
set_y(doublemag,doubleang)
{
y=mag*sin(ang);
}
Vector:
:
Vector()
{
x=y=0.0;
mode=RECT;
}
Vector:
:
Vector(doublen1,doublen2,Modeform)
{
mode=form;
if(form==RECT)
{
x=n1;
y=n2;
}
elseif(form==POL)
{
set_x(n1,n2/Rad_to_deg);
set_y(n1,n2/Rad_to_deg);
}
else
{
cout<<"Incorrect3rdargumenttoVector()--";
cout<<"vectorsetto0\n";
x=y=0.0;
mode=RECT;
}
}
voidVector:
:
reset(doublen1,doublen2,Modeform)
{
mode=form;
if(form==RECT)
{
x=n1;
y=n2;
}
elseif(form==POL)
{
set_x(n1,n2/Rad_to_deg);
set_y(n1,n2/Rad_to_deg);
}
else
{
cout<<"Incorrect3rdargumenttoVector()--";
cout<<"vectorsetto0\n";
x=y=0.0;
mode=RECT;
}
}
Vector:
:
~Vector()
{
}
voidVector:
:
polar_mode()
{
mode=POL;
}
voidVector:
:
rect_mode()
{
mode=RECT;
}
VectorVector:
:
operator+(constVector&b)const
{
returnVector(x+b.x,y+b.y);
}
VectorVector:
:
operator-(constVector&b)const
{
returnVector(x-b.x,y-b.y);
}
VectorVector:
:
operator-()const
{
returnVector(-x,-y);
}
VectorVector:
:
operator*(doublen)const
{
returnVector(n*x,n*y);
}
Vectoroperator*(doublen,constVector&a)
{
returna*n;
}
ostream&operator<<(ostream&os,constVector&v)
{
if(v.mode==Vector:
:
RECT)
os<<"(x,y)=("<elseif(v.mode==Vector:
:
POL)
{
os<<"(m,a)=("<<}
else
os<<"Vectorobjectmodeisinvalid";
returnos;
}
}
//randwalk.cpp
#include"vector.h"
intmain()
{
usingVECTOR:
:
Vector;
srand(time(0));
doubledirection;
Vectorstep;
Vectorresult(0.0,0.0);
unsignedlongsteps=0;
doubletarget;
doubledstep;
cout<<"Entertargetdistance(qtoquit):
";
while(cin>>target)
{
cout<<"Entersteplength:
";
if(!
(cin>>dstep))
break;
while(result.magval(){
direction=rand()%360;
step.reset(dstep,direction,Vector:
:
POL);
result=result+step;
steps++;
}
cout<<"After"<"hasthefollowinglocation:
\n";
cout<result.polar_mode();
cout<<"or\n"<cout<<"Averageoutwarddistanceperstep="
<steps=0;
result.reset(0.0,0.0);
cout<<"Entertargetdistance(qtoquit):
";
}
cout<<"Bye!
\n";
cin.clear();
while(cin.get()!
='\n')
continue;
cin.get();
return0;
}
3、
//vector.h
#ifndefVECTOR_H_
#defineVECTOR_H_
#include
#include
#include
#include
usingnamespacestd;
namespaceVECTOR
{
classVector
{
public:
enumMode{RECT,POL};
private:
doublex;
doubley;
doublemag;
doubleang;
Modemode;
voidset_mag();
voidset_ang();
voidset_x();
voidset_y();
public:
Vector();
Vector(doublen1,doublen2,Modeform=RECT);
voidreset(doublen1,doublen2,Modeform=RECT);
~Vector();
doublexval()const{returnx;}
doubleyval()const{returny;}
doublemagval()const{returnmag;}
doubleangval()const{returnang;}
voidpolar_mode();
voidrect_mode();
Vectoroperator+(constVector&b)const;
Vectoroperator-(constVector&b)const;
Vectoroperator-()const;
Vectoroperator*(doublen)const;
friendVectoroperator*(doublen,constVector&a);
friendostream&operator<<(ostream&os,constVector&v);
};
}
#endif
//vector.cpp
#include"vector.h"
namespaceVECTOR
{
constdoubleRad_to_deg=45.0/atan(1.0);
voidVector:
:
set_mag()
{
mag=sqrt(x*x+y*y);
}
voidVector:
:
set_ang()
{
if(x==0.0&&y==0.0)
ang=0.0;
els