Я полагаю, что если подпись
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':''));
Что случилось? Он возвращает конструкцию 'Complex' по значению. Первый фрагмент кода использует Complex для определения структуры и определения переменной: он не может работать. – ntd
Вам не хватает 'typedef', если это возможно? – pmg
Помните, что и структуры, и typedefs имеют * отдельные * пространства имен в C.Таким образом, как «Комплекс», так и «Структурный комплекс» являются допустимыми типами с указанным выше определением. Кроме того, обязательно: http://en.wikipedia.org/wiki/Complex_number. – 2009-10-25 22:36:30