【11.1】c++ primer plus 课后编程答案

来源:互联网 发布:手机网络劫持 编辑:程序博客网 时间:2024/06/05 22:32

C++ PRIMER PLUS 课后答案 
使用IDE为window7系统下的VS2010

/*user.h*/#ifndef USERSH_H_#define USERSH_H_#include <string>using std::ostream;namespace VECTOR{         class Vector         {         public:                  enum Mode{RECT,POL};         private:                  double x;                  double y;                  double mag;                  double ang;                  Mode mode;                  void set_mag();                  void set_ang();                  void set_x();                  void set_y();         public:                  Vector();                   ~Vector(){};                  Vector(double n1,double n2, Mode form=RECT);                  void reset(double n1,double n2,Mode form=RECT);                  double xval()const{return x;}                  double yval()const{return y;}                  double magval()const{return mag;}                  double angval()const{return ang;}                  void polar_mode();                  void rect_mode();                   Vector operator +(const Vector & b) const;                  Vector operator -(const Vector & b) const;                  Vector operator -()const;                  Vector operator *(double n) const;                   friend Vector operator * (double n,const Vector & a);                  friend ostream & operator <<(ostream & os,const Vector & v);          };}  #endif

/*userfucntion.cpp*/#include "usersh.h"#include <iostream>#include <cmath>using std::cout;using std::cin;using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::ostream; namespace VECTOR{         const double Rad_to_deg=45.0/atan(1.0);           void Vector::set_mag()         {                  mag=sqrt(x*x+y*y);         }          void Vector::set_ang()         {                  if(x==0.0 && y==0.0)                  {                          ang=0.0;                  }                  else                  {                          ang=atan2(y,x);                  }         }          void Vector::set_x()         {                  x=mag*cos(ang);         }          void Vector::set_y()         {                  y=mag*sin(ang);         }          Vector::Vector()         {                  x=y=mag=ang=0.0;                  mode=RECT;         }          Vector::Vector(double n1,double n2, Mode form/* =RECT */)         {                  mode=form;                  if(form==RECT)                  {                          x=n1;                          y=n2;                          set_ang();                          set_mag();                  }                  else if(form == POL)                  {                          mag=n1;                          ang=n2/Rad_to_deg;                          set_x();                          set_y();                  }                  else                  {                          cout<<"Error,Nothis mode";                          cout<<"Vectorset to 0 \n";                          x=y=mag=ang=0.0;                          mode=RECT;                  }         }          void Vector::reset(double n1,double n2,Mode form/* =RECT */)         {                  mode=form;                  if(form==RECT)                  {                          x=n1;                          y=n2;                          set_ang();                          set_mag();                  }                  else if(form == POL)                  {                          mag=n1;                          ang=n2/Rad_to_deg;                          set_x();                          set_y();                  }                  else                  {                          cout<<"Error,Nothis mode";                          cout<<"Vectorset to 0 \n";                          x=y=mag=ang=0.0;                          mode=RECT;                  }         }          void Vector::polar_mode()         {                  mode=POL;         }          void Vector::rect_mode()         {                  mode=RECT;         }          Vector Vector::operator +(const Vector & b) const         {                  return Vector(x+b.x,y+b.y);         }          Vector Vector::operator -(const Vector & b) const         {                  return Vector(x-b.x,y-b.y);         }          Vector Vector::operator -() const         {                  return Vector(-x,-y);         }          Vector Vector::operator *(double n) const         {                  return Vector(n*x,n*y);         }                 Vector operator * (double n,const Vector & a)         {                  return a*n;         }          ostream & operator << (ostream & os,const Vector & v)         {                  if(v.mode==Vector::RECT)                  {                          os<<"(x,y)="<<v.x<<"  "<<v.y<<'\n';                  }                  else if (v.mode==Vector::POL)                  {                          os<<"(m,a)="<<v.mag<<"  "<<v.ang*Rad_to_deg<<'\n';                  }                  else                  {                          os<<"Error,thisis invalid";                  }                  return os;         }}

/*main*/#include <iostream>#include <Windows.h>#include "usersh.h"#include <string>#include <cstdlib>#include <ctime>#include <fstream>using namespace std; int main(){            using VECTOR::Vector;         srand(time(0));         double direct;         Vector step;         Vector result(0.0,0.0);         unsigned long steps=0;         double target;         double dstep;         ofstream outfile;         outfile.open("MR.txt");          cout<<"entertarget distance:";         while(cin>>target)         {                  cout<<"entersteps length:";                  if(!(cin>>dstep))                  {                          break;                  }                  while(result.magval()<target)                  {                          direct=rand()%360;                          step.reset(dstep,direct,Vector::POL);                          result=result+step;                          outfile<<"NO."<<steps+1<<':'<<result<<endl;                          steps++;                  }                   outfile<<"after"<<steps<<"hasfollow location:\n";                  outfile<<result<<endl;                  result.polar_mode();                  outfile<<"or\n"<<result<<endl;                  outfile<<"averagedistance per step ="                          <<result.magval()/steps<<endl;                  outfile.close();                   cout<<"after"<<steps<<"hasfollow location:\n";                  cout<<result<<endl;                  result.polar_mode();                  cout<<"or\n"<<result<<endl;                  cout<<"averagedistance per step ="                          <<result.magval()/steps<<endl;                  steps=0;                  result.reset(0.0,0.0);                  cout<<"entertarget distance :";         }         cin.clear();          while(cin.get()!='\n')                  continue;           system("pause");         return 0;}


 


 


 

原创粉丝点击