7-14 复数四则运算 (15 分)

7-14 复数四则运算 (15 分)

本题要求编写程序,计算2个复数的和、差、积、商。

输入格式:

输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。

输出格式:

分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。

输入样例1:

2 3.08 -2.04 5.06

结尾无空行

输出样例1:

(2.0+3.1i) + (-2.0+5.1i) = 8.1i
(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i
(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i
(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i

结尾无空行

输入样例2:

1 1 -1 -1.01

输出样例2:

(1.0+1.0i) + (-1.0-1.0i) = 0.0
(1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i
(1.0+1.0i) * (-1.0-1.0i) = -2.0i
(1.0+1.0i) / (-1.0-1.0i) = -1.0
#include<iostream>
using namespace std;

//总结:结构体与函数
//通过本题我主要学到了 函数的封装  
//如:打印式子的封装,这样做的好处是可以节省相似的重复操作,更高效


struct fushu
{
    double a;//实部
    double b;//虚部
}c[66];

void jia();//加法
void jian();//减法
void chen();//乘法
void chu();//除法
void shizi(double a, double b);//打印式子
void ans(double a, double b);//打印结果

int main()
{
    cin >> c[1].a >> c[1].b >> c[2].a >> c[2].b;
    jia();
    jian();
    chen();
    chu();
}
void jia()
{
    double a = c[1].a + c[2].a;
    double b = c[1].b + c[2].b;
    shizi(c[1].a,c[1].b);
    cout << " + ";
    shizi(c[2].a,c[2].b);
    cout << " = ";
    ans(a,b);
    cout << endl;
}
void jian()
{
    double a = c[1].a - c[2].a;
    double b = c[1].b - c[2].b;
    shizi(c[1].a,c[1].b);
    cout << " - ";
    shizi(c[2].a,c[2].b);
    cout << " = ";
    ans(a,b);
    cout << endl;
}
void chen()
{
    double a = c[1].a*c[2].a - c[1].b*c[2].b;
    double b = c[1].a*c[2].b + c[1].b*c[2].a;
    shizi(c[1].a,c[1].b);
    cout << " * ";
    shizi(c[2].a,c[2].b);
    cout << " = ";
    ans(a,b);
    cout << endl;
}
void chu()
{
    double a = (c[1].a*c[2].a + c[1].b*c[2].b)/(c[2].a*c[2].a + c[2].b*c[2].b);
    double b = (c[1].b*c[2].a - c[1].a*c[2].b)/(c[2].a*c[2].a +c[2].b*c[2].b);
    shizi(c[1].a,c[1].b);
    cout << " / ";
    shizi(c[2].a,c[2].b);
    cout << " = ";
    ans(a,b);
    cout << endl;
}
void shizi(double a, double b)//打印式子
{
    if(b < 0)//b 小于0 不用打加号
    {
        printf("(%.1lf%.1lfi)", a, b);
    }
    else
    {
        printf("(%.1lf+%.1lfi)", a, b);
    }
}

void ans(double a, double b)//打印结果的式子
{
    //先判断存在a,b的存在
    //虚部不存在,只输出实部
    if(b>=-0.05 &&b <= 0.05)
    {
        printf("%.1lf", a);
    }
    else if(a>=-0.05 && a <=0.05)//实部不存在
    {
        printf("%.1lfi", b);
    }
    //到这里 说明a,b都存在
    else if(b < 0)//虚部小于0,不用打加号
    {
        printf("%.1lf%.1lfi", a, b);
    }
    else
    {
        printf("%.1lf+%.1lfi",a, b);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值