はじめに
2 次方程式は、a、b、およびcが定数である形の方程式ax²+bx+c=0です。この実験では、2 次方程式の解を求めるプログラムを書く方法を学びます。
2 次方程式を解くには、次の式を使用します。
x = (-b ± sqrt(b² - 4ac)) / 2a
注:コーディングを練習し、gcc を使ってコンパイルと実行方法を学ぶには、自分で
~/project/main.cファイルを作成する必要があります。
cd ~/project
## main.cを作成する
touch main.c
## main.cをコンパイルする
gcc main.c -o main
## mainを実行する
./main
入力係数を取得する
2 次方程式の係数 a、b、および c について、ユーザーからの入力を受け取ります。これらの係数は、2 次方程式の解を計算するために使用されます。
float a, b, c, determinant, r1, r2, real, imag;
printf("\nEnter coefficients a, b and c: ");
scanf("%f%f%f", &a, &b, &c);
判別式を計算する
次に、2 次方程式の判別式の値を、次の式を使って計算します。
判別式 = b*b - 4*a*c;
判別式 = b*b - 4*a*c;
解の性質を確認する
次に、ステップ 2 で計算した判別式の値に基づいて、2 次方程式の解の性質を確認します。判別式が 0 より大きい場合、解は実数で異なります。判別式が 0 に等しい場合、解は実数で等しくなります。判別式が 0 未満の場合、解は複素数で虚数です。
if(判別式 > 0) // 両方の解は実数
{
r1 = (-b + sqrt(判別式))/2*a; // 括弧が重要
r2 = (-b - sqrt(判別式))/2*a;
printf("\n\n\n解は:%.2f と %.2f ", r1, r2);
}
else if(判別式 == 0) // 両方の解は実数で等しい
{
r1 = r2 = -b/(2*a); // 括弧が重要
printf("\n\n\n解は:%.2f と %.2f ", r1, r2);
}
/*
判別式 < 0 - 両方の解は虚数で、
real + i*imaginary の形
*/
else
{
real = -b/(2*a);
imag = sqrt(-判別式)/(2*a);
printf("\n\n\n解は %.2f + i%.2f と %.2f - i%.2f ", real, imag, real, imag);
}
解を出力する
最後に、ステップ 3 で計算した解の性質に基づいて、2 次方程式の解を出力します。
完全なコードを書く
#include<stdio.h>
#include<math.h> // sqrt() 関数を使用するために必要
int main()
{
float a, b, c, 判別式, r1, r2, real, imag;
printf("\n係数 a、b、c を入力してください:");
scanf("%f%f%f", &a, &b, &c);
判別式 = b*b - 4*a*c;
if(判別式 > 0) // 両方の解は実数
{
r1 = (-b + sqrt(判別式))/2*a; // 括弧が重要
r2 = (-b - sqrt(判別式))/2*a;
printf("\n\n\n解は:%.2f と %.2f ", r1, r2);
}
else if(判別式 == 0) // 両方の解は実数で等しい
{
r1 = r2 = -b/(2*a); // 括弧が重要
printf("\n\n\n解は:%.2f と %.2f ", r1, r2);
}
/*
判別式 < 0 - 両方の解は虚数で、
real + i*imaginary の形
*/
else
{
real = -b/(2*a);
imag = sqrt(-判別式)/(2*a);
printf("\n\n\n解は %.2f + i%.2f と %.2f - i%.2f ", real, imag, real, imag);
}
printf("\n\n\n\n\t\t\tコーディングは楽しい!\n\n\n");
return 0;
}
まとめ
この実験では、2 次方程式の解を求めるための C 言語プログラムを書く方法を学びました。ユーザーから 2 次方程式の係数を入力し、判別式の値に基づいて解の性質を判定して解を計算しました。そして、解の性質に基づいて 2 次方程式の解を出力しました。



