用c#实现复数的加减乘除
在本文中,我将向您展示一种使用C编程语言实现复数的方法。 请注意,使用此处提供的代码没有任何保证。
复数是一个数字,例如z,表示z = realPart + i * imaginaryPart,其中i是虚数单位,有时用j表示。 另外,i * i = -1,这在找到两个复数的乘积/除法时很重要。
自然,我们可以将复数实现为结构:
/* Definition of a Complex number: */
typedef struct complex {
double realPart;
double imaginaryPart;
} Complex;
我们可以按如下方式将接口与实现分开。
首先,我们有标题
Complex.h ,它定义了Complex结构并包含操作一个或多个Complex数字的函数的原型:/* Complex.h */
#ifndef COMPLEX_H
#define COMPLEX_H
/* Definition of a Complex number: */
typedef struct complex {
double realPart;
double imaginaryPart;
} Complex;
/* Prototypes for functions to manipulate Complex number(s) (these functions are implemented in file Complex.c): */
Complex addition( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 );
Complex subtraction( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 );
Complex multiplication( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 );
Complex division( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 );
void print( const Complex *pointerToComplexNumber );
#endif
文件Complex.c实现了以上功能:
/* Complex.c */
#include <stdio.h>
#include "Complex.h"
/* Adds two Complex numbers, returning a new one, without modifying the ones received: */
Complex addition( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 )
{
Complex complexNumber3;
complexNumber3.realPart = pointerToComplexNumber1->realPart + pointerToComplexNumber2->realPart;
complexNumber3.imaginaryPart = pointerToComplexNumber1->imaginaryPart + pointerToComplexNumber2->imaginaryPart;
return complexNumber3;
}
/* Subtracts two Complex numbers, returning a new one, without modifying the ones received: */
Complex subtraction( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 )
{
Complex complexNumber3;
complexNumber3.realPart = pointerToComplexNumber1->realPart - pointerToComplexNumber2->realPart;
complexNumber3.imaginaryPart = pointerToComplexNumber1->imaginaryPart - pointerToComplexNumber2->imaginaryPart;
return complexNumber3;
}
/* Multiplies two Complex numbers, returning a new one, without modifying the ones received: */
Complex multiplication( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 )
{
Complex complexNumber3;
complexNumber3.realPart = pointerToComplexNumber1->realPart * pointerToComplexNumber2->realPart -
pointerToComplexNumber1->imaginaryPart * pointerToComplexNumber2->imaginaryPart;
complexNumber3.imaginaryPart = pointerToComplexNumber1->realPart * pointerToComplexNumber2->imaginaryPart +
pointerToComplexNumber1->imaginaryPart * pointerToComplexNumber2->realPart;
return complexNumber3;
}
/* Divides two Complex numbers, returning a new one, without modifying the ones received: */
Complex division( const Complex *pointerToComplexNumber1, const Complex *pointerToComplexNumber2 )
{
Complex complexNumber3;
double commonDenominator = pointerToComplexNumber2->realPart * pointerToComplexNumber2->realPart +
pointerToComplexNumber2->imaginaryPart * pointerToComplexNumber2->imaginaryPart;
complexNumber3.realPart = ( pointerToComplexNumber1->realPart * pointerToComplexNumber2->realPart +
pointerToComplexNumber1->imaginaryPart * pointerToComplexNumber2->imaginaryPart ) / commonDenominator;
complexNumber3.imaginaryPart = ( pointerToComplexNumber1->imaginaryPart * pointerToComplexNumber2->realPart -
pointerToComplexNumber1->realPart * pointerToComplexNumber2->imaginaryPart ) / commonDenominator;
return complexNumber3;
}
/* Prints a Complex number in the form ( realPart ) + i( imaginaryPart ), without modifying it: */
void print( const Complex *pointerToComplexNumber )
{
printf( "( %.4f ) + i( %.4f )", pointerToComplexNumber->realPart, pointerToComplexNumber->imaginaryPart );
}
最后,我们有一个名为ComplexTest.c的文件,该文件在主函数中测试文件Complex.c和Complex.h ,这是我们C程序的起点:
/* ComplexTest.c */
#include <stdio.h>
#include "Complex.h"
int main( void )
{
Complex number1;
Complex number2;
Complex sumOfNumber1WithNumber2;
Complex subtractionOfNumber2FromNumber1;
Complex multiplicationOfNumber1WithNumber2;
Complex divisionOfNumber1PerNumber2;
number1.realPart = 1.2343;
number1.imaginaryPart = 4.7621;
number2.realPart = -3.213;
number2.imaginaryPart = -9.8;
sumOfNumber1WithNumber2 = addition( &number1, &number2 );
subtractionOfNumber2FromNumber1 = subtraction( &number1, &number2 );
multiplicationOfNumber1WithNumber2 = multiplication( &number1, &number2 );
divisionOfNumber1PerNumber2 = division( &number1, &number2 );
printf( "Number1 = " );
print( &number1 );
printf( "\nNumber2 = " );
print( &number2 );
printf( "\nNumber1 + Number2 = " );
print( &sumOfNumber1WithNumber2 );
printf( "\nNumber1 - Number2 = " );
print( &subtractionOfNumber2FromNumber1 );
printf( "\nNumber1 * Number2 = " );
print( &multiplicationOfNumber1WithNumber2 );
printf( "\nNumber1 / Number2 = " );
print( &divisionOfNumber1PerNumber2 );
putchar( '\n' );
return 0;
}
要使用Visual Studio 2013编译该程序,请从命令行打开VS2013的“开发人员命令提示符”,转到上述三个文件所在的目录,然后输入命令cl ComplexTest.c Complex.c。
然后,使用以下命令运行程序
综合测试翻译自: https://bytes.com/topic/c/insights/956447-implementation-complex-numbers-c
用c#实现复数的加减乘除