匿名用户
1级
2009-04-24 回答
in cmplx.h
#ifndef CMPLX1_H_
#define CMPLX1_H_
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct _CMPLX
{
float c_real;
float c_vir;
}CMPLX, *PCMPLX;
CMPLX CMPLX_(float real, float vir);
//operations between CMPLX
CMPLX C_add(CMPLX c_l, CMPLX c_r);
CMPLX C_sub(CMPLX c_l, CMPLX c_r);
CMPLX C_mul(CMPLX c_l, CMPLX c_r);
CMPLX C_div(CMPLX c_l, CMPLX c_r);
void C_out(CMPLX data);
#ifdef __cplusplus
}
#endif
#endif /* CMPLX1_H_ */
in cmplx.c
#include
#include
#include "cmplx.h"
CMPLX CMPLX_(float real, float vir)
{
CMPLX d;
d.c_real = real;
d.c_vir = vir;
return d;
}
CMPLX C_add(CMPLX c_l, CMPLX c_r)
{
c_l.c_real += c_r.c_real;
c_l.c_vir += c_r.c_vir;
return c_l;
}
CMPLX C_sub(CMPLX c_l, CMPLX c_r)
{
c_l.c_real -= c_r.c_real;
c_l.c_vir -= c_r.c_vir;
return c_l;
}
CMPLX C_mul(CMPLX c_l, CMPLX c_r)
{
int rl = c_l.c_real;
int vl = c_l.c_vir;
int rr = c_r.c_real;
int vr = c_r.c_vir;
c_l.c_real = rl*rr - vl*vr;
c_l.c_vir = rl*vr + rr*vl;
return c_l;
}
CMPLX C_div(CMPLX c_l, CMPLX c_r)
{
CMPLX c_r_r = CMPLX_(c_r.c_real, -c_r.c_vir);/*a-b*i*/
float c_d = (c_r.c_real*c_r.c_real + c_r.c_vir*c_r.c_vir);
if(c_d == 0)
{
memset(&c_l, 0x00, sizeof(CMPLX));
return c_l;
}
c_l = C_mul(c_l, c_r_r);
c_l.c_real /= c_d;
c_l.c_vir /= c_d;
return c_l;
}
void C_out(CMPLX data)
{
if(data.c_real!=(float)0.0 && data.c_vir!=(float)0.0)
printf("%f%c%fi\n", data.c_real,data.c_vir<0?('-'):('+'), data.c_vir<0?(-data.c_vir):(data.c_vir));
else if(data.c_real == (float)0)
printf("%fi\n", data.c_vir);
else if(data.c_vir == (float)0)
printf("%f\n", data.c_real);
}
in P4.c
#include
#include "cmplx.h"
int test()
{
CMPLX dat1 = CMPLX_(2, 1);
CMPLX dat2 = CMPLX_(1, 1);
CMPLX dat_sum = C_add(dat1, dat2);
CMPLX dat_sub = C_sub(dat1, dat2);
CMPLX dat_mul = C_mul(dat1, dat2);
CMPLX dat_div = C_div(dat1, dat2);
C_out(dat_sum);
C_out(dat_sub);
C_out(dat_mul);
C_out(dat_div);
return 1;
}
int main()
{
test();
return 0;
}