情報科学演習
2011.11.07

Back to index page



  1. 本日の作業内容

  2. 宿題について

    相変わらず提出の不備が多く見られます.注意してください.特に,今回は解答 用紙を使用していない人が増えていました.

    以下に示すのは,例によって問題のある解答です.

         float a, b, c;
    
           srand((unsigned) time(NULL));
    

    上の例は,これまでに何度か言及している「全角スペース」の混入です.見た目 にはわかりませんが,コンパイルするとエラーが出ます.ですので,プログラム を作成中はなるべく日本語入力モードにしないことが大事ですが,それ以外にも, インデントにはTABを使うことを徹底することがあります.実は,上の例はイン デントをTABでは無く,スペースで行っているためにこのような問題が生じたと 思われます.注意してください.

            i = 1 + y*y/2 + y*y*y*y*(1/2)*(1-1/2)/2 ;
    

    上の例は,マクローリン展開の2次の項の意味を間違えているものです.2乗の項 までが2次という意味です.

            float a = rand() % 3 + 1,b = 0.05 * a,c = 1 + b*b/2;
    

    上の例は,二項演算子の両側のスペースをきちんと入れているのに,カンマの後 のスペースが抜けているものです.英語はわかち書きの文化なので,語の区切り にスペースを入れますが,カンマやピリオドの後にも必ずスペースが入りますの で,慣れてください.

    なお,上の例を取り上げたのは,これとまったく同じ行を含む答案が複数あった ためです.この授業の単位の取得を目指すのならば,宿題を自力で行うことがま ず第一歩です.宿題ができない人は試験もできません.

            float a =  rand() % 3 + 0, b = 0.05, c, d = 2, e, f, x;
            x = a * b + b;
            c = x  * x;
            e = c + d;
            f = e / d;
            printf("My student number: s114099\n\n");
            printf("x = %3.2f" " " "f(x) = %6.5f\n", x, f);
    

    上の例は,前回も取り上げた「不必要な変数の使用」の例です.解答例にある程 度の個数の変数があれば,このプログラムは書けます.不必要な変数を定義する のは止めましょう.

            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>
    
            main()
    {
             float a, b, c, d, e;
    

    これはインデントがおかしい例ですが,前回も同じく指摘したはずのものです. インデントはブロックの中のもの(これを式といいますが)を下げるものですので, ブロックの外のものは下げません.

  3. 前回の復習

    さまざまな乱数を試しました.これからも必要に応じて種々の乱数を発生させま すので,分からない人は早めに質問をして確認しておきましょう.

  4. if

    今回からは「制御構造」というプログラミングの重要な要素を含む学習です.教 科書をよく読んでしっかり理解してください.以下に特に注意する点を挙げてお きます.

    • 処理の流れ

      前回までのプログラムでは,プログラムの1行目から順に処理を行って,最後に return(0); が来て,全ての処理を終わり,画面をプロンプトに 戻してくれていました.if のような制御構造が入ると,全ての 行を順番に実行するのではなく,場合によって実行するかしないか分かれ ることになります.必ず実行される行とそうでない行があることに注意し てください.それを分かりやすくするのが「フローチャート」です.

    • フローチャート

      教科書の図3.1からいわゆるフローチャートの紹介が始まっています.プログラ ムにおける処理の流れを表したもので,ややこしい処理もフローチャートで理解 するとわかりやすくなるので,今後は必要に応じて自分でも作るようにしてくだ さい.

    • 関係演算子

      大小関係を判断する演算子です.頻繁に使用しますので,覚えておいてください.

    • 等価演算子

      等しいか等しくないかを判断する演算子です.ここで,高い頻度で間違える可能 性があるのが「等しい」かを判断する == です.等号一つでは「代入」 なのですが,ときどき間違えますので,注意してください.例えば,以下のプロ グラムは動作がおかしくなります.

      #include <stdio.h>
      
      main()
      {
          int n = 1;
      
          if(n = 2)
              printf("OK\n");
      
          return(0);
      }
      

    • ブロック

      教科書のp.24にブロックの紹介があります.if 文においては,if の中の処理が1行だけであるならばブロックを表す中括弧 { } は省略可能ですが,複数の処理が入ると中括弧が必須になります.ま た,ブロック内ではインデント(字下げ)を行ってください.

  5. 実習

    実習の演習問題は当日ご案内します.

  6. 次回の予習範囲

    教科書のp.33まで予習をしてきてください.特に,論理演算子のところは重要で すので,しっかり学習してください.

  7. 宿題

    授業の終わりに宿題の案内をします.ただ し,問題を見ることができるのは明日以降です.


目次ページに戻る