编程题 7-36 复数四则运算【PAT】

编程练习题目集目录

题目

  计算 2 2 2 个复数的和、差、积、商。

输入格式

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

输出格式

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

题解

解题思路

  首先输入四个数字,然后先输出对应的 + 、 − 、 ∗ 、 / +、-、*、/ +/ 四个运算式子,最后对应的函数分别进行 + 、 − 、 ∗ 、 / +、-、*、/ +/ 运算,讲运算出来的虚部和实部传入一个函数,根据题目要求,首先判断虚部和实部是否为 0 0 0,如果虚部为 0 0 0 则直接输出实部;如果实部为 0 0 0, 则输出虚部;如果都为 0 0 0,则输出 0.0 0.0 0.0;如果都不为 0 0 0,则将 + 、 − 、 ∗ 、 / +、-、*、/ +/ 运算后的四个答案分别输出即可。

完整代码

#include<string>
#include<iostream>
using namespace std;

string op1, op2;			// 控制打印时的加减符号输出
double a1, b1, a2, b2;		// 两个复数的四个数

void symbol()				// 控制打印时的加减符号输出
{
    
    
    if (b1 >= 0)
        op1 = "+";
    else
        op1 = "";
    if (b2 >= 0)
        op2 = "+";
    else
        op2 = "";
}

void Output(double real, double imag)	    // 控制结果输出函数
{
    
    
    cout.precision(1);					// 控制输出浮点数的精确度
    if ((int)(real * 10) == 0)			    // 实部为0
    {
    
    
        if ((int)(imag * 10) == 0)		    // 实部和虚部都是0
            cout << 0.0;
        else
            cout << fixed << imag << 'i';
    }
    else if ((int)(imag * 10) == 0)		    // 虚部为0
        cout << fixed << real;
    else
    {
    
    
        cout << fixed << real;
        if (imag >= 0)
            cout << '+';
        cout << fixed << imag << 'i';
    }
}

void Add()				// 加法计算:(a+bi)+(c+di)=(a+c)+(b+d)i
{
    
    
    double real = a1 + a2;
    double imag = b1 + b2;
    Output(real, imag);
}

void  Subtraction()		// 减法计算: (a+bi)-(c+di)=(a-c)+(b-d)i
{
    
    
    double real = a1 - a2;
    double imag = b1 - b2;
    Output(real, imag);
}

void Multiply()			// 乘法计算:(a+bi)(c+di)=(ac-bd)+(bc+ad)i
{
    
    
    double real = a1 * a2 - b1 * b2;
    double imag = a1 * b2 + a2 * b1;
    Output(real, imag);
}

void Divide()			// 除法计算:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +((bc-ad)/(c2+d2))i
{
    
    
    double deno = a2 * a2 + b2 * b2;
    double real = (a1*a2 + b1 * b2) / deno;
    double imag = (a2*b1 - a1 * b2) / deno;
    Output(real, imag);
}

int main(void)
{
    
    
    cout << "请输入四个数字:";             // 提交时注释此行
    cin >> a1 >> b1 >> a2 >> b2;
    symbol();
    cout.precision(1);		        // 控制输出浮点数的精确度
    cout << fixed << '(' << a1 << op1 << b1 << "i) " << "+ (" << a2 << op2 << b2 << "i) = ";
    Add(); cout << endl;
    cout << fixed << '(' << a1 << op1 << b1 << "i) " << "- (" << a2 << op2 << b2 << "i) = ";
    Subtraction(); cout << endl;
    cout << fixed << '(' << a1 << op1 << b1 << "i) " << "* (" << a2 << op2 << b2 << "i) = ";
    Multiply(); cout << endl;
    cout << fixed << '(' << a1 << op1 << b1 << "i) " << "/ (" << a2 << op2 << b2 << "i) = ";
    Divide(); cout << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41918107/article/details/143499809