情報科学演習
2010.5.31

Back to index page



  1. 本日の作業内容

  2. 前回の復習

    • if

      注意することは,if 文の「式」と呼ばれる ( ) 内の処理は 真か偽で判断されるものであること,式の後にセミコロン ; は不要で あること,複数の文を if 節の中に組み込む場合は中括弧 { } で括ること,です.注意してください.

      真や偽の意味については難しいのですが,次に示すソースで確かめてください. 値が存在すること自体が「真」という意味がわかるかと思います.

      #include <stdio.h>
      
      main(){
      
      	int a = 0;
      	
      	if(a)
      		printf("???\n");
      		
      	a = 1;
      	
      	if(a)
      		printf("true\n");
      		
      	return(0);
      }
      
      関係演算子と等価演算子

      if 文の式の中では上記の演算子がよく使われますので,使い方をしっ かり覚えておきましょう.特に,等価演算子の等しいことを判別する == はついうっかり等号1つにしてしまいがちなので,注意してくださ い.例えば,以下に示す例では式は必ず真になります.

      int a;
      
      a = 1;
      
      if(a = 2)
        printf("a equals to 2\n");
      
      

    • 処理の簡素化

      教科書の例では if 文の中に printf が入るものが多かった のですが,if 文の式の結果によって表示が変わるプログラムでは,真 と偽の両方の場合に同じような printf 文を書かなくても済む例を示 しました.場合によってはポインタを使う必要もありますが,次のように簡単な 処理なので,気軽に使ってみてください.

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      
      main(){
      
      	srand((unsigned) time(NULL));
      
      	int a;
      	char *str;
      	
      	a = rand() % 10;
      	
      	if(a > 5)
      		str = "larger than";
      	else if(a < 5)
      			str = "smaller than";
      		else
      			str = "eqaul to";
      		
      	printf("%d is %s 5.\n", a, str);
      		
      	return(0);
      }
      

  3. 選択処理

    先週に引き続き選択処理の練習をします.条件式がだんだんと複雑になっていく ので注意してください.

    • if else

      if 文は原則として二者択一の処理ですが,それでは不便な場合が多い ので,「そうでないならば」の else の方にもう一度 if を入れて処理することがあります.例題3.4にあるような 60 ≦ x ≦ 80 のような条件式の場合,else if で二つ の判定を利用することもあります.

      ただし,else if は条件分岐の数が増えてくると書きにくくなるので, 他の工夫があります.それがp.30から紹介されている「論理演算子」です.

    • 論理演算子

      論理演算子は「かつ」もしくは「または」に相当する処理を行ってくれます.先 ほどの, 60 ≦ x ≦ 80 のような場合は,xが60以上で,かつ,80以下とい うことを判別するので,論理演算子の「かつ」( && )を使う と次のように,一つの if で書けます.

      if( x >= 60 && x <= 80)
      

    • switch

      分岐処理が多数ある場合に switch 文が役に立つことがあります.た だし,switch 文では「定数式」と呼ぶ条件のところが整数型の単純な もの(文字型でも動作可能ではありますが)が必要なので,使うときに注意が必要 です.次に示す例は,テキスト版のさいころシミュレータ(バーチャルさいころ くん Ver 0.1)ですが,教科書の例題 3.7よりもわかりやすい(?)と思うので,参考にしてみてください.

      このプログラムには日本語文字が含まれているので,画面に表示したものをgeditに張りつけて保存する場合には,文字コードに気を 付けてください.「現在のロケール」になっていれば大丈夫です.

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      
      main()
      {
      	srand((unsigned) time(NULL));
      	
      	int dice;
      	char *str1, *str2, *str3, *str4, *str5, *raw1, *raw2, *raw3;
      	
      	str1 = "●  ";
      	str2 = " ● ";
      	str3 = "  ●";
      	str4 = "● ●";
      	str5 = "   ";
      	
      	dice = rand() % 6 + 1;
      
      	switch (dice) {
      		case 1: raw1 = str5;
      			raw2 = str2;
      			raw3 = str5;
      			break;
      		case 2: raw1 = str3;
      			raw2 = str5;
      			raw3 = str1;
      			break;
      		case 3: raw1 = str1;
      			raw2 = str2;
      			raw3 = str3;
      			break;
      		case 4: raw1 = str4;
      			raw2 = str5;
      			raw3 = str4;
      			break;
      		case 5: raw1 = str4;
      			raw2 = str2;
      			raw3 = str4;
      			break;
      		case 6: raw1 = str4;
      			raw2 = str4;
      			raw3 = str4;
      			break;
      	}
      
      	printf("出た乱数は %d \n", dice);	
      	printf("┌───┐\n");
      	printf("│%s│\n", raw1);
      	printf("│%s│\n", raw2);
      	printf("│%s│\n", raw3);
      	printf("└───┘\n");
      	
      	return(0);
      
      }
      

  4. 実習

    まずは,教科書のp.35までの内容をしっかり理解しましょう.ただし,例題3.6 は飛ばします.その後で本日の実 習作業を行います.

  5. 宿題

    授業の最後に宿題の案内をしますので,注意していて下さい.


目次ページに戻る