サイトマップ / C言語講座出入り口総目次目次:構造体>複素数を構造体で表現

青い直線

複素数を構造体で表現

青い直線

[構造体とは]←このソース→[構造体のパッディング]

/* ソースプログラムの説明

今日は複素数の和と積を求める関数を自作します。複素数は実数と虚数からできています。虚数とは、2乗するとマイナスになる数です。複素数の一般形を下記に示します。

	z = x + yi

z を2乗するとこのようになります。

	z*z = x*x - y*y + 2*x*yi

複素数を表すデータ型としては、複素数は二つの値が組になっているので構造体が適当と考えられます。 そこで次の構造体を宣言します。

	typedef struct complex complex;	// complexというデータ型を定義

	struct complex {
		double real;		// 実数部分
		double imaginary;	// 虚数部分
	};
構造体宣言の前に、complexというデータ型を定義しておきます。
AddComplex( )は二つの複素数を引数にとり、複素数の和を返します。
MulComplex( )は二つの複素数を引数にとり、複素数の積を返します。

main( )関数のなかで何度も同じ書式のprintf( )を呼ぶのは冗長なので、複素数をコンソールに表示する関数ShowComplex( )を作りました。ShowComplex( )は構造体名を表す文字列と複素数を引数に取ります。このような関数を作ることは、ソースを見やすくするという効果もあります。 */

/* ここからソースプログラム */

#include <stdio.h>

typedef struct complex complex;	/* complex というデータ型を定義 */

struct complex {
    double real;        /* 実数部分 */
    double imaginary;   /* 虚数部分 */
};

complex AddComplex(complex x, complex y);
complex MulComplex(complex x, complex y);
void ShowComplex(char varname[ ], complex x);
void main(void);

  /* 二つの複素数の和を返す */
complex AddComplex(complex x, complex y)
{
    complex z;

    z.real = x.real + y.real;                   /* 実数部分の和 */
    z.imaginary = x.imaginary + y.imaginary;    /* 虚数部分の和 */

    return (z);
}

  /* 二つの複素数の積を返す */
complex MulComplex(complex x, complex y)
{
    complex z;

    z.real = x.real * y.real - x.imaginary * y.imaginary;
    z.imaginary = x.real * y.imaginary + y.real * x.imaginary;

    return (z);
}

  /* 複素数をコンソールに表示 */
void ShowComplex(char varname[ ], complex x)
{
    printf("%s = %3.1lf + %3.1lfi\n", varname, x.real, x.imaginary);
}

void main(void)
{
    complex x, y, z;

    /* 二つの複素数に値を代入 */
    x.real = 1.0;
    x.imaginary = 2.0;

    y.real = 2.0;
    y.imaginary = 1.0;

    ShowComplex("x", x);
    ShowComplex("y", y);

    z = AddComplex(x, y);        /* 複素数の和を z に代入 */
    ShowComplex("x + y", z);

    z = MulComplex(x, y);        /* 複素数の積を z に代入 */
    ShowComplex("x * y", z);
}

/* ここまでソースプログラム */

/* 複素数については、C++ではcomplex クラスで扱います。Cにはそのような機能はありません。フォートランでは最初からデータ型が用意されています。フォートランは科学計算を目的として作られた言語です。 */

[構造体とは]←このソース→[構造体のパッディング]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:構造体>複素数を構造体で表現