蓝桥杯ALGO-142 算法训练 P1103
编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:
要求:(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
这道题主要考察结构体和结构体指针的应用,把两个要进行运算的复数放到两个相同结构体里,再用一个结构体存储运算结果,不同的是在传入函数时储存结果的结构体传入的是地址,在函数中用指针运算。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct FUSHU{
double a;
double b;
};
void jia(FUSHU x1, FUSHU x2, FUSHU *x3){
//printf("测试");
x3->a = x1.a + x2.a;
x3->b = x1.b + x2.b;
}
void jian(FUSHU x1, FUSHU x2, FUSHU *x3){
x3->a = x1.a - x2.a;
x3->b = x1.b - x2.b;
}
void cheng(FUSHU x1, FUSHU x2, FUSHU *x3){
x3->a = x1.a*x2.a-x1.b*x2.b;
x3->b = x1.b*x2.a+x1.a*x2.b;
}
void chu(FUSHU x1, FUSHU x2, FUSHU *x3){
double y = x2.a*x2.a + x2.b*x2.b;
x3->a = (x1.a*x2.a+x1.b*x2.b)/y;
x3->b = (x1.b*x2.a-x1.a*x2.b)/y;
}
int main(int argc, char** argv) {
char c;
struct FUSHU f1;
struct FUSHU f2;
struct FUSHU f3;
cin >> c >> f1.a >> f1.b >> f2.a >> f2.b;
if(c == '+')
jia(f1, f2, &f3);
if(c == '-')
jian(f1, f2, &f3);
if(c == '*')
cheng(f1, f2, &f3);
if(c == '/')
chu(f1, f2, &f3);
//printf("%.2lf+%.2lfi\n", f3.a, f3.b);
cout << fixed << setprecision(2) << f3.a << "+" << f3.b << "i" << endl;
return 0;
}