問題描述
編程實現兩個複數的運算。
(2)複數之間的加法、減法、乘法和除法分別用不用的函數來實現。
(3)必須使用結構體指針的方法把函數的計算結果返回。
說明:用戶輸入:運算符號(+,-,*,/) a b c d.
輸出:a+bi,輸出時不管a,b是小於0或等於0都按該格式輸出,輸出時a,b都保留兩位。
樣例輸入
- 2.5 3.6 1.5 4.9樣例輸出
1.00+-1.30i
代碼
#include <stdio.h>
struct complex {
double real;
double image;
};
complex res;
complex *add(complex a, complex b)
{
res.real = a.real + b.real;
res.image = a.image + b.image;
return &res;
}
complex *sub(complex a, complex b)
{
res.real = a.real - b.real;
res.image = a.image - b.image;
return &res;
}
complex *mul(complex a, complex b)
{
res.real = a.real * b.real - a.image * b.image;
res.image = a.real * b.image + a.image * b.real;
return &res;
}
complex *div(complex a, complex b)
{
res.real = (a.real * b.real + a.image * b.image) / (b.real * b.real + b.image * b.image);
res.image = (a.image * b.real - a.real * b.image) / (b.real * b.real + b.image * b.image);
return &res;
}
void print(complex *a)
{
printf("%.2lf+%.2lfi\n",a->real,a->image);
}
int main(void)
{
complex a,b;
char ch;
scanf("%c %lf %lf %lf %lf", &ch,&a.real,&a.image,&b.real,&b.image);
switch(ch)
{
case '+': print(add(a,b));break;
case '-': print(sub(a,b));break;
case '*': print(mul(a,b));break;
case '/': print(div(a,b));break;
}
return 0;
}