复数运算

编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:

  要求:(1)定义一个结构体类型来描述复数。
  (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

分析:一看就是一道大水题。

看到结构体指针。好久没编过了。不如试一试吧。(当然也可以不用结构,直接计算就行)

注意:结构体指针初始化要不然就会变成野指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<bits/stdc++.h>
using namespace std;
struct fu{
double x;
double y;
fu(double xx,double yy):x(xx),y(yy){
}
fu(){
}
};
fu* add(fu f1,fu f2){
//!
fu *ans=(fu*)malloc(sizeof(fu));
ans->x=f1.x+f2.x;
ans->y=f1.y+f2.y;
return ans;
}
fu *sub(fu f1,fu f2){
fu *ans=(fu*)malloc(sizeof(fu));
ans->x=f1.x-f2.x;
ans->y=f1.y-f2.y;
return ans;
}
fu *mul(fu f1,fu f2){
fu *ans=(fu*)malloc(sizeof(fu));
ans->x=f1.x*f2.x-f1.y*f2.y;
ans->y=f1.x*f2.y+f1.y*f2.x;
return ans;
}

fu *div(fu f1,fu f2){
fu *ans=(fu*)malloc(sizeof(fu));
int t=f2.x*f2.x+f2.y*f2.y;
if(f2.x==0||f2.y==0) return NULL;
ans->x=(f1.x*f2.x+f1.y*f2.y)/t;
ans->y=(f1.y*f2.x-f1.x*f2.y)/t;
return ans;
}
int main(){
char c;
double x1,x2,y1,y2;
cin>>c;
cin>>x1>>y1>>x2>>y2;
fu f1(x1,y1);
fu f2(x2,y2);
fu *ans;
switch(c)
{
case '+':ans=add(f1,f2);break;
case '-':ans=sub(f1,f2);break;
case '*':ans=mul(f1,f2);break;
case '/':ans=div(f1,f2);break;
default :break;
}
printf("%.2lf+%.2lfi\n",ans->x,ans->y);

}

参考博客
https://blog.csdn.net/qq_33850438/article/details/50812130