プログラミング入門I
2019.01.21

Back to index page



  1. 本日の作業内容

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

    解答する際の注意事項にまず名前と番号を入力するように,と,書いていたにもかかわらずダメだった人がいました.残念です.

    番号と名前未記入: b1775

    警告が出る人もいました.これも問題文の脚注に書いていたように, float の取り扱いです.注意しましょう.

    警告: b1803 b1848

    インデントの不備は相変わらずでした.

    インデントの不備 b1801 b1813 b1814 b1839 b1854 b1855 b1864 b1202

    で,初期化についても解答する前の注意事項に書いていたのに,以下のように大勢の人が初期化しないまま += の処理や比較演算子による処理を作っていたので,正しい値にならないものでした.これも注意してください.

    初期化の問題: b1817 b1822 b1823 b1834 b1839 b1842 b1847 b1849 b1860 program1 b1718 b1751 b1780

    今回の不備の中で気づいたもののうち,2つほどを以下に挙げておきます.参考にしてください.

    	average = sum / num1;
    
    	printf("Average: %3.1f\n", (float) average);	
    

    上の行で一度変数 average に整数型の演算結果を代入していますので,その段階ですでに小数部は切り捨てられています.なので, printf のところでキャストしてももう手遅れです.

    		b = rand() %90*c + 10*c;
    

    二項演算子は左から順に処理されるので,上の例では rand() で発生した乱数を90で割った余りに後から c をかける形になってしまっています.

  3. 前回の宿題について

    今回はちょっと変わった答案が出てきまして,文字コードが変わっているものです.教室の環境はユニコード(UTF-8)というものが使われていて,レポート提出システム内ではユニコードで無いと日本語が読めなくなります.ということで,プログラムを作る際には文字コードを変えないようにしてください.

    文字コード変更: b1815

    学生番号が間違っていたり,番号が表示されないものもありました.注意してください.

    番号間違い: b1840
    番号なし: b1775

    さて,警告がいくつか出てきました.今回は,プログラム内で乱数を使用しないので,ヘッダファイルは標準の <stdio.h> のみが記入されていたのですが,プログラム内に不要な srand() の処理を入れたためです.プログラムが乱数を必要とするのかどうか,まずは考えてからコードを書き始めましょう.

    警告: b1845 b1848 b1556 b1751 b1775

    インデントの不備は相変わらずでした.きちんとインデントを守りましょう.

    インデントの不備: b1806 b1810 b1818 b1821 b1828 b1833 b1840 b1842 b1844 b1846 b1848 b1857 b1862 b1863 b1718 b1763 b1775

    今回は面倒な処理を書く人が何人かありました.シンプルなのが一番なので,必要な処理が何なのか,解答例を参考に考えてください.

    次のものは不要な変数 y を使用している例ですね.

            for(i=0;i<=10;i++)
            {
                    for(x=0;x<=10;x++)
                    {
                            if(x+y==0||x-y==10)
                            {
                                    printf("*");
                            }
                            else
                            {
                                    printf(" ");
                            }               
                            
                    }
                    printf("\n");
                    y--;
            }       
    

  4. 前回の復習

    小テストの関係で演習に十分時間が取れませんでしたが,多重の for 文になると,変数 i j がどのように変化しているのか,把握する必要があります.頭の中だけで考えていくのも限界がありますので,ぜひ紙などに変数の動きを書きながら自分のプログラムの動作を考えるようにしましょう.

  5. 多重の for

    多重のループにすると2次元的な表現ができることを学習しました.サンプルとして以下のプログラムを紹介しておきますので,今後の参考にしてください.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
    	srand((unsigned) time(NULL));
    	
    	int num, i, j;
    	
    	for(i=1; i<=10; i++)
    	{
    		num = rand() % 9 + 1;
    		printf("%d: ", num);
    		
    		for(j=1; j<=num; j++)
    		{
    			printf("%d", num);
    		}
    		
    		printf("\n");
    	}
    	
    	return 0;
    }
    

    今週の演習問題はこれまで以上に難しいと感じる人が多く出てくると予想しています.ただ,中で使用している処理自体は全てこれまでに経験しているものです.ポイントは処理の並べ方,すなわちアルゴリズムです.

    今後は小学校からのプログラミング学習が始まりますが,そこで求められているのは特定の言語の習得ではなく,アルゴリズムの学習です.処理を一つ一つ順番につなげていくこと,機械でもわかるということは誰にでもわかる命令を用意すること,などですが,今回の演習問題でも同じです.一つ一つ何をすればよいのか,順番に考えていくことで実現できます.

  6. 実習

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

  7. 次回の予習範囲

    引き続き多重の for 文を扱います.予習用の課題を見ておいてください.

  8. 宿題

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


目次ページに戻る