上記のプログラムでは 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% |