C primer plus第6版中文版编程练习答案第11章.docx
- 文档编号:3087529
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:46
- 大小:21.68KB
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- primer plus第6版中文版编程练习答案第11章 plus 中文版 编程 练习 答案 11