C++primer plus第六版课后编程练习答案11.1
2015-11-30 16:28
477 查看
头文件 #ifndef VECTOR_H_//避免头文件的重定义,如果XX没有被定义 #define VECTOR_H_//就定义XX,删除可使#ifndef与#endif之间的代码不执行 #include<iostream> namespace VECTOR//用来区分名字相同的变量和函数 { class Vector { public: enum Mode{RECT,POL};//Mode枚举名,RECT=0,POL=1 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(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~Vector(); 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 std::ostream &operator<<(std::ostream &os,const Vector & v); }; } #endif
#include<cmath> #include "vector.h" using namespace std; namespace VECTOR { const double Rad_to_deg=45.0/atan(1.0);//atan(1)=45度,求1弧度等于多少度 void Vector::set_mag() { mag=sqrt(x*x+y*y); } void Vector::set_ang() { if(0==x&&y==0) ang=0; else ang=atan2(y,x); } void Vector::set_x() { x=mag*sin(ang); } void Vector::set_y() { y=mag*cos(ang); } Vector::Vector() { x=y=mag=ang=0; } Vector::Vector(double n1,double n2,Mode form) { mode=form; if(mode==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if(mode==POL) { mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd arguement to Vector() --"; cout<<"vector set to 0\n"; x=y=mag=ang=0; mode=RECT; } } void Vector::reset(double n1,double n2,Mode form) { mode=form; if(mode==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if(mode==POL) { mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd arguement to Vector() --"; cout<<"vector set to 0\n"; x=y=mag=ang=0; mode=RECT; } } Vector::~Vector(){} 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<<")"; else if(v.mode==Vector::POL) { os<<"(m,a)=("<<v.mag<<","<<v.ang*Rad_to_deg<<")"; } else os<<"Vector object mode is invalid"; return os; } }
#include<iostream> #include<cstdlib> #include<ctime> #include "vector.h" #include<fstream> #include<windows.h> using namespace std; void main() { using VECTOR::Vector; srand(time(0)); double direction; Vector step; Vector result(0,0); unsigned long steps=0; double target; double dstep; ofstream outfile; outfile.open("1.txt"); cout<<"Enter target distance (q to quit):"; while(cin>>target) { cout<<"Enter step length:"; if(!(cin>>dstep)) break; outfile<<"Target distance:"<<target<<" ,step size: "<<dstep<<endl; outfile<<steps<<": "<<result<<endl; while(result.magval()<target) { direction=rand()%360; step.reset(dstep,direction,Vector::POL); result=result+step; steps++; outfile<<steps<<": "<<result<<endl; } outfile<<"After "<<steps<<" steps,the subject has the following location:\n"; outfile<<result<<endl; result.polar_mode(); outfile<<" or\n"<<result<<endl; outfile<<"Average outward distance per step="<<result.magval()/steps<<endl; steps=0; result.reset(0,0); cout<<"Enter target distance (q to quit):"; } cout<<"Bye!\n"; WinExec( "notepad.exe 1.txt", SW_SHOW );//在c++代码中打开文件 cin.clear(); while(cin.get()!='\n') continue; }
相关文章推荐
- C语言中字符的输入输出以及计算字符个数的方法详解
- C++之外部文件矩阵的导入
- C++返回值优化
- 第十一周项目1 - 二叉树算法验证.cpp
- C++primer plus第六版课后编程练习答案10.8
- 详解C语言中的符号常量、变量与算术表达式
- C++primer plus第六版课后编程练习答案10.7
- C++primer plus第六版课后编程练习答案10.6
- C++中的explicit
- C++primer plus第六版课后编程练习答案10.5
- 64位系统下gcc按照32位编译c程序
- C++primer plus第六版课后编程练习答案10.4
- C语言_冒泡排序
- c++字符串分词
- 循环链表Josephus问题(c,cpp)
- C++primer plus第六版课后编程练习答案10.3
- 《C++ Primer 5th》读书笔记6---再谈初始化
- C++primer plus第六版课后编程练习答案10.2
- C++primer plus第六版课后编程练习答案10.1
- 【C++】位图