上記のプログラムでは main() 関数内の命令が書かれた順番に実行さ れて行きますが、これだけでは簡単なことしか出来ません。ここでは条件判定 の結果によって次にどの命令を実行するか決定する if 文 を使って みましょう。
以下のプログラムは与えられた実係数 2 次方程式を解くものです。2次方 程式を解くためには判別式を計算してから、その符号を調べることで、その 後の処理を選択する必要がありますが、こういうことをするために if はぴったりです。
| example1.c |
/* example1.c -- 2 次方程式を解く */
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,D;
printf("実係数の2次方程式 a * x**2 + b * x + c = 0 を解く\n");
printf("a,b,c=?\n");
scanf("%lg %lg %lg", &a, &b, &c);
if (a == 0.0) {
printf("a = 0 ではいけません\n");
return 0;
}
D = b * b - 4 * a * c;
if (D > 0.0) {
printf("相異なる 2 つの実根を持ちます\n");
printf("%g\n", (- b + sqrt(D)) / (2 * a));
printf("%g\n", (- b - sqrt(D)) / (2 * a));
}
else if (D == 0.0) {
printf("重根を持ちます\n");
printf("%g\n", - b / (2 * a));
}
else {
printf("相異なる 2 つの虚根を持ちます\n");
printf("実部 = %g\n", - b / (2 * a));
printf("虚部 = %g\n", sqrt(- D) / (2 * a));
}
return 0;
}
|
実際に三つの 2 次方程式
,
,
を
解いてみます。
| 実行結果 |
oyabun% ./example1 実係数の2次方程式 a * x**2 + b * x + c = 0 を解く a,b,c=? 1 -5 6 相異なる 2 つの実根を持ちます 3 2 oyabun% ./example1 実係数の2次方程式 a * x**2 + b * x + c = 0 を解く a,b,c=? 1 2 1 重根を持ちます -1 oyabun% ./example1 実係数の2次方程式 a * x**2 + b * x + c = 0 を解く a,b,c=? 1 2 3 相異なる 2 つの虚根を持ちます 実部 = -1 虚部 = 1.41421 oyabun% |