PAT_B_结构-06. 复数四则运算(15)

来源:互联网 发布:网络恶意诽谤刑法 编辑:程序博客网 时间:2024/05/30 22:51

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

输入格式:

输入在一行中按照“a1 b1 a2 b2”的格式给出2个复数C1=a1+b1*i和C2=a2+b2*i的实部和虚部。题目保证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 Data{    double s;    double x;};double abs(double n){    if (n<0) {        return -n;    }    else    {        return n;    }}void friter(double &x){    if (x>0) {        x=(double)((int)((x+0.05)*10))/10;    }    else    {        x=(double)((int)((x-0.05)*10))/10;    }}char operators(double n){    if (n<0) {                return '-';    }    else    {        return '+';    }}int main(int argc, const char * argv[]){        Data a,b,pa,pb;   char operatora,operatorb;        scanf("%lf %lf %lf %lf",&a.s,&a.x,&b.s,&b.x);        operatora=operators(a.x);    operatorb=operators(b.x);        pa=a;    pb=b;        pa.x=abs(pa.x);    pb.x=abs(pb.x);        friter(pa.s);    friter(pa.x);    friter(pb.s);    friter(pb.x);        for (int i=0; i<4; i++) {               Data result;        char opera=0;                switch (i) {            case 0:                opera='+';                result.x=a.x+b.x;                result.s=a.s+b.s;                break;            case 1:                opera='-';                result.x=a.x-b.x;                result.s=a.s-b.s;                break;            case 2:                opera='*';                result.x=a.s*b.x+a.x*b.s;                result.s=a.s*b.s-a.x*b.x;                break;            case 3:                opera='/';                result.x=(a.x*b.s-a.s*b.x)/(b.x*b.x+b.s*b.s);                result.s=(a.s*b.s+a.x*b.x)/(b.x*b.x+b.s*b.s);                break;            default:                break;        }                friter(result.x);        friter(result.s);                if (result.x!=0&&result.s!=0) {            if (result.x>0) {                                printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf+%.1fi\n",pa.s,operatora,pa.x,opera,pb.s,operatorb,pb.x,result.s,result.x);                            }            else            {                printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf%.1fi\n",pa.s,operatora,pa.x,opera,pb.s,operatorb,pb.x,result.s,result.x);            }                    }        else if(result.x==0&&result.s==0)        {            //测试点2            printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = 0.0\n",pa.s,operatora,pa.x,opera,pb.s,operatorb,pb.x);        }        else if(result.x==0)        {            //测试点4            printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf\n",pa.s,operatora,pa.x,opera,pb.s,operatorb,pb.x,result.s);        }        else        {            //测试点2            printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lfi\n",pa.s,operatora,pa.x,opera,pb.s,operatorb,pb.x,result.x);        }            }        return 0;}



0 0
原创粉丝点击