有关构造函数结构体求值的

1.定义表示复数的构造体
作成返回两个复数之积的函数zmul

z1 = (1.00000, 2.00000)
z2 = (-2.00000, -4.00000)
z1 * z2 = (6.00000, -8.00000)

  1. 定义表示向量的构造体
    作成返回两向量内积的函数ip

v1 = (2.00000, 0.00000)
v2 = (-1.00000, -1.00000)
v1 * v2 = -2.0

#include <stdio.h>

typedef struct Complex_ {
  double real;
  double image;
}
Complex;

Complex zmul(Complex z1, Complex z2) {
  Complex z;
  z.real = z1.real * z2.real - z1.image * z2.image;
  z.image = z1.real * z2.image + z1.image * z2.real;
  return z;
}

typedef struct Vector2D_ {
  double x;
  double y;
} Vectro2D;

double dotProduct(Vectro2D v1, Vectro2D v2) {
  return v1.x * v2.x + v1.y * v2.y;
}

int main() {
  Complex z1 = {1.0, 2.0};
  Complex z2 = {-2.0, -4.0};
  Complex z = zmul(z1, z2);
  printf("z1 * z2 = (%lf, %lf)\n", z.real, z.image);

  Vectro2D v1 = {2.0, 0.0};
  Vectro2D v2 = {-1.0, -1.0};
  double d = dotProduct(v1, v2);
  printf("v1 * v2 = %lf\n", d);

  return 0;
}

复素数是?和复数啥关系啊
z1 * z2 = (6.00000, -8.00000)
v1 * v2 = -2.0
咋理解?怎么两个结果?
明白了

typedef struct _comp
{
    double a;
    double b;
}comp;

comp zmul(comp c1,comp c2)
{
    comp c;
    c.a = c1.a * c2.a - c1.b * c2.b;
    c.b = c1.a * c2.b + c1.b * c2.a;
    return c;
}

int main()
{
    comp c1,c2,c;
    printf("input first comp:");
    scanf("%lf %lf",&c1.a,&c1.b);
    printf("input second comp:");
    scanf("%lf %lf",&c2.a,&c2.b);
    c = zmul(c1,c2);
    if(c.b == 0)
        printf("%lf",c.a);
    else 
    {
        if(c.a == 0)
            printf("%lfi",c.b);
        else if(c.b>0)
            printf("%lf+%lfi",c.a,c.b);
        else
            printf("%lf%lfi",c.a,c.b);
    }
}