#include #include /* 関数sqrtを参照するために、math.hをincludeしているので、 コンパイル時には-lmオプションを指定する必要がある。 */ int main(void) { /* 変数を宣言する。 */ float a, b, c, d, x1, x2, xr, xi; /* 入力を求めるメッセージを標準出力に書き出す。 */ printf( "%s\n", "a x^2 + b x + c = 0:" ); printf( "%s\n", "a, b, c?" ); /* 関数scanfで値を読みこむ。 */ scanf( "%f,%f,%f", &a, &b, &c ); /* 判別式(根号の中身)を計算する。 */ d = b * b - 4. * a * c; /* ここからif文が始まる。 ここでは、"if (...) {...} else {...}"という構造になっている。 (...)の中に書かれた条件を満たす場合には 1番目の{...}の中に書かれた命令を実行し、 そうでない場合には2番目の{...}の中に書かれた命令を実行する。 ここでは、判別式Dの値が0以上の場合には実数解を、 負の場合には複素数解を求める。 */ if( d >= 0. ) { /* 判別式が0以上の場合には、 二次方程式の2つの実数解を計算する。 */ x1 = ( - b - sqrt( d ) ) / ( 2. * a ); x2 = ( - b + sqrt( d ) ) / ( 2. * a ); /* 結果を標準出力に書き出す。 この関数printfも、 判別式Dが0以上で実数解が存在する場合だけ実行される。 */ printf( "%s%f%s%f\n", "x = ", x1, ", ", x2 ); /* if文で指定した条件が真である場合には、 1番目の{...}の中に書かれた命令が実行される。 偽である場合には、 2番目の{...}の中に書かれた命令が実行される。 */ }else{ /* 判別式が負の場合には、 二次方程式の2つの複素数解を計算する。 xrが実部、xiが虚部である。 */ xr = - b / ( 2. * a ); xi = sqrt( - d ) / ( 2. * a ); /* 結果を標準出力に書き出す。 この関数printfも、 判別式Dが負で複素数解になる場合だけ実行される。 */ printf( "%s%f%s%f%s\n", "x = ", xr, " +- ", xi , " i" ); /* ここでif文が終了する。 */ } return 0; }