• ベストアンサー

C言語での複素数の四則演算について

C言語で、大きさ2の配列を2つ使って、複素数の四則演算のプログラムを作るのですが、配列をどう使うか分からず手が出せない状態です。 C言語を始めたばかりですので、基礎的なことしか分かりませんが、回答お願いします。

  • zeuth
  • お礼率100% (3/3)

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

#まぁ普通は#1の通り構造体とかcomplex.hだろうと思いますが、「配列で」という課題なのだろうということで。 配列がc[2]で複素数がa+biならc[0]=a,c[1]=bのように、それぞれに実部と虚部を入れることを想定しているのでしょう。 あとは普通の複素数演算と同じ要領で。

zeuth
質問者

お礼

回答ありがとうございます。 配列の使い方が分からなかったのですが、この回答を参考に作ってみようと思います。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

正攻法だと、 #include <complex.h> #include <stdio.h> int main(void) {  double complex a[2];  a[0] = 1.0 + 1.0*I;  a[1] = -1.0 + 2.0*I;  double complex t;  t = a + b;  printf("%f + %fi\n", creal(t), cimag(t));  t = a - b;  printf("%f + %fi\n", creal(t), cimag(t));  t = a * b;  printf("%f + %fi\n", creal(t), cimag(t));  t = a / b;  printf("%f + %fi\n", creal(t), cimag(t));  return 0; } ですね。 ただ、これだと大きさ2の配列を1つしか使っていません。 処理系不明なので正確なことはいえませんが、組み込み型で複素数が扱えるのであればそうすべきです。

zeuth
質問者

お礼

回答ありがとうございます。 <complex.h>を学んでいないので使うことができないんですが、この回答を参考に<complex.h>を勉強してみようと思います。

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.1

複素数は構造体を使うのが普通ですよ。 検索すればいろいろでてくるでしょう。 最新のC言語規格だと複素数も標準で入ってるとか。

zeuth
質問者

お礼

回答ありがとうございます。 検索すると構造体や<complex.h>を使ったものが見つかるのですが、まだ学んでないので使えないんですよ。

