c语言 复数的运算

复数的运算

请用程序实现
用函数编写复数的加法、减法、乘法和除法的运算。

函数定义
// 复数加法
COMPLEX ComplexAdd(const COMPLEX *x, const COMPLEX *y);
// 复数减法
COMPLEX ComplexSub(const COMPLEX *x, const COMPLEX *y);
// 复数乘法
COMPLEX ComplexMul(const COMPLEX *x, const COMPLEX *y);
// 复数除法
COMPLEX ComplexDiv(const COMPLEX *x, const COMPLEX *y);
函数说明
ComplexAdd 将 x 所指复数加上 y 所指复数,函数值为两者相加的和。
ComplexSub 将 x 所指复数减去 y 所指复数,函数值为两者相减的差。
ComplexMul 将 x 所指复数乘以 y 所指复数,函数值为两者相乘的积。
ComplexDiv 将 x 所指复数除以 y 所指复数,函数值为两者相除的商。
要求:当除数为零时,ComplexDiv 函数报告错误,函数值为零。

示例 1
输入
4.2+1.5i
2.5-0.3i
输出
6.7+1.2i
1.7+1.8i
10.95+2.49i
1.58517+0.790221i
示例 2
输入
1.6-3.5i
0+0i
输出
1.6-3.5i
1.6-3.5i
0+0i
Divided by zero!
0+0i
代码如下;

#include <stdio.h>

typedef struct
{
    double rp;
    double ip;
    char op;
}COMPLEX;
// 复数加法
COMPLEX ComplexAdd(const COMPLEX *x, const COMPLEX *y)
{
    COMPLEX complex;
    complex.rp=x->rp+y->rp;
    complex.ip=x->ip+y->ip;
    if(complex.ip>=0)
       complex.op='+';
    return complex;
}

// 复数减法
COMPLEX ComplexSub(const COMPLEX *x, const COMPLEX *y)
{
    COMPLEX complex;
    complex.rp=x->rp-y->rp;
    complex.ip=x->ip-y->ip;
    if(complex.ip>=0)
       complex.op='+';
    return complex;
}

// 复数乘法
COMPLEX ComplexMul(const COMPLEX *x, const COMPLEX *y)
{
    COMPLEX complex;
    complex.rp=x->rp*y->rp+(x->ip*y->ip)*(-1);
    complex.ip=x->rp*y->ip+x->ip*y->rp;
   if(complex.ip>=0)
       complex.op='+';
    return complex;
}
// 复数除法
COMPLEX ComplexDiv(const COMPLEX *x, const COMPLEX *y)
{
    COMPLEX complex;
    if(y->rp==0||y->ip==0)
        printf("Divided by zero!");
    else
    {
        complex.rp=(x->rp*y->rp+x->ip*y->ip)/((y->rp)*(y->rp)+(y->ip)*(y->ip));
        complex.ip=((x->ip*y->rp)-(x->rp*y->ip))/((y->rp)*(y->rp)+(y->ip)*(y->ip));
        if(complex.ip>=0)
       complex.op='+';
        return complex;
    }
}
int main()
{
    COMPLEX a, b, p, q, r, s;
    ComplexInput(&a);
    ComplexInput(&b);
    p = ComplexAdd(&a, &b);
    ComplexOutput(&p);
    putchar('\n');
    q = ComplexSub(&a, &b);
    ComplexOutput(&q);
    putchar('\n');
    r = ComplexMul(&a, &b);
    ComplexOutput(&r);
    putchar('\n');
    s = ComplexDiv(&a, &b);
    ComplexOutput(&s);
    putchar('\n');
    return 0;
}
void ComplexInput(COMPLEX *complex)
{
    double i,j;
    char op;
    scanf("%lf%c%lfi",&i,&op,&j);
    complex->rp=i;
    if(op=='+')
        complex->ip=j;
    else
        complex->ip=-j;
}

void ComplexOutput(const COMPLEX *complex)
{
    if(complex->ip>=0)
        printf("%g%c%gi",complex->rp,complex->op,complex->ip);
    else
        printf("%g%gi",complex->rp,complex->ip);
}

如果代码有误,欢迎大家指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gustmirage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值