用类实现的简单复数计算器

废话少说,直接上代码

#include <iostream>
#include <math.h>
#define PI acos(-1)
using namespace std;
class complex
{
    friend complex operator +(complex c1, complex c2);
    friend complex operator -(complex c1, complex c2);
    friend complex operator *(complex c1, complex c2);
    friend complex operator /(complex c1, complex c2);
    friend ostream& operator <<(ostream&, complex& c);
public:
    complex() = default;
    complex(double i1, double i2) :real(i1), imag(i2)  {};
    complex(double i4, double i5, int i3) :mould(i4), angle(i5), flag(i3) {};
    void display(complex c);
    void conversion1(complex& c);
    void conversion2(complex& c);
    
private:
    double real;
    double imag;
    double mould;
    double angle;
    int flag;
};
complex operator +(complex c1, complex c2)
{
    return complex(c1.real+c2.real,c1.imag+c2.imag);
}
complex operator -(complex c1, complex c2)
{
    return complex(c1.real - c2.real, c1.imag - c2.imag);
}
complex operator *(complex c1, complex c2)
{
    return complex(c1.real * c2.real-c1.imag*c2.imag, c1.real * c2.imag + c1.imag * c2.real);
}
complex operator /(complex c1, complex c2)
{
    return complex((c1.real * c2.real + c1.imag * c2.imag)/(c2.real*c2.real+c2.imag*c2.imag), 
        (c2.real * c1.imag - c1.real * c2.imag) / (c2.real * c2.real + c2.imag + c2.imag));
}
ostream& operator <<(ostream& opt, complex& c)
{
    if (c.imag >= 0) {
        opt << "(" << c.real << "+" << c.imag << "i)" << endl;
    }
    if(c.imag<0){
        opt << "(" << c.real << "-" << -c.imag << "i)" << endl;
    }
    return opt;
}
void complex::display(complex c)
{
    cout << c.mould << "∠" << c.angle<<"°" << endl;
}
void complex::conversion1(complex& c)
{
    c.mould = sqrt(c.real * c.real + c.imag * c.imag);
    c.angle = atan(c.imag/ c.real)*180/PI;
}
void complex::conversion2(complex& c)
{
    c.real = c.mould * cos(c.angle * PI /180);
    c.imag = c.mould * sin(c.angle * PI /180);
}
int main()
{
    int a = 1, flagg=1;
    while (a != 0) {
        cout << "输入1、2、3、4分别为执行复数相加、减、乘、除。" << endl;
        cout << "输入5为执行复数转化为模加角,输入6为执行复数模加角转化为一般形式" << endl;
        cout << "输入0为退出。" << endl;
        cout << "输入复数的格式为a b(一般形式或者模+角形式均可)"<<endl;
        cout << "请输入您希望执行的内容:" << endl;
        cin >> a;
        
        if (a>=1 and a<=4) {
            cout << "请选择您输入的格式,1为一般情况,2为模+角情况" << endl;
            cin >> flagg;
        }
        if ((flagg == 1 or flagg == 2) and (a >= 0 and a <= 6)) {
            switch (a)
            {
                double a1, a2, a3, a4;
            case 0:
                cout << "拜了个拜!" << endl;
                break;
            case 1:
                
                cout << "请输入复数1:" << endl;
                cin >> a1 >> a2;
                cout << "请输入复数2:" << endl;
                cin >> a3 >> a4;
                if (flagg == 1) {
                    complex c1(a1, a2), c2(a3, a4);
                    complex c3(c1 + c2);
                    cout << "一般形式为:" << c3;
                    c3.conversion1(c3);
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                if (flagg == 2) {
                    complex c1(a1, a2, 1), c2(a3, a4, 1);
                    c1.conversion2(c1);
                    c2.conversion2(c2);
                    complex c3(c1 + c2);
                    c3.conversion1(c3);
                    cout << "一般形式为:" << c3;
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                break;
            case 2:
                cout << "请输入被减复数1:" << endl;
                cin >> a1 >> a2;
                cout << "请输入减复数2:" << endl;
                cin >> a3 >> a4;
                if (flagg == 1) {
                    complex c1(a1, a2), c2(a3, a4);
                    complex c3(c1 - c2);
                    c3.conversion1(c3);
                    cout << "一般形式为:" << c3;
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                if (flagg == 2) {
                    complex c1(a1, a2, 1), c2(a3, a4, 1);
                    c1.conversion2(c1);
                    c2.conversion2(c2);
                    complex c3(c1 - c2);
                    c3.conversion1(c3);
                    cout << "一般形式为:" << c3;
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                break;
                case 3:
                cout << "请输入复数1:" << endl;
                cin >> a1 >> a2;
                cout << "请输入复数2:" << endl;
                cin >> a3 >> a4;
                if (flagg == 1) {
                    complex c1(a1, a2), c2(a3, a4);
                    complex c3(c1 * c2);
                    c3.conversion1(c3);
                    cout << "一般形式为:" << c3;
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                if (flagg == 2) {
                    complex c1(a1, a2, 1), c2(a3, a4, 1);
                    c1.conversion2(c1);
                    c2.conversion2(c2);
                    complex c3(c1 * c2);
                    c3.conversion1(c3);
                    cout << "一般形式为:" << c3;
                    cout << "模加角形式为:";
                    c3.display(c3);
                }
                break;
                case 4:
                    cout << "请输入复数1:" << endl;
                    cin >> a1 >> a2;
                    cout << "请输入复数2:" << endl;
                    cin >> a3 >> a4;
                    if (flagg == 1) {
                        complex c1(a1, a2), c2(a3, a4);
                        complex c3(c1 / c2);
                        c3.conversion1(c3);
                        cout << "一般形式为:" << c3;
                        cout << "模加角形式为:";
                        c3.display(c3);
                    }
                    if (flagg == 2) {
                        complex c1(a1, a2, 1), c2(a3, a4, 1);
                        c1.conversion2(c1);
                        c2.conversion2(c2);
                        complex c3(c1 / c2);
                        c3.conversion1(c3);
                        cout << "一般形式为:" << c3;
                        cout << "模加角形式为:";
                        c3.display(c3);
                    }
                    break;
                case 5:
                    cout << "请输入复数:" << endl;
                    cin >> a1 >> a2;
                    complex c6(a1, a2);
                    c6.conversion1(c6);
                    cout << "模加角形式为:";
                    c6.display(c6);
                    break;
                case 6:
                    cout << "请输入复数:" << endl;
                    cin >> a1 >> a2;
                    complex c7(a1, a2,1);
                    c7.conversion2(c7);
                    cout << "一般形式为:" << c7;
                    break;
            }
            cout << "本轮程序执行完毕" << endl;
            cout << endl;
            cin.clear();
        }
    }
}

c++复数计算器(四则运算+坐标模长、角度表示)相关推荐

  1. 在平面内,已知矩形的中心点坐标、长、宽和倾斜角度,求矩形四个角点的坐标

    实现思路: 1.已知矩形的中心点坐标.长和宽,求矩形在不旋转的情况下矩形的四个顶点坐标: 2.再求按逆时针旋转一定角度后的四个点坐标: (在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度 ...

  2. c语言解二次方程复数计算器,黑暗计算器(复数,解方程)

    这是一款兼容性高,功能强大,拥有近50个函数,支持复数运算和解方程且开源的科学计算器,另外还添加了进制转换,大数运算,大写数字等功能.虽然还没有完善,但我会在上学的过程中利用业余时间继续完善它的. 目 ...

  3. 【C++ 程序】 TVJ Complex Calculator (v 2.2) 复数计算器

    Contents 简介 应用程序下载 Help What is new in v 2.2 Simple test 输入要求 程序 Main.cpp Complex.h & Complex.cp ...

  4. c++小项目练习之复数计算器

    准备了一个月的考试终于结束了.总结一下这一个月学到的理论知识,规划一下1月的计划.昨天敲了一天的代码.复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作.纯代码后面再做详 ...

  5. 矢量模长计算(C++)

    [问题描述] 设计一个MyVector(矢量)类,在类中定义整型成员变量x,y,z代表矢量在三维笛卡尔坐标系上的坐标:成员函数包含构造函数.返回坐标值的函数getX(), getY()和getZ(), ...

  6. Java 开发之 根据坐标计算长度、角度、位置等数据

    Java 开发之 根据坐标计算长度.角度.位置等数据 坐标计算 其实也相当于再做三角运算, 每一个坐标在坐标图中都可视作三角形的一个顶角 有了这张图, 大家就能清晰的想象出一个三角形,然后根据三角函数 ...

  7. 自适应反步控制matlab,刚体航天器的反步自适应滑模大角度姿态机动控制方法与流程...

    本发明涉及刚体航天器,尤其涉及一种刚体航天器的反步自适应滑模 大角度姿态机动控制方法. 背景技术: 传统的姿态控制算法中,不考虑航天器的转动惯量存在摄动,并且传 统的滑模控制算法存在抖振问题,瞬态响应 ...

  8. python元素平方和,模长

    平方和方法1 numpy支持平方: import numpy as npa=np.array([[1,2],[3,4]]) print(np.sum(a**2)) 平方和方法2: 先点乘,在求和 im ...

  9. 【C语言】复数的四则运算与复数运算的头文件

    目录 一.复数的四则运算 二.复数的头文件#include<complex.h> 三.一些碎碎念 一.复数的四则运算 (1)计算方法 加法:(a+bi)+(c+di)=(a+c)+(c+d ...

最新文章

  1. 问一下,线程池里面到底该设置多少个线程?
  2. 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
  3. 人工智能全产业链深度透析--(综合)
  4. php怎么将网页另存为mht代码,mht转html代码(php)
  5. 常见面试算法:朴素贝叶斯
  6. Deepin下安装搭建latex编写环境
  7. java对象说明 PO,BO,VO,DTO,POJO,DAO,Entity
  8. amos调节变量怎么画_结构方程模型建模思路及Amos操作--调节变量效果确定(二)(还是满满都是骚操作)...
  9. QCIF CIF 2CIF 4CIF 普及
  10. 自编小游戏(加强版)
  11. 手把手Verilog HDL同步Vaild-Ready握手FIFO机制
  12. python关键词排名_全自动监控网站关键词排名(Python实现)
  13. Git - GitWeb
  14. VUE整合信通身份证阅读器返回读取到的数据或将身份证图片返回
  15. mongodb聚合联系题目及参考答案
  16. 智能床、智能床垫、智能睡眠监测器的调研分析
  17. Excel选中区域全都除以某一个数
  18. Tabular系列之问题1:如何利用其他人的账号进行权限测试?
  19. 有shsh/plist,不知道如何转shsh2?只需要4步
  20. 从前端开始——01网页三剑客(html)

热门文章

  1. 清华大学计算机学院校友网,轮椅上的清华博士毕业了,刷屏的还有她...
  2. 清华大学 计算机科学 杨峰,计算机的“诗与远方”
  3. 浙江大学,最新任命!
  4. 2017沈阳第二十届国际供热通风空调及舒适家居展览会会刊(参展商名录)
  5. 数论之互质与欧拉函数
  6. python ffmpeg剪辑视频_用ffmpeg快速剪切和合并视频
  7. Hugo - Markdown 换行处理
  8. access团员人数公式_2012年计算机二级Access第三十二套上机试题及答案详解
  9. MySQL服务器性能(通过Sysbench测试cpu、io、内存以及mysql服务等)
  10. 【C++】C++STL标准模板库