【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;}
阅读全文
0 0
- C++primer plus第六版课后编程练习答案11.1
- 【11.1】c++ primer plus 课后编程答案
- C++PRIMER PLUS第六版课后编程答案 4.1-4.5
- C++PRIMER PLUS第六版课后编程答案 4.6-4.10
- C++PRIMER PLUS第六版课后编程答案 5.1-5.5
- C++PRIMER PLUS第六版课后编程答案 5.6-510
- C++primer plus第六版课后编程题答案 6.1
- C++primer plus第六版课后编程题答案 6.2
- C++primer plus第六版课后编程题答案 6.3
- C++primer plus第六版课后编程题答案 6.4
- C++primer plus第六版课后编程题答案 6.5
- C++primer plus第六版课后编程题答案 6.6
- C++primer plus第六版课后编程题答案 6.7
- C++primer plus第六版课后编程题答案 6.8
- C++primer plus第六版课后编程题答案 6.9
- C++primer plus第六版课后编程题答案7.1
- C++primer plus第六版课后编程题答案7.2
- C++primer plus第六版课后编程题答案7.3
- 宝岛探险深度优先搜索(着色法)
- mysql5.7修改密码ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- Longest Palindromic Subsequence
- 设计模式
- 程序员金典编程题2
- 【11.1】c++ primer plus 课后编程答案
- java swing 记事本
- Image转BufferedImage并提取像素进行颜色空间转换
- c++标准输入流
- 【11.3】c++ primer plus 课后编程答案
- sklearn包中的分析算法对 数据进行处理
- android RecyclerView自适应高度的LayoutManager
- 在Centos7 云服务器上配置远程数据库
- 106-多播地址