プログラミング入門  情報科学演習
2013.10.28

Back to index page



  1. 本日の作業内容

  2. 小テスト

    最初に小テストを実施します.レポート提出システムを利用して行いますので,ログインして待っていて下さい.

    なお,小テストでは窓際の席で柱があるために飛び出している机の端末(合計6台)は使用しないで下さい.

  3. 宿題について

    今回はコンパイルエラーはぐっと減って下記の1名だけでした.

    b1339

    しかしながら,解答用紙を使用しないというエラーが発生しています.これも採点対象外ですので,今後は注意してください.

    b1353 b1365

    以下は例によって問題のある答案の例です.各自参考にしてください.

    My student number: s134099
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    

    上のものはプログラム中に変な行が入っているのでエラーになります.

    main()
    {
        srand((unsigned) time(NULL) );
    
        printf("%d\n", rand() % 14 * 7 +7);
    
        return(0);
    }
    

    学生番号やハイフンのライン,さらには表示の例にあるような文が全て無視されています.

            int num1 = rand() % 14 + 1,num2;
            num2 = num1 * 7;
    

    今回のプログラムでは変数は2つも要りません.ですので,無駄な変数の定義は止めましょう.

    ただし,解答例では変数を二つ使用しています.これは7以外の倍数にも対応できるように一般化したものなので,上の例とは違います.
            printf("Multiple number of 7; %d\n\n", rand()%15*7+7);
    

    これでは100以下になりません.他にも数を間違えているものがありました.

            "Multiple number of 7: %d\n", ( rand() % 100 + 1 ) / 7 * 7 );
    

    間違いでは無いですが,なんか苦労している感じがします.

            num1=rand() % 7 + 1;
            num2=rand() % 100 + 1;
            printf("Multiple number of %d: %d\n",num1, num2);
    

    num1 の値はなぜこうなっているのでしょうか?理解できません.

    printf("My student number: s1340**\n\nMultiple number of 7: %d\n\n-----------------------------------------------\n", (num % 11 + 1) * 7);
    

    宿題のような場合は解答例にあるように複数の printf を使用して,見やすくして下さい.

    以下はインデント(字下げ)のおかしい例です.他にもおかしいのはたくさんあるのですが,全部紹介しきれませんので,各自自分のものを見直してください.

            printf("-----------------------------------------------\n");
    
        return(0);
    }
    

    揃うべきところがずれています.

     int num;
    
        num = rand() % 14 + 1;
    

    これも同様に揃っていません.

     #include<stdio.h>
    
    main()
    {
    

    ヘッダのインクルードされている行がずれています.

            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>
    
    main()
    {
    

    ヘッダのインクルードは字下げしません.

        return(0);
        }
    

    最後の閉じ括弧が下がっています.

    それから学生番号が99番のままの人,自分の学生番号と名前を解答用紙に記入していない人が多く見られましたので,こちらも今後は注意してください.

  4. 前回の復習

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

  5. 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行だけであるならばブロックを表す中括弧 { } は省略可能ですが,複数の処理が入ると中括弧が必須になります.ま た,ブロック内ではインデント(字下げ)を行ってください.

  6. 実習

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

  7. 次回の予習範囲

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

  8. 宿題

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

  9. メンター学習室

    内容も宿題も段々と難しくなっていきます.つまづく前にメンター学習室を活用して十分にプログラミング練習をしましょう.開設時間は水曜日の14:30-16:00です.


目次ページに戻る