当前位置: 首页 > news >正文

【C++ Primer Plus习题】11.1

问题:

在这里插入图片描述
在这里插入图片描述
这里是引用
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include <fstream>
#include "Vector.h"
#include <time.h>
using namespace std;
using namespace VECTOR;int main()
{ofstream fout;fout.open("randwalk.txt");srand(time(0));double direction;Vector step;Vector result(0.0, 0.0);unsigned long steps = 0;double target;double dstep;cout << "请输入目标距离(q结束):";while (cin>>target&&cin.get()!='q'){cout << "请输入步长:";if (!(cin >> dstep))break;fout << "目标距离: " << target << ", 步长: " << dstep << endl;while (result.magval()<target){fout << steps << " : " << result << endl;direction = rand() % 360;step.reset(dstep, direction, Vector::POL);result =result+step;steps++;}cout << "经过 " << steps << "步,实验对象的位置如下:\n";cout << result << endl;fout << "经过 " << steps << "步,实验对象的位置如下:\n";fout << result << endl;result.polar_mode();cout << " 或者\n" << result << endl;cout << "每一步向外的平均距离 = " << result.magval() / steps << endl;fout << " 或者\n" << result << endl;fout << "每一步向外的平均距离 = " << result.magval() / steps << endl;steps = 0;result.reset(0.0, 0.0);cout << "请输入目标距离(q结束):";}cout << "Bye!\n";fout.close();return 0;
}

Vector.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);};}

Vector.cpp

#include "Vector.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日15:02:35

http://www.lryc.cn/news/431574.html

相关文章:

  • [数据库][oracle]ORACLE EXP/IMP的使用详解
  • 中国各银行流动性比例数据(2000-2022年)
  • MACOS安装配置前端开发环境
  • Docker 配置国内镜像源
  • AI模块在人工智能中扮演着什么样的角色
  • VM Workstation虚拟机AlmaLinux 9.4操作系统安装(桌面版安装详细教程)(宝塔面板的安装),填补CentOS终止支持维护的空白
  • 【学习笔记】卫星通信NTN 3GPP标准化进展分析(三)- 3GPP Release17 内容
  • 【SQL】常见语句合集
  • Cozer必备!一站式解锁扣子全网最全插件集锦(三)
  • 1-2宿主环境
  • Java进阶13讲__第九讲
  • 上海市计算机学会竞赛平台2024年8月月赛丙组等差数列的素性
  • VR虚拟展厅的应用场景有哪些?
  • Go 语言版本管理——Goenv
  • C#中的各种画刷, PathGradientBrush、线性渐变(LinearGradientBrush)和径向渐变的区别
  • 如何在Mac中修改pip的镜像源
  • MySQL你必须知道的事
  • Ceph RBD使用
  • Spark MLlib模型训练—回归算法 Random forest regression
  • 华为OD机试真题-数大雁-2024年OD统一考试(E卷)
  • Oracle数据迁移:导出与导入的详细指南
  • SpringBoot实现前后端传输加密设计
  • X 射线测厚仪-高效精准,厚度测量的卓越之选
  • 10款好用的文件加密软件排行榜|文件加密管理软件推荐(合集篇)
  • 服务器蓝屏该怎么办
  • Elasticsearch:使用 inference API 进行语义搜索
  • PVE开启核显直通
  • 使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍
  • Obsidian git sync error / Obsidian git 同步失敗
  • 谷歌英文SEO外链如何做?