2009-10-25 74 views
0
typedef struct Complex{ 
double real; 
int img; 
} Complex; 

我见过的人使用它作为像类型:我有一个结构,但我不知道如何使用它

Complex sqrt(double x) { 
} 

如何做到“真实”和“IMG”戏在这种类型的功能中的作用?由于

+1

怎么了?它通过值返回一个'Complex'结构体。 第一个代码段使用复杂的结构名称和变量定义:它不能工作。 – ntd 2009-10-25 22:23:46

+0

你是否错过了'typedef'? – pmg 2009-10-25 22:27:21

+0

请记住,C中的结构和typedef都有*独立的*名称空间。因此'Complex'和'struct Complex'都是具有上述定义的有效类型。此外,强制性的:http://en.wikipedia.org/wiki/Complex_number。 – 2009-10-25 22:36:30

回答

4

它可以像这样使用:

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应该也是双倍的。

(注意复数是实数的超集,所以一个复数可以在双的地方使用,如果它的虚部为零)

3

你可能会使用这样的:

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,这可能对你有所帮助。

0

Complex numbers在数学中有广泛的用途 - 作用是什么将取决于应用程序的上下文。

0

我想,如果签名是

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':'')); 
0

虚部应该是一个双过。

对于一个真正的(双X):

Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0; 
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0; 

像FinnNk建议,读了一些关于复杂的数学问题。

0

复数的平方根通常不是在你手上的计算器计算....

退房它是用来改变的变量极坐标DeMoivre定理 - 对于其中有一个封闭的形式一个复数的平方根公式a + ib。

Paul

相关问题