我们先创建一个有利于后续操作的头文件,把预处理命令和一些常用的的宏(之后会用到)封装在头文件"StdFile.h"里面。

以下为"StdFile.h"里面的信息:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>
#include <time.h>
using namespace std;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef long long ElemType;
typedef int Index;
typedef int Num;
typedef int Step;

之后对复数的基本定义:

typedef struct
{
    Real real;
    Imag imag;
}Complex;

再创建一个头文件"Complex.h",里面存放关于复数的一些基本方法。

以下为"Complex.h"里面的信息:

#include "StdFile.h"
typedef long double Real, Imag;
typedef long double RealNum;typedef struct
{Real real;Imag imag;
}Complex;//创建复数
Complex CreateComplex(Real x = 0, Imag y = 0)
{Complex z = { 0,0 };z.real = x;z.imag = y;return z;
}//打印复数
void PrintComplex(Complex z)
{if (z.real == 0)printf("j%.2llf\n", z.imag);elseprintf("%.2llf+j%.2llf\n", z.real, z.imag);
}//获取实部
RealNum RealComplex(Complex z)
{return z.real;
}//获取虚部
RealNum ImagComplex(Complex z)
{return z.imag;
}//共轭复数
Complex ConjugateComplex(Complex z)
{Complex _z;_z.real = z.real;_z.imag = -z.imag;return _z;
}//复数的模
RealNum AbsComplex(Complex z)
{RealNum r = 0;r = sqrt(z.real * z.real + z.imag * z.imag);return r;
}//复数加法
Complex AddComplex(Complex z1, Complex z2)
{Complex z3 = { 0,0 };z3.real = z1.real + z2.real;z3.imag = z1.imag + z2.imag;return z3;
}//复数减法
Complex SubComplex(Complex z1, Complex z2)
{Complex z3 = { 0,0 };z3.real = z1.real - z2.real;z3.imag = z1.imag - z1.imag;return z3;
}//复数乘法
Complex MulComplex(Complex z1, Complex z2)
{Complex z3 = { 0,0 };z3.real = z1.real * z2.real - z1.imag * z2.imag;z3.imag = z1.real * z2.imag + z1.imag * z2.real;return z3;
}//复数除法
Complex DivComplex(Complex z1, Complex z2)
{Complex z3 = { 0,0 };z3.real = (z1.real * z2.real + z1.imag * z2.imag) / (z2.real * z2.real + z2.imag * z2.imag);z3.imag = (z1.imag * z2.real - z1.real * z2.imag) / (z2.real * z2.real + z2.imag * z2.imag);return z3;
}//复数的辐角
RealNum ArgComplex(Complex z)
{RealNum r;if (z.real >= 0 && z.imag == 0)r = 0;else if (z.real < 0 && z.imag == 0)r = M_PI;else if (z.real >= 0)r = atan(z.imag / z.real);else if (z.real < 0 && z.imag>0)r = atan(z.imag / z.real) + M_PI;elser = atan(z.imag / z.real) - M_PI;return r;
}

此方法不全,读者可添加更多方法(比如复数的三角式,复数的指数式,复数的幂,复数的对数,指数……)

以下为效果展示:

#include "Complex.h"
int main()
{Complex Z1, Z2, Z;Z = { 6,8 };Z1 = { 1,0 };Z2 = CreateComplex(2, 4);PrintComplex(Z1);PrintComplex(Z2);PrintComplex(AddComplex(Z1, Z2));cout << "Z1+Z2的模 " << AbsComplex(AddComplex(Z1, Z2)) << endl;cout << "Z的实部 " << RealComplex(Z) << ' ' << "Z的虚部" << ImagComplex(Z) << endl;cout << "打印Z/(Z1+Z2) ";PrintComplex(DivComplex(Z, AddComplex(Z1, Z2)));cout << "Z的辐角主值 " << ArgComplex(Z) << endl;
}

显示结果:

辐角主值以弧度制显示,可能很难看出角度,优化后可以把弧度转化为角度:

//复数的辐角
RealNum ArgComplex(Complex z)
{RealNum r;if (z.real >= 0 && z.imag == 0)r = 0;else if (z.real < 0 && z.imag == 0)r = M_PI;else if (z.real >= 0)r = atan(z.imag / z.real);else if (z.real < 0 && z.imag>0)r = atan(z.imag / z.real) + M_PI;elser = atan(z.imag / z.real) - M_PI;return r/M_PI*180;
}

只需修改返回值即可。

修改后主函数的运行结果:

arctan(8/6)刚好就是53.1°,辐角显示无误。

以下是资源文件里面的文本文件"Help.Complex.txt"的内容,为方法的使用大纲:

typedef struct
{Real real;Imag imag;
}Complex;//创建复数
Complex CreateComplex(Real x = 0, Imag y = 0)//打印复数
void PrintComplex(Complex z)//获取实部
RealNum RealComplex(Complex z)//获取虚部
RealNum ImagComplex(Complex z)//共轭复数
Complex ConjugateComplex(Complex z)//复数的模
RealNum AbsComplex(Complex z)//复数加法
Complex AddComplex(Complex z1, Complex z2)//复数减法
Complex SubComplex(Complex z1, Complex z2)//复数乘法
Complex MulComplex(Complex z1, Complex z2)//复数除法
Complex DivComplex(Complex z1, Complex z2)//复数的辐角
RealNum ArgComplex(Complex z)

