1

数値の sqrt を求める小さな C コードを作成しました。そして、プログラムに負の数の平方根も見つけてもらいたいです。私は複雑な算術演算を実行するためにcomplex.hといくつかの関数に出くわしました.私はそれらを利用しましたが、コンパイル中にいくつかの警告メッセージが表示されます.コードは正と負の数の平方根を正しく計算しません.

1)複素数を印刷して取り込むためのprintfとscanfの正しいフォーマット指定子は何ですか? 正確にどこが間違っているのか教えてください。gcc コンパイラを使用しており、OS は 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
4

3 に答える 3

2

C99 から:

6.2.5/13 タイプ

各複合型には、対応する実数型の正確に 2 つの要素を含む配列型と同じ表現とアライメントの要件があります。最初の要素は複素数の実部に等しく、2 番目の要素は虚部に等しくなります。

したがって、1つの可能性として、次を使用できます。

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

float complex実数部と虚数部を区切る空白を使用して、型を読み取ること。

于 2013-06-01T15:19:12.737 に答える
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);
  }
于 2013-06-01T15:15:35.997 に答える
1

printfscanf複素数をネイティブにサポートしていませんが、問題ありません。あなたは十分に簡単にフォーマットを書くことができます:

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

これreで、実数部と虚数部が含まれます (ただし、 orimの後のスペースは受け入れられないため、拒否されますが、andは問題ありません。+-3 + 2i3 +2i3+2i

同じことが印刷にも当てはまります。

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

変数を3+2iフォームに出力します。

最後に、それはあなたの質問の直接の一部ではないようですが、負の数の平方根は単に正の値の平方根に を掛けたものiです。

于 2013-06-01T15:21:25.087 に答える