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


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
思路:
1.创建加减乘除字符数组ch[4],
2.创建结果字符串数组result[4][20];
3.switch求出各个算法的结果,并把结果以字符串形式存储进入result数组中;
4.根据b,d的正负来确定前边儿的输出形式,并组合输出最终结果;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <math.h>
int main()
{<!-- -->
    char ch[4]={<!-- -->'+','-','*','/'};
    char result[4][20];
    double a,b,c,d;
    double x,y,z;
    int i;
   
    scanf( "%lf %lf %lf %lf", &a,&b,&c,&d );
    for( i=0; i<4; i++ )
 {<!-- -->
            switch(ch[i])
    {<!-- -->
        case '+':
            {<!-- -->
                x = a+c;
                y = b+d;
                break;
            }
        case '-':
            {<!-- -->
                x = a-c;
                y = b-d;
                break;
            }
        case '*':
            {<!-- -->
                x = (a*c) - (b*d);
                y = (b*c) + (a*d);
                break;
            }
        case '/':
            {<!-- -->
                z = pow(c,2)+pow(d,2);
                x = (a*c+b*d)/z;
                y = (b*c-a*d)/z;
                break;
            }
    }
            if( fabs(x)<0.05 && fabs(y)<0.05 )
            sprintf( result[i],"0.0" );
            else if( fabs(x)<0.05 )
            sprintf( result[i],"%.1fi", y );
            else if( fabs(y)<0.05 )
            sprintf( result[i],"%.1f",  x );
            else
            {<!-- -->
                if( y>0 )
                sprintf( result[i],"%.1f+%.1fi", x, y );
                else
                sprintf( result[i],"%.1f%.1fi" , x, y );
            }
        if( b<0 && d<0 )
        printf("(%.1f%.1fi) %c (%.1f%.1fi) = %s", a, b, ch[i], c, d, result[i] );
        else if( b<0 )
        printf("(%.1f%.1fi) %c (%.1f+%.1fi) = %s", a, b, ch[i], c, d, result[i] );
        else if( d<0 )
        printf("(%.1f+%.1fi) %c (%.1f%.1fi) = %s", a, b, ch[i], c, d, result[i] );
        else
        printf("(%.1f+%.1fi) %c (%.1f+%.1fi) = %s", a, b, ch[i], c, d, result[i] );
        if( i<3 )
        printf("\n");
 }
   

    return 0;
}