复数 一级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;
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值