复数的运算
请用程序实现
用函数编写复数的加法、减法、乘法和除法的运算。
函数定义
// 复数加法
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);
}
如果代码有误,欢迎大家指正。