プログラミング入門II
2019.06.03

Back to index page



  1. 本日の作業内容

  2. 確認テストの結果について

    コンパイルエラーがなかったので,そこは今回のテストで大変良かったところでした.こちらも助かりました.ただ,中身はもうちょっとという人が半数くらいです.

    あと,解答用紙には元々各問題の答えを出力する際に見やすいようにハイフンによるラインを出すようにしていたのですが,それを消してしまった人がいました.採点の際に見づらいのでやめてください.解答用紙は改ざんしないようにおねがいします.

    ハイフンライン消去: b1807

  3. 宿題の結果について

    学生番号が自分のものでない人,インデントに不備がある人が出ました.気をつけましょう.

    番号間違い: b1855
    インデントの不備: b1836

    大体の人は問題なかったのですが,一部に以下のような適切でないプログラムがありました.これを参考に,今回の演習では気をつけてください.

            int i,num[5] = {1,2,3,4,5};
            
                            
            for(i=0;i<5;i++)
            {
                    num[i]=0;
                    num[i] = rand()% 90 +10;
                    printf("%d ",num[i]);
            }
    

    配列 num に関して,無駄な要素の宣言と初期化がありますね.配列に値を代入するので,初期値は無くても正しく動作します.

            int num[]={rand()%90+10,rand()%90+10,rand()%90+10,rand()%90+10,rand()%90+10};
    

    こういう一つ一つを手作業でやることはプログラミングではありません.同じことを繰り返すのであれば反復処理です.要素が1万個の配列だったらどうするのでしょうか?

            int c = 5;
            
            for(j=1;j<=5;j++)
            {
                    
                    printf("%d ",a[c]);
                    
                    c -= 1;
            }
    

    頑張って工夫してはいるのですが,無駄な変数を使って面倒な処理になってしまっています.

            int a[5],i;
            
            for(i=1;i<=5;i+=1)
            {
                    a[i]=rand()%90+10;
                    
                    printf("%d ",a[i]);
            }
            
            printf("\n");
            
            for(i=5;i>=1;i-=1)
            {
                    printf("%d ",a[i]);
            }
    

    配列における要素の個数と添字の関係の誤解です.本日のWebテキストの「配列のキモ」を確認してください.

  4. 前回の復習

    前回まで関数についていろいろ学習しました.通常業務で使用されるプログラムは膨大な行数からなるので,グループで連携して開発するために,モジュールに分けて作業するのが前提です.そのための方法としての関数学習でした.

    で,せっかく関数を学習したのですが,今回からはきれいさっぱりと忘れてください.すみません,本当に脈絡が無くて.

    これからは配列をがんばりましょう.

  5. 1次元配列

    今回からは「配列」です.これが使えないと実際のプログラミング では困ります.複数の値を一つの名前で保存できる便利な機能ですので, 必ず使えるようになってください.

    例えば,1日の気温を1時間ごとに自動で測定するシステムがあるとします.午前0 時から午後11時まで24個の温度を,

    temp0, temp1, temp2, .... , temp23

    のようにたくさんの変数を使用して記憶しておくことは無駄ですし,後から使う ときにやりにくい面が多いことになります.そこで,配列 temp として 1時間ごとの温度を

    temp[0], temp[1], temp[2], ... , temp[23]

    のようにしておくと,変数名としては1つの temp だけで済みますし, 時間を添字として利用することで読み出しが簡単になります.

    今日からのポイントは値が何番目に入っているかを示す「添字」の使い方です.この添字を for 文などと組み合わせて自動的に処理する方法を理解しましょ う.

    例えば,配列の要素の初期値を全部0にしたい場合などはよくあるのですが,以下のように簡単に出来ます.

    	int i, ary[100];
    	
    	for(i=0; i<=99; i++)
    	{
    		ary[i] = 0;
    	}
    

    配列では先頭の要素の添字は0です.これは便利な取り決めなのですが,いつまで経ってもわからない人がいますので,困ります.よく理解しておいてください.すなわち,要素が10個ある配列の各要素の添字は0から9までの10個です.

    int 型の配列を定義するには以下のようにすれば簡単にできます.重要なので,これだけはまず理解しておいてください.

    	int ary[5] = {1, 2, 3, 4, 5};
    

    配列のキモ

    • 宣言するときの [ ] の中は要素の個数

    • 配列の添字は 0 から始まる

    • 配列の一番最後の要素の添字は,要素の個数ひく1

    • つまり, ary[5] のように宣言した配列には実際には,値を参照するときに ary[5] は無い

    • 基本的には for 文などの反復処理と一緒に使用

  6. 実習

    実習の演習問題はこちらです.

  7. 次回の予習範囲

    引き続き教科書のp.115までを予習してきてください.

  8. 宿題

    宿題の公開は6月4日以降です.よろしくお願いします.


目次ページに戻る