使用complex.h的问题

时间:2013-06-01 15:12:04

标签: c

我写了一个小的c代码来查找数字的sqrt。我希望程序甚至可以找到负数的sqrt。我遇到了complex.h和几个函数来执行复杂的算术。我已经使用了它们,并且在编译时我收到了一些警告信息。代码没有正确计算正数和负数的平方根。

1)printf和scanf用于打印和记录复数的正确格式说明符是什么? 请让我知道我哪里出错了。我正在使用gcc编译器,操作系统是Ubuntu 12.04 LTS。我已经附加了代码和输出。

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


    int main()
    {
      float complex var,op;
      printf(" Enter the number : " );
      scanf("%lf",&var);
      op=csqrt(var);
      printf("%lf \n",op);
    }

    o/p Enter the number : 4
        0.011604
    Another o/p Enter the number : -4
        -0.011604

3 个答案:

答案 0 :(得分:2)

来自C99:

  

6.2.5 / 13类型

     

每种复杂类型具有相同的表示和对齐方式   要求作为一个数组类型,恰好包含两个元素   相应的实际类型;第一个元素等于实部,   和复数的虚部的第二个元素。

作为一种可能性,您可以使用:

scanf("%f %f",&var[0], &var[1]);

float complex类型读取,用空格分隔实部和虚部。

答案 1 :(得分:1)

要查找负数的平方根,可以使用以下代码

  printf(" Enter the number : " );
  scanf("%lf",&var);
  if(var < 0)
  {
     op=csqrt(-var);
     printf("The square root is %lfi \n",op);
  }
  else
  {
     op=csqrt(var);
     printf("The square root is %lf \n",op);
  }

答案 2 :(得分:1)

printfscanf没有复杂数字的原生支持,但这没关系;你可以很容易地写出格式:

scanf( "%f %fi", &re, &im );

现在reim包含实部和虚部(虽然它不会在+-之后接受空格,所以3 + 2i会被拒绝,但3 +2i3+2i没问题。

印刷也是如此;

printf( "%f%+fi", re, im );

将以3+2i形式打印变量。

最后,虽然它似乎不是你问题的直接部分,但负数的平方根只是正值的平方根乘以i