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

Back to index page



  1. 本日の作業内容

  2. メンター学習室について

    今週はメンター学生の学会出張のため,学習室を開設できません.すみませんが,御容赦のほどよろしくお願いします.

  3. 宿題の結果について

    今回は採点対象外の提出が多く見られました.残念です.気を付けてください.

    解答用紙不使用 b1404 b1460

    学生番号と氏名不記載 b1417 b1429 b1341

    さて,反復処理と複合演算子の組合せでは,変数の初期化を忘れないようにと,何度か指摘してきましたが,残念ながら今回の提出ではかなりの人が初期化を忘れていました.こちらも以後は注意してください.

    b1406 b1407 b1410 b1412 b1413 b1414 b1421 b1423 b1427 b1428 b1429 b1433 b1437 b1440 b1443 b1451
    b1174 b1216 b1251 b1274 b1340

    さて,以下はいつものように問題のある解答の例です.参考にしてください.

    計算間違い b1408

    よくわからない初期値のせいでこんな表示になる人もいました.

    My student number: s144034
    
    956 577 748 832 669 555 684 953 232 750  -- -92559641157368724892509411267733071164885593107168676372545536.0
    509 824 458 742 321 294 692 305 781 769  -- 0.0
    643 377 368 144 260 810 900 656 348 977  -- 190359804756750258245738803913181183445552255164421518076631875928258308634123275194623180032767970007605699909576602291442698679968025368881387632908044155264127882981891024258724790272.0
    732 356 555 480 240 276 987 825 282 219  -- 0.0
    575 691 996 985 433 369 331 177 574 112  -- 190359804756743012237883146553784879660756757688150957587888676362635826318026803596231387106971964644293358804742922672162639613385817809358898177306189637310365132205487217419696996352.0
    
    
    Total average: 566.6
    
    ---------------------
    

    実行する度に変な値が異なるところに出てくる不思議なプログラムです.

            for(i=1; i<=5; i++){
                    b = 0;
                    for(j=1; j<=10; j++){
                            a = rand() % 900 + 100;
                            printf("%d ",a);
                            b += a;
                            if(j==10)
                                    printf("-- %4.1f\n",b/10);
                    }
                    c += b/10;
                    if(i==5)
                            printf("\nTotal average: %4.1f\n\n",c/5);
            }
    

    上の例は5番ですが,他にも結構いました.if 文は不要ですね.

    if 文はプログラムの実行速度を低下させる一因ですので,不要であれば使わないのが原則です.
            for(i=1; i<=5; i++){
                    b = 0;
    
                    for(j=1; j<=10; j++){
                            a = rand() % 900 + 100;
    
                            printf("%d ",a);
    
                            b = b + a;
    
                            if(j==10)
                                    printf("-- %4.1f\n",b/10);
                    }
                    c = c + b/10;
            }
    

    今度は9番のプログラムですが,こっちも if が入ってしまっています.

    インデント(字下げ)はまだ多くの人が問題ありなので,困っています.今回は以下の例を1つだけ取り上げますが,何で for 文の外の処理が下がるのでしょうか,2番さん?

            for( i=1; i<=5; i++){
                    for( j=1; j<=10; j++){
                            a = rand() % 900 + 100;
                            printf("%d ",a);
                            sum += a;
                    }
                            sum /= j;
                            printf("--%.1f\n",sum);
                            ave += sum;
             }
    

  4. 前回の復習

    for 文の式2の終了条件が定数でなく,変数になる場合を練習しました. これにより2次元の多様な表現が可能となります.今後も使用しますので, 覚えておいてください.

        for(i=1; i<=5; i++)
            for(j=1; j<=i; j++)
    
    

    上のように j に関する終了条件を i に依存させることで, 以下のような変数の変化が実現できます.

    (1,1)
    (2,1) (2,2) 
    (3,1) (3,2) (3,3) 
    (4,1) (4,2) (4,3) (4,4) 
    (5,1) (5,2) (5,3) (5,4) (5,5)
    

  5. while

    while 文は,for 文と異なり,実行条件(式2)しか指定しま せん.その分,自由度が高いので,熟練した人はよく使用します.最初は for 文の方が簡単なので,この授業では基本的に for 文を使用しますが,知っておいて損はありません.

    for 文で式2だけを使用する場合や式3が無い場合などは while 文を使用する方がすっきり書けることがあります.
  6. 実習

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

  7. 次回の予習範囲

    教科書のp.52-59を予習してきてください.また,配列に関する小テストを実施 しますので,予習をしっかりしてきてください.

  8. 宿題

    授業の終わりに宿題の案内をします.


目次ページに戻る