Tipos de Dados de 1ª Ordem: números complexos

From Wiki**3

Note-se que não corresponde a um tipo de dados abstracto: a interface expõe a estrutura do tipo. Comparar com a versão abstracta.

Interface

 #ifndef __COMPLEX_H__
 #define __COMPLEX_H__
 
 typedef struct complex {
   double re, im;
 } Complex;
 
 Complex COMPLEXinit(double, double);
 double  COMPLEXre(Complex);
 double  COMPLEXim(Complex);
 Complex COMPLEXmult(Complex, Complex);
 
 #endif

Implementação

 #include "COMPLEX.h"
 
 Complex COMPLEXinit(double re, double im) {
   Complex t; t.re = re; t.im = im; return t;
 }
 
 double COMPLEXre(Complex c) { return c.re; }
 double COMPLEXim(Complex c) { return c.im; }
 
 Complex COMPLEXmult(Complex a, Complex b) {
   Complex t;
   t.re = a.re * b.re ââ?¬â?? a.im * b.im;
   t.im = a.re * b.re + a.im * b.im;
   return t;
 }