情報科学演習
2011.05.16

Back to index page



  1. 本日の作業内容

  2. 宿題の結果について

    提出の不備は相変わらずありますが,それ以外のことについて以下に説明します. 解答例を良く見て自分の解答を考え 直してください.

    • 変数が多すぎる

      今回は変数は2つで十分です.無用な変数は定義しないようにしましょう.

    • 結果として同じ数が表示される解答がある.

      同じ数が出たときに乱数の発生をやり直すのですが,その回数として何回やり直 せば良いか,について考えてください.また,
          srand((unsigned) time(NULL));
      

      を何度も実行している解答もありましたが,必要なのは乱数の再発生です.間違 えないようにしてください.

    • 数が表示されない

          if(a != b)
              printf("hogehoge\n");
      

      みたいな処理を書いているだけだと,同じ数が発生したときに何も表示されない で終わります.問題は「必ず異なる数が表示される」ように指示しているので, 何も表示されないのは間違いです.

    • インデントがおかしい

    • 学生番号の表示が間違っている

    • 区切りのハイフン列がない

    • 解答用紙のクラスの部分を選択していない(必要ないクラスの方を削除して ください)

  3. 前回の復習

    if 文の基本について学習しました.教科書には書いてないことで,条 件式に関する重要な概念がありますので,以下に説明しておきます.

    教科書のp.24にあるように if 文の基本は図1のようになります.

        if(式){    
            文 ;    
        }
    

    図1 if 文の構成

    ここで,式の値が「真」か「偽」かによって処理の流れが変わるのが if 文の基本動作ですが,式の値が真もしくは偽とはどういう意味なのか について考えましょう.

    教科書では関係演算子や等価演算子のような「比較演算子」の使用が最初から行 われていますので,括弧の中には比較する式が入るものと思いがちですが,そこ には値さえあれば,何でも動作します.ですので,等価演算子 == の 代わりに間違って代入記号の = を使用してもエラーなく動作します. (処理は間違ってしまいますが.)

    以下のプログラムで,値の真と偽について考えてみましょう.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    main()
    {
        srand((unsigned) time(NULL));
    
        int num = rand() % 3 - 1;
        printf("%d\n", num);
    
        if(num)
            printf("True\n");
    
        return(0);
    }
    

  4. if ~ else

    今回は,もし〜ならば,という条件式にさらに「そうでないならば」という else の処理を追加したプログラムを学習します.実習課題に沿って学習し ていきましょう.

    注意

    インデント(字下げ)について毎回注意していますが,if 文においても インデントは論理構造を把握するのに重要です.ところが,教科書のインデント の例はあまり良くないので,以下のどちらかのように揃えるようにしましょう.きっと,こ の方が分かりやすいと思います.

        if( hoge ){
            hogehoge ;
            hogehogehoge ;
        }
    
        if( hege )
            hegehege ;
        else
            hegehegehege ;
    
        if( huge )
            hugehuge ;
        else if( hugehugehuge)
            hugehugehugehuge ;
        else if( hage ){
            hagehage ;
            hagehagehage ;
        }
        else
            hige ;
    

        if( hoge ){
            hogehoge ;
            hogehogehoge ;
        }
    
        if( hege )
            hegehege ;
        else
            hegehegehege ;
    
        if( huge )
            hugehuge ;
        else if( hugehugehuge)
                 hugehugehugehuge ;
             else if( hage ){
                      hagehage ;
                      hagehagehage ;
                  }
                  else
                      hige ;
    

  5. 実習