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