Ficheiro complexos.c
:
#include <stdio.h> #include <stdlib.h> typedef struct { float real, img; } complexo; complexo soma(complexo a, complexo b); complexo le_complexo(); void escreve_complexo(complexo a); int main() { complexo x, y, z; x = le_complexo(); y = le_complexo(); z = soma(x, y); escreve_complexo(x); printf(" + "); escreve_complexo(y); printf(" = "); escreve_complexo(z); printf("\n"); return EXIT_SUCCESS; } complexo soma(complexo a, complexo b) { a.real += b.real; a.img += b.img; return a; } complexo le_complexo() { complexo a; char sign; scanf("%f%c%fi", &a.real, &sign, &a.img); if (sign == '-') a.img *= -1; return a; } void escreve_complexo(complexo a) { if (a.img >= 0) printf("%f+%fi", a.real, a.img); else printf("%f%fi", a.real, a.img); }
Compilação e execução:
[aplf@darkstar ~]$ gcc -Wall -ansi -pedantic -o complexos complexos.c [aplf@darkstar ~]$ ./complexos 5-4i -3+3i 5.000000-4.000000i + -3.000000+3.000000i = 2.000000-1.000000i [aplf@darkstar ~]$ ./complexos 4.3-0.5i 2.2+3.4i 4.300000-0.500000i + 2.200000+3.400000i = 6.500000+2.900000i [aplf@darkstar ~]$