前回の復習 課題: ある動物の t 年における数は、前年と前々年の数の 合計で表わされるという。すなわち u(t) = u(t-1) + u(t-2) u(0) = 1, u (1) = 1 として、u(0)から u(10) までを 1. 筆算で求めよ。 2. for文、while文を使って求める流れ図を書け。 ヒント: u(t), u(t-1), u(t-2)をそれぞれ a, b, c と置くとよい。 この数列をフィボナッチ数といいます。
フィボナッチ数の計算(筆算) u(t) = u(t-1) + u(t-2) において、u(0) = 1, u (1) = 1 として u(2)=u(1)+u(0)=1+1=2, u(3)=u(2)+u(1)=2+1=3, u(4)=u(3)+u(2)=3+2=5, u(5)=u(4)+u(3)=5+3=8, u(6)=u(5)+u(4)=8+5=13, u(7)=u(6)+u(5)=13+8=21, u(8)=u(7)+u(6)=21+13=34, u(9)=u(8)+u(7)=34+21=55, u(10)=u(9)+u(8)=55+34=89.
while文を使った場合の流れ図 u(t) = u(t-1) + u(t-2) 開始 a b c 1→b, 1→c b, c表示 2→i 終了 no yes 開始 1→b, 1→c b+c → a b → c, a → b b, c表示 i, a 表示 2→i i + 1→i u(t) = u(t-1) + u(t-2) a b c
for文を使った場合の流れ図 u(t) = u(t-1) + u(t-2) 開始 a b c 1→b, 1→c b, c表示 b+c → a ループ1 i : 2, 1, 10 ループ1 終了 b → c, a → b b, c表示 i, a 表示 u(t) = u(t-1) + u(t-2) a b c
for文を使った場合のプログラム /*a601013*/ #include <stdio.h> main() { int a,b,c,i; b=1; c=1; for(i=2;i<=10;i=i+1) a=b+c; c=b; b=a; } printf("goukeiha %d\n",a);
プログラム作成の注意 #include <stdio.h> のように、スキマを空ける。 a=b+c; c=b; b=a; を1行に書くとき、 a=b+c, c=b, b=a; と書くのは誤り。正しくは、 a=b+c; c=b; b=a;
くり返し文: つるかめ算に挑戦 鶴と亀、合わせて56匹(羽)いる。足の数が150本のとき、 鶴、亀それぞれ何匹(何羽)いるか? くり返し文: つるかめ算に挑戦 鶴と亀、合わせて56匹(羽)いる。足の数が150本のとき、 鶴、亀それぞれ何匹(何羽)いるか? この問題を次のようなアルゴリズムで解くプログラムを 作成せよ。先ず流れ図を作成せよ。 鶴の数を t、 亀の数を k とし、最初 t = 0, k = 56 として足の 数が150 になるまで t の数を 1 づつ増やしていく (同じこと であるが k を1づつ減らしていく)。 ヒント:くり返しで、何回繰り返したらいいかあらかじめ分からない 場合は、 while文を使うとよい。
本日の課題 前回課題を完成させる フィボナッチ数を計算する流れ図を書き、理解する。 その上で、 for文を使ったプログラムを完成する。 本日の課題 前回課題を完成させる フィボナッチ数を計算する流れ図を書き、理解する。 その上で、 for文を使ったプログラムを完成する。 課題提出法 cp ファイル名 ~joho1/report1/学生番号 2. while文を使ったプログラムを完成する。 課題提出法 cp ファイル名 ~joho1 /report2/学生番号 3. 鶴亀算の流れ図、プログラムを完成する。 課題提出法 cp ファイル名 ~joho1 /report3/学生番号 注 プログラムには先頭に学生番号をコメント文で入れる コンパイルの仕方: cc ファイル名 –o 実行可能ファイル名