【C++ Primer Plus习题】11.1

news2024/11/15 17:55:16

问题:

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

解答:
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.coloradmin.cn/o/2106962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

file | 某文件夹【解耦合】下的文件查找功能实现及功能单元测试

文件查找工具 概要思路OS模块 --- 学习版os.getcwd()os.path.dirname(os.getcwd())os.path.dirname() 和 os.path.basename() OS模块 — 实战版单元测试解耦合 概要 梳理业务主逻辑&#xff1a; 查看存放被采集JSON数据的文件夹内的文件列表【所有 包含文件夹下的文件夹下的文…

idea添加本地环境执行模版

用Flink的环境执行时&#xff0c;因为最后会打包放服务器&#xff0c;所以有些jar包将不会打包上传&#xff0c;这些jar包用<scope>provided</scope>标记 所以这些jar包在本地运行时也会不提供&#xff0c;为了程序在本地能跑&#xff0c;我们每次执行是需手动添加…

2024跨境必备的软件-产品优化AI智能工具,支持Shopee、TikTok Shop、TEMU、Lazada等

卖家朋友们&#xff0c;你是否还在用图片优化软件一张张修改产品图&#xff1f;改完还要绞尽脑汁思考如何才能写出爆款Listing&#xff1f;接着又要继续头疼图片翻译等问题&#xff1f; 一个产品优化完至少需要两三个小时&#xff0c;尤其对于多平台多站点的卖家朋友来说&…

利用正则表达式从字符串中提取浮点数

在 Python 中&#xff0c;使用正则表达式可以非常方便地从字符串中提取浮点数。Python 的 re 模块提供了正则表达式支持。下面是如何使用正则表达式提取浮点数的示例。 1、问题背景 在开发过程中&#xff0c;有时候我们需要从字符串中提取浮点数&#xff0c;例如从 HTML 代码中…

vs2022 如何去掉 错误|警告的波形曲线 绿色波浪线

如图&#xff1a; 去不去都一样&#xff0c;只是看着不舒服&#xff0c;相当不爽 工具→选项→文本编辑器→显示错误波形曲线&#xff0c;把前的√去掉&#xff0c;按确定 清爽多了&#xff0c;虽然没啥卵用 。。。

泛微OA主流程节点设置子流程归档后主流程自动跳转下一个节点,子流程已归档主流程不自动跳转

⭐️如果对你有用的话&#xff0c;希望可以点点赞&#xff0c;感谢了⭐️ 主流程节点已设置触发的子流程归档后自动跳转下个节点 当子流程归档后主流程不自动跳转下个节点 是什么问题&#xff1f; 主流程节点中存在必填字段中有空值&#xff0c;需要检查主流程节点排查把空值…

MSSQL数据库安全配置

预备知识 1、数据库安全的概念 对任何企业组织来说,数据的安全性最为重要。安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到数据库,并访问数据以及对数据库对象实施各种权限范围内的操作,但是要拒绝所有的非授权用户的非法操作。因此安全性管理与用户管理是…

开学季好物分享!揭秘学霸们都在用的神器

一年一度的大学入学又开始了&#xff0c;一群充满朝气&#xff0c;怀着好奇的准大学生准备步入大学的校园。每次开学都看到大家拎着大包小包的行李&#xff0c;开学后快递站山人山海&#xff0c;看完这篇开学季好物分享&#xff01;揭秘学霸们都在用的神器&#xff0c;教你快人…

满誉而归 | 2024物联网IOTE展·人工智能AGIC展完美收官

引言&#xff1a; 随着物联网技术的飞速发展&#xff0c;2024年深圳物联网IOTE展会成为了全球科技界瞩目的焦点。北京宇音天下科技有限公司作为语音技术领域的先锋&#xff0c;公司在此次展会上展出了多款创新产品和解决方案&#xff0c;旨在通过尖端科技&#xff0c;推动智能生…

数据库太慢跑崩的一大罪魁

就是非常不起眼的帐号去重计数&#xff0c;用 SQL 写就是 COUNT(DISTINCT …)。 帐号去重计数在商业分析中很常见也有重要的业务意义。这里的帐号可能是用户 ID、银行帐户、手机号、车牌号、…。计算逻辑基本一样&#xff0c;就是从某个时段的历史数据中统计出有多少个帐号满足…

k8s的Ingress控制器安装

Ingress文档地址&#xff1a;Ingress文档 1.安装helm 官网地址&#xff1a;helm官网安装 wget https://get.helm.sh/helm-v3.2.3-linux.amd64.tar.gz tar -zxvf helm-v3.2.3-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/ rootmaster01:~# helm version version.B…

​覆盖90%开发场景的《Flutter开发手册》​

哈喽&#xff0c;我是老刘 我本人是带客户端团队的&#xff0c;带着团队切换到Flutter上也已经差不多6年了。 但也不是只写客户端App。基于Flutter来说&#xff0c;也写过桌面端、Web端程序。 但是坦白说&#xff0c;真没有一个Flutter项目是同时覆盖6个平台的。 为啥呢&…

分布式版本管理工具——Git拉取Github项目到本地仓库

Git拉取&#xff08;下载&#xff09;github项目到本地仓库 一、前言二、拉取github项目至本地三、结束语 一、前言 不得不说&#xff0c;如果懂得利用好Git以及github&#xff0c;能够在很大程度上帮助到我们的日常学习与工作&#xff0c;这里我简单的给大家介绍如何使用Git下…

内部类(定义在类的内部)

a.成员内部类&#xff08;Inner Class&#xff09; 1.不能单独存在&#xff0c;必须依附于外部类。 2.Outer.Inner inner outer.new Inner(); 3.内部类可以访问当前外部类的private属性和方法&#xff0c;可以用”外部类名.this“访问外部实例的属性和方法。 …

Windows键盘快捷方式

键盘快捷方式是两个或多个键的组合&#xff0c;可用于执行通常需要鼠标或其他指针设备才能执行的任务。 使用键盘快捷方式你可以更轻松地与电脑进行交互&#xff0c;从而在使用 Windows 和其他应用时节省时间和精力。 大多数应用还提供加速键&#xff0c;以让你能够更轻松地使…

机器人笛卡尔空间轨迹规划原理与MATLAB实现

机器人笛卡尔空间轨迹规划是指在给定的笛卡尔坐标系&#xff08;通常是三维空间坐标系&#xff09;中规划机器人的末端执行器&#xff08;如抓手、焊枪等&#xff09;的移动路径。这种规划方式直观且易于理解&#xff0c;因为它直接关联到任务空间中机器人的位置和姿态。下面将…

分享购买率拉满的8个商品详情页设计技巧!

电子商务网站的商品详情页是商家和设计师关注的重点之一。这一页面在用户决策是否购买商品方面发挥着至关重要的作用。如果一个优质商品没有配套有效的详情页&#xff0c;其转化率将会显著下降&#xff0c;从而影响流量和销量&#xff0c;最终可能导致店铺的淘汰。无论销售何种…

[ComfyUI]Flux​:不花钱免费白嫖最强反推JoyCaption​,仅需几步无门槛轻松搞定

大家好我是极客菌&#xff01;&#xff01;&#xff01; 今天文章主题将为大家介绍一款优秀的图像反推模型&#xff1a;Joy Caption。这是由作者Fancy Feast开发的Joy Caption模型&#xff0c;是在谷歌的SigLIP模型和Meta的最新Llama3.1 模型的基础之上&#xff0c;使用Adapte…

数学建模竞赛论文写作方法

数模竞赛论文结构剖析 摘要问题重述模型假设符号说明问题分析模型建立模型求解结果及分析检验与推广模型评价参考文献附录 摘要 摘要一般应包括&#xff1a; 用一两句话说明原题中要求解决的问题明确说明建立了什么模型&#xff0c;在数学上属于什么类型&#xff0c;建模的…

Spring Boot技术构建的创新在线拍卖系统

系统测试 1.1系统测试的目的 程序设计不能保证没有错误&#xff0c;这是一个开发过程&#xff0c;在错误或错误的过程中都是难以避免的。虽然这是不可避免的&#xff0c;但我们不能使这些错误始终存在于系统中&#xff0c;错误可能会造成无法估量的后果&#xff0c;如系统崩溃&…