欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【C++ Primer Plus习题】11.3

【C++ Primer Plus习题】11.3

2025/11/2 22:15:13 来源:https://blog.csdn.net/qq_74047911/article/details/141933880  浏览:    关键词:【C++ Primer Plus习题】11.3

问题:

这里是引用

解答:
main.cpp

#include <iostream>
#include <cstdlib>
#include <ctime>
#include "vect.h"using namespace std;
using namespace VECTOR;int main()
{srand(time(0));double direction;Vector step;Vector result(0.0, 0.0);unsigned long steps = 0;double target;double dstep;int max = 0;int min = INT_MAX;int sum = 0;int count = 0;cout << "请输入实验次数:";cin >> count;for (int i = 0; i < count; i++){cout << "请输入第"<<i+1<<"次实验目标距离(按q结束) :";cin >> target;cout << "请输入第" << i + 1 << "次实验步长: ";if (!(cin >> dstep))break;while (result.magval() < target){direction = rand() % 360;step.reset(dstep, direction, Vector::POL);result = result + step;steps++;}sum += steps;if (max < steps){max = steps;}if (min > steps){min = steps;}cout << "经过 " << steps << " 步,这实验对象位置如下:" << endl;cout << result << endl;result.polar_mode();cout << " 或者\n" << result << endl;cout << "平均每外出一步的距离为:" << result.magval() / steps << endl;steps = 0;result.reset(0.0, 0.0);}cout << count << "次实验的平均步数为:" << sum / count << endl;cout << count << "次实验的最高步数为:" << max << endl;cout << count << "次实验的最低步数为:" << min << endl;cout << "Bye!" << endl;return 0;
}

vect.h

#pragma once
#include <iostream>
using namespace std;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(double n1, double n2, Mode form = RECT);void reset(double n1, double n2, Mode from = 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 ostream& operator<<(ostream& os, const Vector& v);};}

vect.cpp

#include "vect.h"
#include <cmath>namespace VECTOR
{const double Rad_to_deg = 45.0 / atan(1.0);//45/(π/4)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){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 << "错误!" << endl;x = y = mag = ang = 0.0;mode = RECT;}}void Vector::reset(double n1, double n2, Mode from){mode = from;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 << "错误!" << endl;x = y = mag = ang = 0.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(x * n, y * n);}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;}}

运行结果:
在这里插入图片描述

考查点:

  • 最大最小平均值!

注意:

  • 当在循环中,不好赋值时
    在这里插入图片描述

2024年9月5日16:11:53

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词