算法训练 P1103
编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:
要求:(1)定义一个结构体类型来描述复数。
(2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
(3)必须使用结构体指针的方法把函数的计算结果返回。
说明:用户输入:运算符号(+,-,*,/) a b c d.
输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。
#include<iostream>
#include<iomanip>
using namespace std;
struct plural
{
double real_part;
double imagine_part;
};
plural* add(plural a,plural b)
{
plural p;
p.real_part=a.real_part+b.real_part;
p.imagine_part=a.imagine_part+b.imagine_part;
return &p;
}
plural* substract(plural a,plural b)
{
plural p;
p.real_part=a.real_part-b.real_part;
p.imagine_part=a.imagine_part-b.imagine_part;
return &p;
}
plural* multiply(plural a,plural b)
{
plural p;
p.real_part=a.real_part*b.real_part-a.imagine_part*b.imagine_part;
p.imagine_part=a.imagine_part*b.real_part+b.imagine_part*a.real_part;
return &p;
}
plural* devide(plural a,plural b)
{
plural p;
p.real_part=(a.real_part*b.real_part+a.imagine_part*b.imagine_part)/(b.real_part*b.real_part+b.imagine_part*b.imagine_part);
p.imagine_part=(a.imagine_part*b.real_part-a.real_part*b.imagine_part)/(b.real_part*b.real_part+b.imagine_part*b.imagine_part);
return &p;
}
int main(int argc, char*argv[])
{
char op;
double a,b,c,d;
plural p1,p2,*s;
cin>>op>>a>>b>>c>>d;
p1.real_part=a;
p1.imagine_part=b;
p2.real_part=c;
p2.imagine_part=d;
switch(op)
{
case '+':{s=add(p1,p2);break;}
case '-':{s=substract(p1,p2);break;}
case '*':{s=multiply(p1,p2);break;}
case '/':{s=devide(p1,p2);break;}
}
cout<<fixed<<setprecision(2)<<s->real_part<<'+'<<s->imagine_part<<'i'<<endl;
}