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

Я видел, как люди используют его в качестве типа, как:У меня-структуру, но я не знаю, как использовать его

Complex sqrt(double x) { 
} 

как «реальные» и «Img» играть роль в этом типе функции? Благодаря

+1

Что случилось? Он возвращает конструкцию 'Complex' по значению. Первый фрагмент кода использует Complex для определения структуры и определения переменной: он не может работать. – ntd

+0

Вам не хватает 'typedef', если это возможно? – pmg

+0

Помните, что и структуры, и typedefs имеют * отдельные * пространства имен в C.Таким образом, как «Комплекс», так и «Структурный комплекс» являются допустимыми типами с указанным выше определением. Кроме того, обязательно: 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); 

Тогда х представляет собой реальную ценность. Таким образом, Complex.img может быть 0/1, представляющим, было ли 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

мнимая часть должна быть двойной тоже.

Для реального (двойной х):

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

Как FinnNk предложил, прочитать немного о сложных математиках.

0

квадратный корень из комплексного числа является расчет обычно не найти на руки калькулятор ....

Заканчивать теорему Муавра, которая используется для изменения переменных в полярных координатах - для которых существует замкнутая форма формула для квадратного корня комплексного числа, a + ib.

Paul

Смежные вопросы