二次方程式の解を求めるC言語のプログラム

2025年12月22日月曜日

t f B! P L
  今回は弊学の課題に出た、題名のプログラミングについて解説してみたいと思います。
念のため課題締め切り後にこのブログを公開しています。

やること

二次方程式「ax²+bx+c」としたとき、ユーザにa, b, cの値それぞれを入力させます。
それを以下の公式にのっとって計算し、解を出します。

x = (-b ± √(b²-4ac)) / 2a

また、解の形式は場合によってかわるので、判別式を先に計算する必要があります。
D = b²-4ac

D > 0の場合、2つの実数解、D = 0の場合、重解、D < 0の場合、2つの虚数解。
では早速プログラムを構成していきましょう。

導入・入力部分

#include <stdio.h>
#include <math.h>

int main(void){
    double a, b, c;
    printf("aを入力してください:");
    scanf("%lf", &a);
    printf("bを入力してください:");
    scanf("%lf", &b);
    printf("cを入力してください:");
    scanf("%lf", &c);
}

まずは最初の導入部分です。今回は√をとるところがあるため、math.hもインクルードしています。
そして、それぞれscanfで値を入力してもらいます。
また、今回は実数にも対応するため、double型を使っています。

計算部分

#include <stdio.h>
#include <math.h>

int main(void){
    double a, b, c, D, x1, x2;
    printf("aを入力してください:");
    scanf("%lf", &a);
    printf("bを入力してください:");
    scanf("%lf", &b);
    printf("cを入力してください:");
    scanf("%lf", &c);
    D = (b * b) - (4 * a * c);
	if(D < 0){
		x1 = -b / (2 * a);
		x2 = sqrt(fabs(D)) / (2 * fabs(a));
	}else if (D > 0) {
		x1 = (-b + sqrt(D)) / (2 * a);
		x2 = (-b - sqrt(D)) / (2 * a);
	}
	else if (D == 0) {
		x1 = -b / (2 * a);
	}
}

計算部分を追加しました。最初の変数を定義するところでDとx1, x2が増えていることに注意してください。
±を使って表示してもよかったかもしれませんが、今回はx1,x2としてそれぞれ表示する感じにしたいと思います。

虚数解のところがよくわからない場合、以下の画像を参考にしてください

出力部分

最後に出力部分を追加して終了です。これが完成したコードです。
#include <stdio.h>
#include <math.h>

int main(void){
    double a, b, c, D, x1, x2;
    printf("aを入力してください:");
    scanf("%lf", &a);
    printf("bを入力してください:");
    scanf("%lf", &b);
    printf("cを入力してください:");
    scanf("%lf", &c);
    D = (b * b) - (4 * a * c);
	if(D < 0){
		x1 = -b / (2 * a);
		x2 = sqrt(fabs(D)) / (2 * fabs(a));
		printf("x1 = %lf + i %lf\nx2 = %lf - i %lf\n", x1, x2, x1, x2);
	}else if (D > 0) {
		x1 = (-b + sqrt(D)) / (2 * a);
		x2 = (-b - sqrt(D)) / (2 * a);
		printf("x1 = %lf\nx2 = %lf\n", x1, x2);
	}
	else if (D == 0) {
		x1 = -b / (2 * a);
		printf("x = %lf\n", x1);
	}
	return 0;
}

出力形式も合せればこうなります。
多分もっといいやりかたがあるかと思いますが、ひとまずはこれで求めることができます。
以上、ありがとうございました。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