5-36 复数四则运算

本题要求编写程序,计算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 <stdio.h>
#include <math.h>
#define EPSILON 0.1
typedef struct {
		double realPart;
		double imaginaryPart;
} COMPLEX;	/* 复数类型 */ 
COMPLEX makeComplex(double r, double i);	/* 构建复数 */ 
void printComplex(COMPLEX c);   /* 输出复数 */ 
void printResult(COMPLEX c);    /* 输出复数 */ 
COMPLEX addComplex(COMPLEX x, COMPLEX y);	/* 复数加法 */ 
COMPLEX subComplex(COMPLEX x, COMPLEX y);	/* 复数减法 */ 
COMPLEX mulComplex(COMPLEX x, COMPLEX y);	/* 复数乘法 */ 
COMPLEX divComplex(COMPLEX x, COMPLEX y);	/* 复数除法 */ 
int main(void) {
    double a1, b1, a2, b2;
    COMPLEX a, b, c;
    scanf("%lf%lf%lf%lf", &a1, &b1, &a2, &b2);
    a = makeComplex(a1, b1);
    b = makeComplex(a2, b2);
    /* 加法 */ 
    printComplex(a);
    printf(" + ");
    printComplex(b);
    printf(" = ");
    c = addComplex(a, b);
    printResult(c);
    /* 减法 */
    printComplex(a);
    printf(" - ");
    printComplex(b);
    printf(" = ");
    c = subComplex(a, b);
    printResult(c);
    /* 乘法 */
    printComplex(a);
    printf(" * ");
    printComplex(b);
    printf(" = ");
    c = mulComplex(a, b);
    printResult(c);
    /* 除法 */
    printComplex(a);
    printf(" / ");
    printComplex(b);
    printf(" = ");
    c = divComplex(a, b);
    printResult(c);
    return 0;
}
COMPLEX makeComplex(double r, double i) {
    COMPLEX temp;
    temp.realPart = r;
    temp.imaginaryPart = i;
    return temp;
}
void printComplex(COMPLEX c) {
    if(c.imaginaryPart >= 0)
        printf("(%.1f+%.1fi)", c.realPart, c.imaginaryPart);
    if(c.imaginaryPart < 0)
        printf("(%.1f%.1fi)", c.realPart, c.imaginaryPart);		    
}
void printResult(COMPLEX c) {	
    if(c.realPart == 0 && c.imaginaryPart == 0)
        printf("%.1f\n", c.realPart);
    if(c.realPart && c.imaginaryPart > 0)
        printf("%.1f+%.1fi\n", c.realPart, c.imaginaryPart);
    if(c.realPart && c.imaginaryPart < 0)
        printf("%.1f%.1fi\n", c.realPart, c.imaginaryPart);
    if(c.realPart && c.imaginaryPart == 0)
        printf("%.1f\n", c.realPart);
    if(c.realPart == 0 && c.imaginaryPart)
        printf("%.1fi\n", c.imaginaryPart);
}
COMPLEX addComplex(COMPLEX x, COMPLEX y) {
    COMPLEX temp;
    temp.realPart = x.realPart + y.realPart;
    if(fabs(temp.realPart) < EPSILON)
		temp.realPart = 0; 
    temp.imaginaryPart = x.imaginaryPart + y.imaginaryPart;
    if(fabs(temp.imaginaryPart) < EPSILON)
		temp.imaginaryPart = 0; 
    return temp;
}
COMPLEX subComplex(COMPLEX x, COMPLEX y) {
    COMPLEX temp;
    temp.realPart = x.realPart - y.realPart;
    if(fabs(temp.realPart) < EPSILON)
		temp.realPart = 0; 
    temp.imaginaryPart = x.imaginaryPart - y.imaginaryPart;
    if(fabs(temp.imaginaryPart) < EPSILON)
		temp.imaginaryPart = 0; 
    return temp;
}
COMPLEX mulComplex(COMPLEX x, COMPLEX y) {
    COMPLEX temp;
    temp.realPart = x.realPart * y.realPart - x.imaginaryPart * y.imaginaryPart;
    if(fabs(temp.realPart) < EPSILON)
		temp.realPart = 0; 
    temp.imaginaryPart = x.realPart * y.imaginaryPart + x.imaginaryPart * y.realPart;
    if(fabs(temp.imaginaryPart) < EPSILON)
		temp.imaginaryPart = 0; 
    return temp;
}
COMPLEX divComplex(COMPLEX x, COMPLEX y) {
    COMPLEX temp;
    double denominator = y.realPart * y.realPart + y.imaginaryPart * y.imaginaryPart;
    temp.realPart = (x.realPart * y.realPart +
                     x.imaginaryPart * y.imaginaryPart) / denominator;
    if(fabs(temp.realPart) < EPSILON)
		temp.realPart = 0; 
    temp.imaginaryPart = (x.imaginaryPart * y.realPart -
                          x.realPart * y.imaginaryPart) / denominator;
    if(fabs(temp.imaginaryPart) < EPSILON)
		temp.imaginaryPart = 0; 
    return temp;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值