资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:
要求:(1)定义一个结构体类型来描述复数。
(2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
(3)必须使用结构体指针的方法把函数的计算结果返回。
说明:用户输入:运算符号(+,-,*,/) a b c d.
输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。
样例输入:
- 2.5 3.6 1.5 4.9
编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:
要求:(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. 加法:(a+bi) + (c+di) = (a+c) + (b+d)i;
2. 减法:(a+bi) - (c+di) = (a-c) + (b-d)i;
3. 乘法:(a+bi) * (c+di) = (ac-bd) + (bc+ad)i;4. 除法:(这里用到分母实例化)(a+bi) / (c+di) = ((a+bi)*(c-di)) / ((c+di)*(c-di))= ((ac+bd)+(bc-ad)i) / (c2+d2)= (ac+bd)/(c2+d2) + (bc-ad)i/(c2+d2)
1 #include <iostream>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cstring>
5 #include <string>
6 #include <cmath>
7 #include <algorithm>
8 #define INF 0x3f3f3f3f
9 #define zero 1e-7
10
11 using namespace std;
12 typedef long long ll;
13 const ll mod=50000;
14 const ll max_n=2e5+7;
15
16 int main() {
17 double a, b, c, d, x, y;
18 char ch;
19 cin>>ch>>a>>b>>c>>d;
20 switch(ch) {
21 case '+': x=a+c; y=b+d; break;
22 case '-': x=a-c; y=b-d; break;
23 case '*': x=a*c-b*d; y=b*c+a*d; break;
24 case '/': x=(a*c+b*d)/(c*c+d*d); y=(b*c-a*d)/(c*c+d*d); break;
25 default : break;
26 }
27 printf("%.2f+%.2fi
", x, y);
28 return 0;
29 }