こんにちは、ハウスダストAです。今日は構造体を使った複素数の積の計算をやっていきます。今回もスマートなやり方はせず、ごり押しで行きます。
問題
2つの複素数を入力し、その積を表示するプログラムを作成せよ、ただし複素数は構造体により実現し、
関数を使用しないこと
目次
やりたいこと
例えば複素数
1+i、2+3i
があったとすると積は
(1+i)×(2+3i)=(1×2)+(1×3i)+(2×i)+(i×3i)
と展開できi×iはー1であるため、最終的に
{(1×2)ー(3×1)}+{(1×3)+(2×1)}i
①(実部) ②(虚部)
というように実数部分と虚数部分に分けて計算することができます。
これをプログラムします。
プログラム
#include <stdio.h>
int main(void){
struct complex_tag{ //複素数の構造体・・・ⓐ
double real; //実数部分を入れる用
double imaginary; //虚数部分を入れる用(複素数はdoubleでとらないといけないらしい)
};
double seki1,seki2; //上で書いた①と②に相当するやつでseki1に実部、seki2に虚部が入ります。
struct complex_tag a,b; //ここで構造体を定義します。ⓐの形の構造体a,bを定義するという意味です。
printf("1つ目の複素数の実部を入力してください\n"); scanf("%lf",&a.real);
printf("1つ目の複素数の虚部を入力してください\n"); scanf("%lf",&a.imaginary);
//実部の入力
printf("2つ目の複素数の実部を入力してください\n"); scanf("%lf",&b.real);
printf("2つ目の複素数の虚部を入力してください\n"); scanf("%lf",&b.imaginary);
//虚部の入力
seki1=a.real*b.real-a.imaginary*b.imaginary;
//ここで①の計算をしています。seki1=(1つ目の実部×2つ目の実部)-(1つ目の虚部×2つ目の虚部)を計算している、
seki2=a.real*b.imaginary+a.imaginary*b.real;
//ここで②の計算をしています。seki2=(1つ目の実部×2つ目の虚部)-(1つ目の虚部×2つ目の実部)を計算している。
printf("2つの複素数の積は%.1f+%.1fiです。\n",seki1,seki2);
//実行結果doubleなので%dではないことに注意
return(0)
}
実行結果
1つ目の複素数の実部を入力してください
1
1つ目の複素数の虚部を入力してください
1
2つ目の複素数の実部を入力してください
2
2つ目の複素数の虚部を入力してください
3
2つの複素数の積は-1.0+5.0iです。
もしわからない点があったらコメントしてくれたら可能な限り答えます。
ハウスダストAでした。
おすすめの参考書
|