[大神求助啊]linux c一站到底第七章 第三节的疑问
这个是一个关于 定义复数的问题;复数是有分一般形态就是a+bi的形式和z=r(cos(a)+i*sin(a))的形态
如何使用枚举类型 enum 存储俩种形态,网上都搜不到(
)加个枚举就不懂怎么操作了- -,需不需要用if 语句判断
给出范例:
enum coordinate_type { RECTANGULAR, POLAR };
struct complex_struct {
enum coordinate_type t;
double a, b;
};
struct complex_struct make_from_real_img(double x, double y)
{
struct complex_struct z;
z.t = RECTANGULAR;
z.a = x;
z.b = y;
return z;
}
struct complex_struct make_from_mag_ang(double r, double A)
{
struct complex_struct z;
z.t = POLAR;
z.a = r;
z.b = A;
return z;
}
只给出了make_from_real_img 和make_from_mag_ang函数的实现,请读者自己实
现real_part 、img_part 、magnitude 、angle 这些函数。
C enum struct
[解决办法]
用if判别z.t,然后根据不同形式进行不同的运算。
[解决办法]
当然要用if判断,下面给出实现:
double real_part(struct complex_struct z)
{
if(z.t == RECTANGULAR)
return z.a * cos(z.b);
else
z.a;
}
double img_part(struct complex_struct z)
{
if(z.t == RECTANGULAR)
return z.a * sin(z.b);
else
z.b;
}
double magnitude(struct complex_struct z)
{
if(z.t == RECTANGULAR)
return sqrt(z.a * z.b + z.a * z.b);
else
return z.a;
}
double angle(struct complex_struct z)
{
if(z.t == RECTANGULAR)
return atan2(z.a, z.b);
else
return z.b;
}