プログラミング入門II
2019.07.08

Back to index page



  1. 本日の作業内容

  2. 前回の確認テストについて

    全般的にはかなり悪い成績でした.残念です.また,以下のような問題のある人も出ました.

    コンパイルエラー: b1827

    コアダンプ: b1839

    解答用紙に番号と名前の記入なし: b1857

    解答例を参考に今後も配列の理解を深めてください.

    なお,解答例ですが,1番は重複がないかチェックする処理を入れているのですこし複雑に見えますが,作業自体は単純です.0から51までの数が順に入った配列を用意し,その順番をランダムにすることで重複が避けられます.ランダムにする方法も演習の時に説明したように,解答例のように少ない処理で確実にバラけさせる方法と,手当たりしだい2つの値を入れ替える方法とありますので,きちんとしていればどちらでも良いです.ただ,手当たりしだいに入れ替えるのであれば,要素が52個もあるので,1000回くらいループを回したいところです.

  3. 宿題の結果について

    基本的には大体出来ているのですが,レイアウトが少しおかしい人とかがいました.見た目を調整することも大事ですので,もう少し工夫して欲しかったですね.

    インデントの不備: b1836

    以下は例によって気になったものですが,基本的にはレイアウト関連が多かったようです.

            n = rand() % 10 + 1;
    

    今回は乱数は想定してなかったのですが,設問が紛らわしくてすみませんでした.

                    if(i==0 )
                    {
                            printf("               ");
                    }
                    if(i==1 )
                    {
                            printf("              ");
                    } 
                    if(i==2 )
                    {
                            printf("             ");
                    }
                    if(i==3 )
                    {
                            printf("            ");
                    } 
                    if(i==4 )
                    {
                            printf("           ");
                    }
                    if(i==5 )
                    {
                            printf("          ");
                    } 
                    if(i==6 )
                    {
                            printf("         ");
                    }
                    if(i==7 )
                    {
                            printf("        ");
                    } 
                    if(i==8 )
                    {
                            printf("       ");
                    } 
                    if(i==9 )
                    {
                            printf("      ");
                    }
                    if(i==10 )
                    {
                            printf("  ");
                    } 
    

    何度も言っていますが,こういうのは絶対にやっちゃダメ!です.

     1:                1   1
     2:               1   2   1
     3:              1   3   3   1
     4:             1   4   6   4   1
     5:            1   5  10  10   5   1
     6:           1   6  15  20  15   6   1
     7:          1   7  21  35  35  21   7   1
     8:         1   8  28  56  70  56  28   8   1
     9:        1   9  36  84 126 126  84  36   9   1
    10:       1  10  45 120 210 252 210 120  45  10   1
    

    こんな感じでずれていたり,

     1 :                              1   1
     2 :                           1    2    1
     3 :                        1    3     3    1
     4 :                     1    4     6     4    1
     5 :                  1    5    10    10     5    1
     6 :               1    6    15    20    15     6    1
     7 :            1    7    21    35    35    21     7    1
     8 :         1    8    28    56    70    56    28     8    1
     9 :      1    9    36    84   126   126    84    36     9    1
    10 :   1   10    45   120   210   252   210   120    45    10    1
    

    こんな感じでワイドになっていたりするものがそこそこありました.

     1:                    1   1 1869833334 1952802655                      
     2:                  1   2 1869833335 -472331307 1952802655                   
     3:                1   3 1869833337 1397502028 1480471348 1952802655            
        
     4:              1   4 1869833340 -1027631931 -1416993920 -861693293 1952802655 
                
     5:            1   5 1869833344 842201409 1850341445 2016280083 1091109362 19528
    02655          
     6:          1   6 1869833349 -1582932543 -1602424442 -428345768 -1187577851 -12
    51055279 1952802655       
     7:        1   7 1869833355 286900806 1109610311 -2030770210 -1615923619 1856334
    166 701747376 1952802655    
     8:      1   8 1869833362 -2138233135 1396511117 -921159899 648273467 240410547 
    -1736885754 -1640417265 1952802655 
     9:    1   9 1869833370 -268399773 -741722018 475351218 -272886432 888684014 -14
    96475207 917664277 312385390 
    10:  1  10 1869833379 1601433597 -1010121791 -266370800 202464786 615797582 -607791193 -578810930 1230049667 
    

    for 文の範囲が間違っていますね.

  4. 前回の復習

    前回も2次元配列でした.どのような値がその添字に該当する場所に格納されているのかを意識することが非常に重要です.そのため,簡単なメモ書きなどでも良いので,視覚的にわかりやすい補助資料を作りながら考える習慣をつけてください.

  5. 文字列配列

    文字列は配列として表現されてるものであることを以前に学習しました.今回は2次元配列の形式で,複数の文字列を一つの配列で表現する手法について実習します.

    まず,基本形は以下のようなものです.

    	char janken[3][6] = {"Gu", "Choki", "Pa"};
    

    例えば,以下のようなプログラムを考えます.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
    	srand((unsigned) time(NULL));
    	
    	int hand;
    	char janken[3][6] = {"Gu", "Choki", "Pa"};
    	
    	hand = rand() % 3;
    	
    	printf("%d\n", hand);
    	printf("You: %s\n", janken[hand]);
    	
    	return 0;
    }
    

    上のように,じゃんけんの手をあらかじめ配列として用意しておけば, if 文を使用しなくてもじゃんけんのプログラムを書くことができます.

    なお,教科書のp.126のリスト6_9では printf の中で,配列 str を呼び出すのにポインタを参照する & の記号がついていますが,その場合にはコンパイル時に警告が出ます.上の例のように,その & は不要です.

  6. 実習

    実習の演習問題(予習用)はこちらです.

  7. 次回の予習範囲

    次回も文字列配列について学習します.引き続き教科書のp.125-126を予習しておいてください.

  8. 宿題

    授業の終わりに宿題の案内をします.ただし,問題を見ることができるのは2日10時以降です.レポート提出システムから閲覧してください.


目次ページに戻る