试题 算法训练 P1103

 
资源限制
时间限制: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.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 }
原文地址:https://www.cnblogs.com/wwqzbl/p/13549161.html