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 ~]$