zoukankan      html  css  js  c++  java
  • 7-36 复数四则运算

    7-36 复数四则运算(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

    思路:这题让我去学了下高中的数学,做题的时候注意本题有样例可知进行了四舍五入的做法;所以不能用a==0或者b==0(当然如果你已经做了处理的的话 );还有在前面等号前面看起来固定的输出,千万不要去偷懒!
    提醒一下abs()是整数的绝对值,fabs()是浮点型的绝对值。最重要的事情要说了,第三个测试点纯实数运算,当虚部等于零的时候输出时前面也要加正号!!
    #include<stdio.h>
    #include<math.h>
    #include<iostream>
    using namespace std;
    double a1, b1, a2, b2;
    void ccout(double a,char c, double b)
    {
        
        if (b1 >= 0 && (b2 >=0))                    //正常人都不会在这儿卡三小时,注意等号!!!/哭死
            printf("(%.1lf+%.1lfi) %c (%.1lf+%.1lfi) = ", a1, b1, c, a2, b2);
        else if ((b1 >= 0) && (b2 < 0))
            printf("(%.1lf+%.1lfi) %c (%.1lf%.1lfi) = ", a1, b1, c, a2, b2);
        else if ((b1<0) && (b2 >= 0))
            printf("(%.1lf%.1lfi) %c (%.1lf+%.1lfi) = ", a1, b1, c, a2, b2);
        else 
            printf("(%.1lf%.1lfi) %c (%.1lf%.1lfi) = ", a1, b1, c, a2, b2);
    
        if (fabs(a)<0.1 && fabs(b)<0.1) { printf("0.0
    "); return; }
    
        int flag = 0;                        //用来标记看是否实部有输出,好解决虚部的符号问题
        if (fabs(a)>=0.1)
        {
            printf("%.1lf", a);
            flag++;
        }
        if (fabs(b)>=0.1){
            if (flag && b > 0.0)printf("+%.1lfi", b);
            else printf("%.1lfi", b);
        }
        cout << endl;                //无论什么结果都要输出回车
    }
    int main()
    {
        
        cin >> a1 >> b1 >> a2 >> b2;
    
        double a, b;
        //加法
        a = a1 + a2;
        b = b1 + b2;
        ccout(a, '+', b);
        //减法
        a = a1 - a2;
        b = b1 - b2;
        ccout(a, '-', b);
        //乘法
        a = a1*a2 - b1*b2;
        b = a1*b2 + a2*b1;
        ccout(a, '*', b);
        //除法
        a = (a1*a2 + b1*b2) / (a2*a2 + b2*b2);
        b = (a2*b1 - a1*b2) / (a2*a2 + b2*b2);
        ccout(a, '/', b);
    
        return 0;
    }



  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/zengguoqiang/p/8338701.html
Copyright © 2011-2022 走看看