之后继续更新关于顺序表的相关方法。

数据结构(C语言描述)——复数相关推荐

  1. c语言用指针求Amn,[工学]第5章数据结构C语言描述耿国华.ppt

    [工学]第5章数据结构C语言描述耿国华 j=1;  for(k=1; k<=A.n; k++)  for(i=1; i<=A.len; i++) if(A.data[i].col== ...

  2. 大学python用什么教材-数据结构 Python语言描述 大学教材

    书名:数据结构:Python语言描述 定价:69.8 ISBN:9787115485779 作者:张光河 版次:第1版 出版时间:2018-07 内容提要: Python是目前流行的程序设计语言,国内 ...

  3. 算法与数据结构java语言描述 英文版_CVPR2020 |室内设计师失业?针对语言描述的自动三维场景设计算法...

    近日,计算机视觉顶会CVPR 2020接收论文结果公布,从6656篇有效投稿中录取了1470篇论文,录取率约为22%.在<Intelligent Home 3D: Automatic 3D-Ho ...

  4. 一起学Java虚拟机(一),数据结构java语言描述百度云

    我们可以把Java程序设计语言.Java虚拟机.Java类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境. JVM 是 JDK 的一部分 ...

  5. python语言描述兰伯特pdf_数据结构PYTHON语言描述 [美] Kenneth A. Lambert 兰伯特

    第1章 Python编程基础 1 1.1 基本程序要素 1 1.1.1 程序和模块 1 1.1.2 Python程序示例:猜数字 1 1.1.3 编辑.编译并运行 Python程序 2 1.1.4 程 ...

  6. 《数据结构 C++ 语言描述》电子书下载 -(百度网盘 高清版PDF格式)

    作者:William Ford,William Topp [译者] 刘卫东 沉官林 出版日期:1999-9-1 出版社:清华出版社 页数:708 ISBN:7-302-03160-6 文件格式:PDF ...

  7. 数据结构-C语言 || 实现复数的四则运算(定义+代码)

    思路: ①首先了解复数四则运算--加.减.乘.除:以及分别对应的公式(以a+bi和c+di为例推导): 加/减法:(a+bi)±(c+di)=(a±c)+(b±d)i 乘法:(a+bi)(c+di)= ...

  8. java中哈夫曼编码所用的函数_数据结构(java语言描述)哈夫曼编码

    原理:哈夫曼编码是根据将已给出的权值作为叶子结点,生成一颗哈夫曼树,然后使得权重最小. 首先生成已给权重的所有的叶子结点,然后取所有节点中最小和次小的结点作为左右孩子生成一个哈夫曼树,计算出父节点的权 ...

  9. 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)

    本书共有7个单元,包括:单元1 数据结构与算法.单元2 线性表.单元3 栈和队列.单元4 树与二叉树.单元5 图.单元6排序和单元7查找,每个单元由若干节次.每个节次由若干知识点构成:主要介绍了数据结 ...

最新文章

  1. php与jpython-Ruby on Rails VS PHP VS Python
  2. react编译报错:Import in body of module; reorder to top import/first
  3. PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?
  4. 列出文件夹下所有文件命令
  5. [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
  6. 不使用java内置函数,将String字符串转换为int类型
  7. 利用 VMware vRealize - 构建和优化云管理
  8. 浅谈SQLiteOpenHelper之onUpgrade例子
  9. 用项目案例彻底理解Spring IOC容器
  10. simulink同步发电机模型_基于Speedgoat的永磁同步电机控制Demo
  11. useReducer使用和原理
  12. ibatis中输入/输出各种类型的参数分析及#与$区别 (转)
  13. 美国 ZIP Code 一览表
  14. MongoDB——客户端Robo 3T v1.4.3 安装
  15. Day5-ESP8266模块——百问网7天物联网智能家居
  16. 计算机资源管理器经常停止运行,解决win10资源管理器经常停止工作的方法
  17. 电脑c盘格式化,如何恢复C盘文件?
  18. Mac OS关机/睡眠快捷键
  19. Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)
  20. [安氵旬杯2022] 一些题目复现

热门文章

  1. 9.14 PreScan自动驾驶建模与仿真技术培训(第三期)
  2. linux 软件包kbd 位置,1.10.42 6.42. Kbd-1.12 - Linux 系统构建指南
  3. 3.4.3 Electric Fence电网 USACO(毕克定理) USACO
  4. T解 湖南师大附中集训 模拟考试1
  5. 这个“中台”不简单,将自然资源信息化全面带入三维世界
  6. Havel算法-Python实现
  7. csdn的markdown编辑器基本语法(整理版)
  8. RabbitMQ 安装使用,Centos系统安装RabbitMQ、Docker安装启动RabbitMQ
  9. 近期全球知识图谱相关行业动态、会议讲座、综述推荐
  10. 神经网络反向传播的作用,双向传播的神经网络