予備知識:
自然対数eは
e=1/0! + 1/1! + 1/2! + 1/3! + ・・・ 1/(n+1)!
で求まります。nの値が大きいほどeの精度が増します。
また、n!=1×2×3×・・・×n です。0!=1です。
お題:
自然対数eを求めるプログラム
①はじめに、求める精度=項数nを整数で入力させる
②eの計算結果を表示する
プログラム実行例
精度nを入力してください。 n:30 e=2.718282 |
必須事項
・while文を使うこと
・n=1にも対応する。 (この時e=1.0)
while文とは
while文は
while (式) {}
と記述され、{}ブロック内の命令を(式)の条件を満たす限り繰り返し実行します。特徴的なのは、(式)の判断を{}ブロックを実行する前に行うことです。do文では{}ブロックを実行した後に判断していました。例えば、
scanf("%d", &a);
while ( a != 7777777) {
puts("気合いを入れろ!");
scanf("%d", &a);
}
puts("正解");
とすると、最初にa=7777777と当てられればwhile文に入らず「正解」となります。はずれたら、while文に入って当たるまで永遠と無限ループします。
これを利用して自然対数を求めましょう。
解答は7月26日の夜に掲載します。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに張り付けて以下のアドレスに送ってください。
解答、質問はこちらまで。
cosmo-cleaner@za.pial.jp
---------------------------------------------------------------
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> int main () { c=1; printf("%f",b); |
実行例は次の通りです。
精度nを入力してください。 |
解説
このプログラムの流れは、
1.各項の分母を計算
2.各項を確立
3.項を合計していく
といったイメージになっています。定義した変数a,b,c,i,nについて
aは分母
bは各項の和
cは項数のカウント
iはn!の掛け算のカウント
nは求める項の数=精度
に使用しています。
青い部分では各項の分母を作っています。n項目の分母は(n-1)!なので、例えば4項目の分母を計算しているなら、while文でiがになるまで1*2*3と計算します。具体的には、
1巡目:i=1, a=1 → a=1*1, i=1+1=2
2巡目:i=2, a=2 → a=1*2, i=2+1=3
3巡目:i=3, a=2 → a=2*3, i=3+1=4
といった具合です。ちなみに指定した精度がn=1の時、青い部分のwhile文には入らず、答えとしてbの初期値”1”が吐き出されます。
赤い部分では、青い部分で出来上がった分母から項を作り、n項まで合計していきます。
最終的にbには全項の合計が入っているので、それをprintfで表示させます。
答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp