设有两个复数a+i*b和c+i*d,要求: 定义一个结构体类型来描述复数; 复数之间的加法、减法、乘法和除法分别用不用的函数来实现; 必须使用结构体指针的方法把函数的计算结果返回。 输入格式: 输入只有一行,其格式为:运算符号(+,-,*)a, b ,c, d。 输出格式: 输出:a+bi,输出时不管a ,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。 注: 使用scanf和printf输入输出,要输出保留两位小数点,使用%.2lf。 测试举例: 测试输入:* 2.5 3.6 1.5 4.9。 预期输出:-13.89+17.65i。
#include
typedef struct{
double real;
double i;
}complex;
complex* add(complex a, complex c,complex b,complex d){
complex* ret = (complex*)malloc(sizeof(complex));
ret->real = a.real + c.real;
ret->i = b.i + d.i;
return ret;
}
complex* minus(complex a, complex c,complex b,complex d){
complex* ret = (complex*)malloc(sizeof(complex));
ret->real = a.real - c.real;
ret->i = b.i - d.i;
return ret;
}
complex* multiply(complex a, complex c,complex b,complex d){
complex* ret = (complex*)malloc(sizeof(complex));
ret->real = a.real*c.real + a.i*d.i;
ret->i = b.i*c.i - b.real*d.real;
return ret;
}
int main(){
char sign;
complex a,c;
complex b,d;
scanf("%c%lf%lf%lf%lf",&sign,&a.real,&b.i,&c.real,&d.i);
if( sign == '+' ){
add(a,b,c,d);
printf("%.2lf+%.2lfi\n",add(a,c,b,d)->real,add(a,b,c,d)->i); }
if( sign == '-' ){
minus(a,b,c,d);
printf("%.2lf+%.2lfi\n",minus(a,b,c,d)->real,minus(a,b,c,d)->i);
}
if( sign == '*' ){
multiply(a,b,c,d);
printf("%.2lf+%.2lfi\n",multiply(a,b,c,d)->real,multiply(a,b,c,d)->i);
}
return 0;
}