首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

[大神啊]linux c一站到底第七章 第三节的疑问

2013-08-04 
[大神求助啊]linux c一站到底第七章 第三节的疑问这个是一个关于 定义复数的问题复数是有分一般形态就是a

[大神求助啊]linux c一站到底第七章 第三节的疑问
这个是一个关于 定义复数的问题;复数是有分一般形态就是a+bi的形式和z=r(cos(a)+i*sin(a))的形态 
如何使用枚举类型 enum 存储俩种形态,网上都搜不到([大神啊]linux c一站到底第七章 第三节的疑问)加个枚举就不懂怎么操作了- -,需不需要用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;
}

[解决办法]
引用:
Quote: 引用:

上面的代码少了两个return,反正大概就那么个意思。


可是 如果不用if 怎么破 可否
struct real_part_img(make_from_real_img z)
{
  return z.a;
}

struct real_part_ang (make_from_mag_ang z)
{
 return z.a * cos(z.b);
}

你这样是没有错啦,只不过就失去了里面类型的意义;你这就相当于不使用枚举类型,分别实现两种类型,就是就书上前面两个例子放在一起而已。

热点排行