情報科学演習
2010.6.28
for 文では最初に繰り返しの回数を決めてから反復処理を行いますが,
それでは,適宜 break を書いておかないと,必要な作業が終わっ
て
も引き続きプログラムが動きつづける可能性があります.そこで,ある
条件になったら処理を終わるように,回数ではなく,式で判別するのが
while 文です.今回はそれを試します.
教科書の例題4.1. 4.7〜4.9を見てもらって理解するのが良いかと思います.そ
れらを応用するような実習作業を以下に示しておきますので,挑戦してみてくだ
さい.
先週の実習 v のカレンダーを while 文に直しましょう.
解答例(22行)
先週の実習 iii の2重ループを while 文に直しましょう.
解答例(26行)
1桁の正の整数を乱数で繰り返し発生させ,30から引き算をして行き,引けなくなっ
たら(残りが負の数になったら)止めるプログラムを作りましょう.次のような表
示形式でやってみましょう.
解答例(23行)
ユークリッドの互除法は,プログラミング言語の誕生以前から「アルゴリズム」
として知られる方法です.以下のプログラムは乱数で発生させた2桁の二つの整数の最
大公約数を求めるものです.確認してみましょう.
上で紹介した最大公約数の求めかたを利用して,4桁と3桁の整数を乱数で発生
させてその割算を既約分数の形式で表しましょう.
解答例(36行)
コンピュータ上で行なうじゃんけんを作りましょう.あいこの場合は決着が着く
まで繰り返します.以前に作ったものを改良しましょう.
解答例(44行)
授業の最後に宿題の案内をしますので,注意していて下さい.なお,前回から適
切なインデント(字下げ)や空行の入っていない解答は減点していますので,注意して
ください.基本的には教科書や解答例などにあるように,タブや空行を使用してブロッ
クごとの区別がつきやすいように字の先頭位置を揃えてください.
教科書の例題4.8と4.9で使用されている conio.h というヘッダファイルは教室の環境にはありません.このヘッダファイルは clrscr というコマンドを実行するためだけに読み込まれているので,clrscr の行を抜けば必要なくなります.
30 - 2 = 28
28 - 2 = 26
26 - 4 = 22
22 - 6 = 16
16 - 1 = 15
15 - 6 = 9
9 - 6 = 3
3 - 4 = -1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned) time(NULL));
int m, n, temp;
m = rand() % 90 + 10;
n = rand() % 90 + 10;
printf("GCM of %d and %d is ", m, n);
while(m % n != 0){
temp = n;
n = m % n;
m = temp;
}
printf("%d.\n", n);
return(0);
}
7614 29
------ = 31 ------
240 40
Your hand: "gu"
My hand: "gu"
Your hand: "choki"
My hand: "pa"
you win (^o^)
目次ページに戻る