Как взять и просмотреть сложный ввод типа в c в этой программе? [Дубликат]

Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.

Например:

string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)

if (testString.Length == 0) // Throws a nullreferenceexception
{
    //Do something
} 

Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.

По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит

Дополнительная информация находится в C # NullReferenceException и Null Parameter .

102
задан Dmitri 21 June 2011 в 01:04
поделиться

6 ответов

Этот код вам поможет, и это довольно понятно:

#include <stdio.h>      /* Standard Library of Input and Output */
#include <complex.h>    /* Standard Library of Complex Numbers */

int main() {

    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;

    printf("Working with complex numbers:\n\v");

    printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n", creal(z1), cimag(z1), creal(z2), cimag(z2));

    double complex sum = z1 + z2;
    printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));

    double complex difference = z1 - z2;
    printf("The difference: Z1 - Z2 = %.2f %+.2fi\n", creal(difference), cimag(difference));

    double complex product = z1 * z2;
    printf("The product: Z1 x Z2 = %.2f %+.2fi\n", creal(product), cimag(product));

    double complex quotient = z1 / z2;
    printf("The quotient: Z1 / Z2 = %.2f %+.2fi\n", creal(quotient), cimag(quotient));

    double complex conjugate = conj(z1);
    printf("The conjugate of Z1 = %.2f %+.2fi\n", creal(conjugate), cimag(conjugate));

    return 0;
}

& nbsp; с:

creal(z1): получить действительную часть (для float crealf(z1), для длинного двойного creall(z1))

cimag(z1): получить мнимую часть (для float cimagf(z1), для long double cimagl(z1))

Еще один важный момент, который следует помнить при работе со сложными числами, состоит в том, что функции, такие как cos(), exp() и sqrt(), должны быть заменены сложными формами, например ccos(), cexp(), csqrt().

163
ответ дан Shelvacu 25 August 2018 в 00:11
поделиться

Чтобы извлечь действительную часть комплекснозначного выражения z, используйте обозначение как __real__ z. Аналогично, используйте атрибут __imag__ на z для извлечения мнимой части.

Например:

__complex__ float z;
float r;
float i;
r = __real__ z;
i = __imag__ z;

r - действительная часть комплексного числа «z» i - мнимая часть комплексного числа «z»

-1
ответ дан Cyclops 25 August 2018 в 00:11
поделиться

Для удобства можно включить библиотеку tgmath.h для макросов типа генерации. Он создает то же имя функции, что и двойная версия для всех типов переменных. Например, например, он определяет макрос sqrt(), который расширяется до функции sqrtf(), sqrt() или sqrtl(), в зависимости от типа предоставленного аргумента.

Поэтому не нужно помнить имя соответствующей функции для разных типов переменных!

#include <stdio.h>
#include <tgmath.h>//for the type generate macros. 
#include <complex.h>//for easier declare complex variables and complex unit I

int main(void)
{
    double complex z1=1./4.*M_PI+1./4.*M_PI*I;//M_PI is just pi=3.1415...
    double complex z2, z3, z4, z5; 

    z2=exp(z1);
    z3=sin(z1);
    z4=sqrt(z1);
    z5=log(z1);

    printf("exp(z1)=%lf + %lf I\n", creal(z2),cimag(z2));
    printf("sin(z1)=%lf + %lf I\n", creal(z3),cimag(z3));
    printf("sqrt(z1)=%lf + %lf I\n", creal(z4),cimag(z4));
    printf("log(z1)=%lf + %lf I\n", creal(z5),cimag(z5));

    return 0;
}
1
ответ дан Guillaume Jacquenot 25 August 2018 в 00:11
поделиться

Понятие комплексных чисел было введено в математике, из-за необходимости вычисления отрицательных квадратичных корней. Концепция комплексного номера была взята различными инженерными областями.

Сегодня эти комплексные числа широко используются в современных инженерных областях, таких как физика, электроника, механика, астрономия и т. Д. ...

Реальная и мнимая часть примера с отрицательным квадратным корнем:

#include <stdio.h>   
#include <complex.h>

int main() 
{
    int negNum;

    printf("Calculate negative square roots:\n"
           "Enter negative number:");

    scanf("%d", &negNum);

    double complex negSqrt = csqrt(negNum);

    double pReal = creal(negSqrt);
    double pImag = cimag(negSqrt);

    printf("\nReal part %f, imaginary part %f"
           ", for negative square root.(%d)",
           pReal, pImag, negNum);

    return 0;
}
2
ответ дан LXSoft 25 August 2018 в 00:11
поделиться

Сложные типы находятся на языке C со стандарта C99 (опция -std=c99 GCC). Некоторые компиляторы могут реализовать сложные типы даже в более ранних режимах, но это нестандартное и не переносное расширение (например, IBM XL, GCC, может быть Intel, ...).

Вы можете начать с http://en.wikipedia.org/wiki/Complex.h - дает описание функций из complex.h

Это руководство http: // pubs .opengroup.org / onlinepubs / 009604499 / basedefs / complex.h.html также дает некоторую информацию о макросах.

Чтобы объявить сложную переменную, используйте

  double _Complex  a;        // use c* functions without suffix

или

  float _Complex   b;        // use c*f functions - with f suffix
  long double _Complex c;    // use c*l functions - with l suffix

Чтобы задать значение в комплексе, используйте макрос _Complex_I из complex.h:

  float _Complex d = 2.0f + 2.0f*_Complex_I;

(на самом деле могут быть некоторые проблемы здесь с (0,-0i) числами и NaN в одной половине комплекса)

Модуль cabs(a) / cabsl(c) / cabsf(b); Реальная часть creal(a), Imaginary - cimag(a). carg(a) для сложного аргумента.

Для прямого доступа (чтения / записи) реальной части изображения вы можете использовать это unportable GCC-расширение :

 __real__ a = 1.4;
 __imag__ a = 2.0;
 float b = __real__ a;
38
ответ дан osgx 25 August 2018 в 00:11
поделиться

Complex.h

#include <stdio.h>      /* Standard Library of Input and Output */
#include <complex.h>    /* Standart Library of Complex Numbers */

int main() 
{
    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;

    printf("Working with complex numbers:\n\v");

    printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n", 
           creal(z1), 
           cimag(z1), 
           creal(z2), 
           cimag(z2));

    double complex sum = z1 + z2;
    printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));
}
7
ответ дан SingerOfTheFall 25 August 2018 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: