复数计算题目( 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
题目分析:
题目意思简单明了,掌握复数的基本运算、结构体指针。
(结构体指针也可以不使用,因为蓝桥杯系统评测只会输入数据,判断输出是否正确,并不关注实现过程。)
①复数的四则运算:(来源360百科)
加法法则:(a+bi)+(c+di)=(a+c)+(b+d)i;
减法法则:(a+bi)-(c+di)=(a-c)+(b-d)i;
乘法法则:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i
除法法则:(a+bi)÷(c+di)=[(ac+bd)/(c²+d²)]+[(bc-ad)/(c²+d²)]i
理解复数除法法则:
②使用结构体指针的方法把函数的计算结果返回。
结构体指针:通俗一些说就是指向结构体的指针,类似于int类型指针。
struct node{
int a;
int b;
}*Node;//*Node为结构体指针
int *p;//p为int类型指针
最后编写加、减、乘、除四个函数,每个函数返回结构体指针。
以下为具体代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
double a, b;
}*Node;
node* sub(double a1,double b1,double a2,double b2)
{
double a, b;
node *p;
p = (node*)malloc(sizeof(node));
a=a1-a2;
b=b1-b2;
p->a=a;
p->b=b;
return p;
}
node* add(double a1,double b1,double a2,double b2