其他分享
首页 > 其他分享> > 复数 一级ADT实现

复数 一级ADT实现

作者:互联网

COMPLEX.h

/*
typedef struct
{
    float RE; //实部
    float IM; //虚部
}Complex;
*/
typedef struct complex * Complex;

Complex COMPLEXinit(float, float);
float Re(Complex);
float Im(Complex);
Complex COMPLEXmult(Complex, Complex);

COMPLEX.c

#include "COMPLEX.h"

struct complex
{
    float RE; //实部
    float IM; //虚部
};

Complex COMPLEXinit(float RE, float IM)
{
    /*
    Complex t;
    t.RE=RE;
    t.IM=IM;
    return t;
    */
    
    Complex t=malloc(sizeof *t);
    t->RE=RE;
    t->IM=IM;
    return t;
}
float Re(Complex z)
{
    return z->RE;
}
float Im(Complex z)
{
    return z->IM;
}
Complex COMPLEXmult(Complex a, Complex b)
{
    /*
    Complex t;
    t.RE=a.RE*b.RE-a.IM*b.IM;
    t.IM=a.RE*b.IM+a.IM*b.RE;
    
    //a实部乘b实部-a虚部乘b虚部
    //a实部乘b虚部+a虚部乘b实部
    return t;*/
    
    return COMPLEXinit(Re(a)*Re(b)-Im(a)*Im(b),
                       Re(a)*Im(b)+Im(a)*Re(b));
}

main.c

#include <stdio.h>
#include <math.h>
#include "COMPLEX.h"

#define PI 3.141592625

int main(void)
{
    int N;
    printf("输入一个参数:");
    scanf("%d", &N);
    getchar();
    
    Complex t, x;
    printf("%dth complex roots of unity\n", N);
    for(int i=0; i<N; i++)
    {
        float r=2.0*PI*i/N;
        //1=e^(2n*pi*i)  ?

        
        t=COMPLEXinit(cos(r), sin(r));
        
        printf("%2d %6.3f %6.3f ", i, Re(t), Im(t));
        x=t;
        for(int j=0; j<N-1; j++)
            x=COMPLEXmult(t, x);
            
        printf("%6.3f %6.3f\n", Re(x), Im(x));
    }
    
    return 0;
}

 

标签:ADT,一级,Re,float,实部,RE,Complex,IM,复数
来源: https://blog.csdn.net/MACHINE_128/article/details/99327267