详解C语言中的复数操作

1. 复数是什么

复数是由实数和虚数构成的数,形如:a + bi,其中a为实部,b为虚部,i为虚数单位。

1.1 常用符号

复数中常见的符号有:

i:虚数单位,满足i^2=-1

z:表示一般的复数。

a:实部。

b:虚部。

conj:复数共轭运算。

2. C语言中复数的表示方式

C语言中复数的表示方式是通过结构体来实现的,具体实现如下:

typedef struct {

double real; //实部

double imag; //虚部

} Complex;

其中real表示实部,imag表示虚部。对于一个复数,可以通过定义一个Complex类型的变量来表示。

Complex z;

z.real = 1.0; //设置实部

z.imag = 2.0; //设置虚部

3. C语言中复数的基本运算

3.1 复数的加、减法

复数加减法的运算规则与实数的加减法类似,只需分别计算实部和虚部的和或差即可。

如给定两个复数z1 = a1 + b1i和z2 = a2 + b2i,其和为:

Complex add(Complex z1, Complex z2) {

Complex res;

res.real = z1.real + z2.real;

res.imag = z1.imag + z2.imag;

return res;

}

其差为:

Complex sub(Complex z1, Complex z2) {

Complex res;

res.real = z1.real - z2.real;

res.imag = z1.imag - z2.imag;

return res;

}

3.2 复数的乘法

复数乘法的运算规则为:

$$

(a_1+b_1i)(a_2+b_2i)=(a_1a_2-b_1b_2)+(a_1b_2+b_1a_2)i

$$

如给定两个复数z1 = a1 + b1i和z2 = a2 + b2i,其积为:

Complex mul(Complex z1, Complex z2) {

Complex res;

res.real = z1.real * z2.real - z1.imag * z2.imag;

res.imag = z1.real * z2.imag + z1.imag * z2.real;

return res;

}

3.3 复数的除法

复数除法的运算规则为:

$$

\frac{a_1+b_1i}{a_2+b_2i}=\frac{a_1a_2+b_1b_2}{a_2^2+b_2^2}+\frac{b_1a_2-a_1b_2}{a_2^2+b_2^2}i

$$

如给定两个复数z1 = a1 + b1i和z2 = a2 + b2i,其商为:

Complex div(Complex z1, Complex z2) {

Complex res;

double d = z2.real * z2.real + z2.imag * z2.imag;

res.real = (z1.real * z2.real + z1.imag * z2.imag) / d;

res.imag = (z1.imag * z2.real - z1.real * z2.imag) / d;

return res;

}

4. 复数的其他运算

4.1 复数的模长

复数的模长指复数到原点的距离,其计算公式为:

$$

|z|=\sqrt{a^2+b^2}

$$

如给定一个复数z = a + bi,其模长为:

double abs(Complex z) {

return sqrt(z.real * z.real + z.imag * z.imag);

}

4.2 复数的幅角

复数的幅角指与正半轴之间的夹角,其计算公式为:

$$

\varphi = \begin{cases} \tan^{-1}(\frac{b}{a}) & a > 0, b \ge 0 \\

\pi + \tan^{-1}(\frac{b}{a}) & a < 0, b \ge 0 \\

\tan^{-1}(\frac{b}{a}) - \pi & a < 0, b < 0 \\

-\frac{\pi}{2} & a = 0, b > 0 \\

\frac{\pi}{2} & a = 0, b < 0 \\

undefined & a = 0, b = 0

\end{cases}

$$

其中,tan-1为反正切函数。

如给定一个复数z = a + bi,其幅角为:

double arg(Complex z) {

double t = atan2(z.imag, z.real);

if (t < 0) {

t += 2 * M_PI;

}

return t;

}

5. 实现一个复数计算器

下面我们来用C语言实现一个复数计算器,支持复数的加减乘除和求模长、幅角等操作。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

typedef struct {

double real; //实部

double imag; //虚部

} Complex;

Complex add(Complex z1, Complex z2) {

Complex res;

res.real = z1.real + z2.real;

res.imag = z1.imag + z2.imag;

return res;

}

Complex sub(Complex z1, Complex z2) {

Complex res;

res.real = z1.real - z2.real;

res.imag = z1.imag - z2.imag;

return res;

}

Complex mul(Complex z1, Complex z2) {

Complex res;

res.real = z1.real * z2.real - z1.imag * z2.imag;

res.imag = z1.real * z2.imag + z1.imag * z2.real;

return res;

}

Complex div(Complex z1, Complex z2) {

Complex res;

double d = z2.real * z2.real + z2.imag * z2.imag;

res.real = (z1.real * z2.real + z1.imag * z2.imag) / d;

res.imag = (z1.imag * z2.real - z1.real * z2.imag) / d;

return res;

}

double abs(Complex z) {

return sqrt(z.real * z.real + z.imag * z.imag);

}

double arg(Complex z) {

double t = atan2(z.imag, z.real);

if (t < 0) {

t += 2 * M_PI;

}

return t;

}

int main() {

Complex z1, z2;

double r;

int op;

printf("请输入第一个复数(实部 虚部):");

scanf("%lf %lf", &z1.real, &z1.imag);

printf("请输入第二个复数(实部 虚部):");

scanf("%lf %lf", &z2.real, &z2.imag);

printf("\n请选择要进行的运算:\n");

printf("1. 加法\n");

printf("2. 减法\n");

printf("3. 乘法\n");

printf("4. 除法\n");

printf("5. 模长\n");

printf("6. 幅角\n");

scanf("%d", &op);

switch (op) {

case 1:

printf("结果为:%.2f + %.2fi\n", add(z1, z2).real, add(z1, z2).imag);

break;

case 2:

printf("结果为:%.2f + %.2fi\n", sub(z1, z2).real, sub(z1, z2).imag);

break;

case 3:

printf("结果为:%.2f + %.2fi\n", mul(z1, z2).real, mul(z1, z2).imag);

break;

case 4:

printf("结果为:%.2f + %.2fi\n", div(z1, z2).real, div(z1, z2).imag);

break;

case 5:

r = abs(z1);

printf("第一个复数的模长为:%.2f\n", r);

r = abs(z2);

printf("第二个复数的模长为:%.2f\n", r);

break;

case 6:

r = arg(z1);

printf("第一个复数的幅角为:%.2f\n", r);

r = arg(z2);

printf("第二个复数的幅角为:%.2f\n", r);

break;

default:

printf("无效输入\n");

break;

}

return 0;

}

6. 结语

本文详细介绍了C语言中的复数操作,包括复数的基本概念、C语言中复数的表示方式以及复数的加减乘除、求模长和幅角等操作。通过实现一个复数计算器的例子,也向大家展示了如何使用C语言来进行复数计算。希望对大家有所帮助。

后端开发标签