情報科学演習
2010.6.28

Back to index page



  1. 本日の作業内容

  2. 反復処理( while 文)

    for 文では最初に繰り返しの回数を決めてから反復処理を行いますが, それでは,適宜 break を書いておかないと,必要な作業が終わっ て も引き続きプログラムが動きつづける可能性があります.そこで,ある 条件になったら処理を終わるように,回数ではなく,式で判別するのが while 文です.今回はそれを試します.

  3. 実習

    教科書の例題4.1. 4.7〜4.9を見てもらって理解するのが良いかと思います.そ れらを応用するような実習作業を以下に示しておきますので,挑戦してみてくだ さい.

    教科書の例題4.8と4.9で使用されている conio.h というヘッダファイルは教室の環境にはありません.このヘッダファイルは clrscr というコマンドを実行するためだけに読み込まれているので,clrscr の行を抜けば必要なくなります.

    1. for 文からの変換 その1

      先週の実習 v のカレンダーを while 文に直しましょう.

      解答例(22行)

    2. for 文からの変換 その2

      先週の実習 iii の2重ループを while 文に直しましょう.

      解答例(26行)

    3. 基本形

      1桁の正の整数を乱数で繰り返し発生させ,30から引き算をして行き,引けなくなっ たら(残りが負の数になったら)止めるプログラムを作りましょう.次のような表 示形式でやってみましょう.

      30 -  2 = 28
      28 -  2 = 26
      26 -  4 = 22
      22 -  6 = 16
      16 -  1 = 15
      15 -  6 =  9
       9 -  6 =  3
       3 -  4 = -1
      

      解答例(23行)

    4. ユークリッドの互除法による最大公約数の算出

      ユークリッドの互除法は,プログラミング言語の誕生以前から「アルゴリズム」 として知られる方法です.以下のプログラムは乱数で発生させた2桁の二つの整数の最 大公約数を求めるものです.確認してみましょう.

      #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);
      }
      

    5. 分数の約分

      上で紹介した最大公約数の求めかたを利用して,4桁と3桁の整数を乱数で発生 させてその割算を既約分数の形式で表しましょう.

       7614          29
      ------ = 31 ------
        240          40
      

      解答例(36行)

    6. あいこでやり直すじゃんけん

      コンピュータ上で行なうじゃんけんを作りましょう.あいこの場合は決着が着く まで繰り返します.以前に作ったものを改良しましょう.

      Your hand: "gu"
      My hand:   "gu"
      
      Your hand: "choki"
      My hand:   "pa"
      
      you win (^o^)
      

      解答例(44行)

  4. 宿題

    授業の最後に宿題の案内をしますので,注意していて下さい.なお,前回から適 切なインデント(字下げ)や空行の入っていない解答は減点していますので,注意して ください.基本的には教科書や解答例などにあるように,タブや空行を使用してブロッ クごとの区別がつきやすいように字の先頭位置を揃えてください.


目次ページに戻る