next up previous contents
Next: 2.1.2.0.1 文法メモ: Up: 2.1 イントロ Previous: 2.1.1.0.1 文法メモ:

2.1.2 if 文と goto 文

上記のプログラムでは 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 次方程式 $ x^2-5x+6=0$, $ x^2+2x+1=0$, $ x^2+2x+3=0$ を 解いてみます。

実行結果

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%




next up previous contents
Next: 2.1.2.0.1 文法メモ: Up: 2.1 イントロ Previous: 2.1.1.0.1 文法メモ:
Masashi Katsurada
平成18年4月28日