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

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

废话少说,直接上代码

#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();
        }
    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaohei07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值