我有一个结构,但我不知道如何使用它
问题描述:
typedef struct Complex{
double real;
int img;
} Complex;
我见过的人使用它作为像类型:我有一个结构,但我不知道如何使用它
Complex sqrt(double x) {
}
如何做到“真实”和“IMG”戏在这种类型的功能中的作用?由于
答
它可以像这样使用:
Complex sqrt(double x) {
Complex c = {0.0, 0.0};
if (x>= 0.0)
c.real = square_root(x);
else
c.img = square_root(-x);
return c;
}
我不知道这是否是一个错误,但复杂:: IMG应该也是双倍的。
(注意复数是实数的超集,所以一个复数可以在双的地方使用,如果它的虚部为零)
答
你可能会使用这样的:
Complex sqrt(double x) {
Complex r;
r.real = f(x);
r.img = g(x);
return r;
}
在这个例子中,f(x)
和g(x)
将是计算复数x
的平方根的实部和虚部函数的调用。 (在现实中,你可能会计算sqrt()
函数内部平方根,但我只是显示这个作为如何使用Complex
结构的例子。)
这里是一个reference that explains structures in C,这可能对你有所帮助。
答
我想,如果签名是
Complex sqrt(double x);
那么x代表了真正的价值。所以Complex.img可以是0/1,表示x是正面还是负面。
示例(以x作为实数)
//C like pseudocode
Complex sqrt(double x){
Complex result={0,0};
if (x==0) return result;
if (x<0){
result.img =1;
real = abs(x);
}
result.real= sqrt_(x);//calculates square root of a positive value.
return result;
}
//some other place
double r =-4.0;
Complex root = sqrt(r);
//prints "Square root of -4.0 is 2i"
printf("Square root of %.2f is %.2f%c",r,root.real,(root.img?'i':''));
答
虚部应该是一个双过。
对于一个真正的(双X):
Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0;
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0;
像FinnNk建议,读了一些关于复杂的数学问题。
答
复数的平方根通常不是在你手上的计算器计算....
退房它是用来改变的变量极坐标DeMoivre定理 - 对于其中有一个封闭的形式一个复数的平方根公式a + ib。
Paul
怎么了?它通过值返回一个'Complex'结构体。 第一个代码段使用复杂的结构名称和变量定义:它不能工作。 – ntd 2009-10-25 22:23:46
你是否错过了'typedef'? – pmg 2009-10-25 22:27:21
请记住,C中的结构和typedef都有*独立的*名称空间。因此'Complex'和'struct Complex'都是具有上述定义的有效类型。此外,强制性的:http://en.wikipedia.org/wiki/Complex_number。 – 2009-10-25 22:36:30