関連するQ&A

  • C言語の四則演算

    C言語で次のようなプログラムを作りたいのですが ソースを教えていただけないでしょうか? 四則演算のみの計算式を標準入力から受け取り計算式の通りに計算を行い計算式と答えを標準出力に出力する どなたか教えてください

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }

  • C言語の四則演算について

    これからプログラミングを勉強する為、C言語の入門書を買ってきたのですが、その中で、コンピューターでは四則演算を1の補数と2の補数を用いてすべて足し算で行うと書いてありました。詳しく解説してないのでどういうことなのか良くわかりません。掛け算や割り算などを足し算でできるのでしょうか。 この辺のところに詳しい方、ぜひ、ご解説をお願いします。

  • c言語で四則演算の問題をランダムでだしたいです

    c言語で四則演算の問題をランダムでだしたいです。 学校の課題でだされていて誰か助けてください

  • C言語:2つの複素数(分数)の四則演算

    下記のプログラムを組んでみて、発展として分数の形で複素数の四則演算のプログラムを作りたいのですが、どうにもややこしく、困っています。 よろしければ御指導よろしくお願いします。 /* 複素数を表す構造体 2つの複素数の四則演算 */ #include <stdio.h> #include <stdlib.h> typedef struct { double real; /* 実数部分 */ double imag; /* 虚数部分 */ }COMPLEX; /* 二つの複素数の和を返す */ COMPLEX comp_add(COMPLEX x, COMPLEX y) { COMPLEX tmp; tmp.real = x.real + y.real; /* 実数部分の和 */ tmp.imag = x.imag + y.imag; /* 虚数部分の和 */ return (tmp); } /* 二つの複素数の差を返す */ COMPLEX comp_sub(COMPLEX x, COMPLEX y) { COMPLEX tmp; tmp.real = x.real - y.real; /* 実数部分の差 */ tmp.imag = x.imag - y.imag; /* 虚数部分の差 */ return (tmp); } /* 二つの複素数の積を返す */ COMPLEX comp_mul(COMPLEX x, COMPLEX y) { COMPLEX tmp; tmp.real = (x.real * y.real) - (x.imag * y.imag); tmp.imag = (x.real * y.imag) + (y.real * x.imag); return (tmp); } /* 二つの複素数の商を返す */ COMPLEX comp_div(COMPLEX x, COMPLEX y) { COMPLEX tmp; tmp.real =(x.real*y.real+x.imag*y.imag)/(y.real*y.real+y.imag*y.imag); tmp.imag = (x.imag*y.real-x.real*y.imag)/(y.real*y.real+y.imag*y.imag); return (tmp); } int main( int argc, char **argv ) { COMPLEX a, b, c; a.real = strtod( argv[1], NULL ); a.imag = strtod( argv[2], NULL ); b.real = strtod( argv[3], NULL ); b.imag = strtod( argv[4], NULL ); c = comp_add(a, b); /* 複素数の和を c に代入 */ printf( "(%f+j%f)*(%f+j%f)=(%3.1lf+j%3.1lf)\n", a.real,a.imag,b.real,b.imag,c.real,c.imag ); c = comp_sub(a, b); /* 複素数の差を c に代入 */ printf( "(%f+j%f)*(%f+j%f)=(%3.1lf+j%3.1lf)\n", a.real,a.imag,b.real,b.imag,c.real,c.imag ); c = comp_mul(a, b); /* 複素数の積を c に代入 */ printf( "(%f+j%f)+(%f+j%f)=(%3.1lf+j%3.1lf)\n", a.real,a.imag,b.real,b.imag,c.real,c.imag ); c = comp_div(a, b); /* 複素数の商を c に代入 */ printf( "(%f+j%f)+(%f+j%f)=(%3.1lf+j%3.1lf)\n", a.real,a.imag,b.real,b.imag,c.real,c.imag ); return( 0 ); }

  • C言語で四則演算を使って結果が10になる数式

    C言語のプログラミングについて質問です。 四つの一桁の数字を入力して四則演算を使って結果が10になる数式を作りたいのですが、イメージが湧きません。 教えていただけますか? 例:1234enterkey 答え2*3+1*4 数値の変数はint型でお願いします。int型ですので小数点以下を使って10になる結果は出さなくて宜しいです。お願いします。

  • C言語の複素数についてです。

    C言語で複素数を使うことになりましたが、複素数をプログラム上でどう使うかわかりません。 粒子の複素屈折率を計算してシミュレーションするというものです。 その複素屈折率は 0.57+2.74i と表されます。iが虚数です。 一般的にCプログラムで複素数を使えるようにする一番簡単な方法はなんでしょうか? 具体的に参考にできるプログラムコードとかあれば是非教えて下さい。 #define complex とか使うのでしょうか? おそらくcomplexというものを使うんだとは思います。実数部と虚数部を分けて考えるのでしょうか。 C言語、いまいちよくわからなくて……どなたか詳しい方、教えて下さい。

  • C言語で行列の演算するには?

    C言語で行列を取り扱うにはどうしたらいいのですか? 二次元配列というのは行列の演算のことなのですか? 初心者なのでよく分からないのでなるべく丁寧に教えてもらえるとうれしいのですが。よろしくお願いします。

  • 繰り返しの演算

    C言語についてです 数値データのファイルからデータを読み取り四則演算をするプログラムをつくっているのですが、2つでペアの数値データが4つあります。これを繰り返し演算できるようにする関数はありますか?

  • 複素数の演算について

    複素数ならいたてなんですが、そもそも複素数を考えるのは認めるとして、複素数の割り算のようなことをしても大丈夫なんでしょうか。 たとえば1/(c+id) について(c、dは実数)、これは有理化すると複素数になりますが、これはそもそも逆数を取るという操作をしても良いのでしょうか? また複素数は大きさがないとありました。 つまり「量?」がないものについて演算しても良いのでしょうか? また(c+id)/(c+id)について、複素数は大きさ(量?)がないものに「おなじ複素数だから」という理由? で(c+id)/(c+id)=1としても良いのでしょうか?実数についてa/aは分子分母同じ量だから=1となりますよね? もしかしたら私はとんでもない勘違いをしているのかもしれません。 以上の質問、よろしくお願いします。

専門家に質問してみよう