[C言語]構造体を用いて複素数の和、差、積を計算するプログラム[コード付き]

はいー 今回は構造体を使って複素数の計算をしていきます。
複素数はわかりますよね、実数と虚数両方を含めた数ですね。

構造体自体を一つの複素数として計算する関数を作っていきます。
ちなみにこれは以前書いた分数を構造体で表して計算するプログラムと本質は一緒なので興味があればそちらもどうぞ

またこの記事の一番下に全体のコードを貼っておくので参考にどうぞ。

コードの実装

早速やっていきましょう
まず構造体の定義、次に関数を作っていきます

構造体の定義

必要なのは実部と虚部だけですね。
サクッと作りましょう。

typedef struct complex{
    double r;
    double i;
}complex;

実部がr(real)で虚部がi(image)です。



和と差の関数

複素数の構造体を仮引数で二つ受け取って計算して、
返り値は結果の複素数にします。
まあ実部虚部でそれぞれ計算するだけです。

和のコードだけ貼っておきます。差は-にしただけ。

complex add(complex x, complex y){
    complex z;
    z.r = x.r + y.r;
    z.i = x.i + y.i;
    
    return z;
}





積の関数

これが便利ですね。作っていきましょう。
といっても虚数iが2乗されると-1になるってだけですね。
仮引数、返り値も和と一緒です

complex multi(complex x, complex y){
    complex z;
    z.r = x.r * y.r - x.i * y.i;
    z.i = x.r * y.i + x.i * y.r;
    
    return z;
}

はい完成です。簡単ですね。



全体のコード

#include <stdio.h>

typedef struct complex{
    double r;
    double i;
}complex;

complex add(complex x, complex y){
    complex z;
    z.r = x.r + y.r;
    z.i = x.i + y.i;
    
    return z;
}

complex sub(complex x, complex y){
    complex z;
    z.r = x.r - y.r;
    z.i = x.i - y.i;
    
    return z;
}

complex multi(complex x, complex y){
    complex z;
    z.r = x.r * y.r - x.i * y.i;
    z.i = x.r * y.i + x.i * y.r;
    
    return z;
}


int main(int argc, const char * argv[]) {
    complex a,b;
    a.r=1; a.i=3;
    b.r=2; b.i=6;
    
    complex c;
    c = add(a,b);
    
    printf("a = %f + %fi\n",a.r,a.i);
    printf("b = %f + %fi\n",b.r,b.i);
    printf("a + b = %f+%fi\n",add(a,b).r,add(a,b).i);
    printf("a - b = %f+%fi\n",sub(a,b).r,sub(a,b).i);
    printf("a * b = %f+%fi\n",multi(a,b).r,multi(a,b).i);
    return 0;
}

計算の関数は返り値が複素数の構造体なので
add(a,b).r や add(a,b).i をそのままprintfに入れても大丈夫です。


てことで完成。

ではまた

syumokuzame

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする