#include #include int main(void) { /* 変数を宣言する。 */ int n, m; float x, y, y1, c; /* 入力を求めるメッセージを標準出力に書き出す。 */ printf( "%s\n", "y = exp(x):" ); printf( "%s\n", "x?" ); /* scanf文で入力値を読みこむ。 */ scanf( "%f", &x ); /* 入力値xの絶対値が10より大きい場合は、 正しく計算できない可能性があるので何もしないで終了する。 絶対値は関数fabsによって求められる。 */ if (fabs(x) > 10.){return 0;} /* 指数関数の値を、テイラー級数として計算する。 */ /* 求める級数をyとする。 はじめにyにゼロを代入する。 */ y = 0.; /* 指数をnとする。 指数がゼロの項から計算するので、nにゼロを代入する。 */ n = 0; /* ここからループが始まる。 ループの中では各項の値を計算し、変数yに加えていく。 while文の条件を(1)と書き、常に真になるようにして、ループを作る。 */ while( 1 ){ /* nの階乗の値を求める。 オーバーフローを防ぐため、 整数ではなく浮動小数点で計算する。 */ /* はじめに変数cを1.0にする。 */ c = 1.; /* 変数cに1,2,...,nを順にかけていく。 */ for (m=1; m<=n; m++){ c = c * m; } /* 各項の値を求める。 xのn乗をnの階乗で割った値を求め、変数y1に代入する。 */ y1 = pow( x, n ) / c; /* 変数y1の値の絶対値が10^-6以下になったら、 while文から抜けて計算を終了する。 */ if (fabs( y1 ) < 1.0e-6){break;} /* 変数yに変数y1の値を加える。 */ y = y + y1; /* 指数Nの値をひとつ進める。 */ n++; /* whileとこの行の間の処理を、 終了する条件を満たすまで反復することになる。 */ } /* 結果を標準出力に書き出す。 */ printf( "%s %f\n", "y =", y ); return 0; }