[C言語]2次方程式を解く方法をご紹介します!

2jihouteisiki-001

こんにちは。Takuya.B(@TB_IQ)です。

研究で2次方程式を解く機会がありました。もちろん中学3年生で習うような”x=3,4″のようなシンプルな解ではありません。C言語で2次方程式を解くプログラムを作りたい方の為に方法をご紹介します!

スポンサーリンク

2次方程式を解くには”解の公式”を使う!

2次方程式を解くには一般的に因数分解をする方法がありますが、プログラムに解かせる為にはおなじみ“解の公式”を使います。

2jihouteisiki-001

解の公式にa,b,cの値をぶっ込んでやれば、解が得られるわけですが…

2次方程式の解は3種類に分けることができます。

  1. 異なる実数解
  2. 重解
  3. 異なる虚数解

これら3種類はルートの中身が正なのか負なのか0なのかによって判別することができます。そのためルートの中身の部分は“判別式”と呼ばれます。

実際のプログラム

サンプルコード

異なる虚数解に関しては別途”real”,”imag”を宣言していますが、便宜上宣言しているに過ぎませんので、kai1,kai2に置き換えた方がスッキリします。

#include<stdio.h>
#include<math.h>        //sqrt関数を使うので必ずインクルード

int main(void)
{
	float a,b,c;
	float d; /*判別式*/
	float kai1, kai2;	/*2次方程式の解*/
	float real, imag;	/*2次方程式の虚数解*/

	printf("2次方程式の係数a,b,cを入力して下さい。\n");
	printf("a -->");
	scanf("%f", &a);
	printf("b -->");
	scanf("%f", &b);
	printf("c -->");
	scanf("%f", &c);

	/*判別式を計算する*/
	d = b*b -4*a*c;     //b*bはpow(b,2)としてもok
	
	/*判別式でif文(条件分け)をする*/
	if(d>0){
		
		kai1 = (-b + sqrt(d)) / (2*a) ;
		kai2 = (-b - sqrt(d)) / (2*a) ;

		printf("x= %.3f , %.3f ---異なる実数解\n", kai1, kai2);

	}

	else if(d==0){

		kai1 = kai2 = -b / (2*a);

		printf("x= %.3f ---二重解\n", kai1);
	}

	else {
		/*解の計算*/
		real = -b / (2*a);
		imag = sqrt(-d) / (2*a);

		printf("x= %.3f ± %.3f i ---異なる虚数解\n", real, imag);
	}

	return 0;
}

出力した結果は以下のようになります。

2jikai

研究ではプログラムで積分計算をさせることが多いのですが、まさか2次方程式を解くとは思いませんでした…。一度、作っておくと便利ですので参考までに。

スポンサーリンク

まとめ

C言語で2次方程式を解くためのまとめです。

  1. 解の公式を使う
  2. 判別式をif文で条件分岐(正・0・負)

まとめてみるとシンプルですね。

About me
Takuya.B
大学院博士課程まで進学して宇宙系の研究に取り組むも中退。現在は本業iOSエンジニアとして勤務する傍ら、副業として個人ブロガー向けのWordPressカスタマイズサービスに取り組んでいる。

WordPressテーマ『MIKA』製作者でありブログサポートコミュニティ『Tea Room』運営。