プログラミング入門I
2018.11.05

Back to index page



  1. 本日の作業内容

  2. 前回の宿題について

    さて,今回の提出状況ですが,以下のように悲惨なことになってしまっています.提出前に番号や名前など注意しましょう.

    解答用紙に番号と名前無し: b1818 b1834 b1857
    出力時に間違った番号表示: b1803 b1808 b1831 b1833 b1836 b1839 b1846 b1759
    出力時にハイフンライン無し: b1832 b1837 program4

    で,今回大量に出てきたのが以下の人たちのもので,コンパイル時に警告が出ました.原因は,乱数を扱うのに2つのヘッダファイルをインクルードしなかったためです.

    コンパイル時警告: b1803 b1823 b1830 b1832 b1833 b1839 b1848 b1853 b1854 b1855 b1861 b1862 b1202 b1556 b1730 b1737 b1754 b1769

    そして,残念ながらコンパイルエラーも出ました.エラーになるものは提出しないでください.

    コンパイルエラー: b1566

    さらに,余分な処理を書いて無限ループになっているものもありました.これは大変迷惑しますので,実行時に確認して以後は出さないようにしてください.

    無限ループ: b1704

    インデントの不備も今回多く見られました.原因の大半は,過去のプログラムやWebから取ってきて貼り付けたものにはTABではなく,スペースが紛れ込んでいることです.コピペするときには,一度きちんとスペースが入っていないか確認してください.

    インデントの不備: b1803 b1807 b1808 b1810 b1817 b1818 b1820 b1821 b1822 b1831 b1835 b1837 b1838 b1839 b1843 b1846 b1859 b1861 b1864 b1556 b1608

    以下は問題のあるプログラムの一部です.今後の参考にしてください.

    #include <stdio.h>
    #include <stdio.h>
    #include <time.h>
    

    せっかく追加したヘッダファイルが間違っていたので,警告が出ました.確認不足でしたね.

            printf("An odd number less than 100: %d\n\n",2*a+1);
    

    前回 printf の中に式が入れられると説明したら,今回このようなやり方がたくさん見られました.今回は printf の中に入れる必要は全く無いですね.

            int num = rand() % 49 * 2 + 1;
    

    乱数の範囲も間違っている上のような例がいくつか見られました.これでは,99は出てきません.

            int num = rand() % 50;
            
            num *= 2;
            num += 1;
    

    今回の宿題は複合演算子の練習ではありません.

            int a = rand() %50*2 + 1 ;
            
            if(a %2 == 1)
            printf("An odd number less than 100: %d\n",a);
    
    
            printf("%d\n", a);
    

    過年度生のプログラムの例ですが,インデントがおかしいこともありますが, if 文は不要ですね.すでに変数 a の値は奇数になっています.

            int a=rand()%100+1;
    
    
            if(a%2==1)
                    printf("An odd number less than 100: %d\n\n",a);
                    
            else{
                    a+=1;
                    printf("An odd number less than 100: %d\n\n",a);
            }
    

    こちらも過年度生の例ですが,初期化の部分で変数 a の値は最大で100になるようになっています.で,実際に100が出ると, else に処理が渡されて101になってしまいますね.

            if(a % 2 == 1)
                    printf("An odd number less than 100: %d\n\n", a);
            
            else
                    printf("An odd number less than 100:   \n\n");
    

    過年度生なのに, if 文がわかっていないのが悲しいです.これでは奇数でなければ表示しないので,出題の意図を満足していません.

  3. 前回の復習

    乱数について,その使い方を学習しました.適当な範囲の数を乱数を用いて発生させる際には,その数の範囲を実現するために,剰余と適当な定数を用いました.この処理に早く慣れてください.

    また,乱数をプログラムで使用するには,ヘッダファイルにいつもの <stdio.h> に加えて以下の2つのインクルードを書くことと,プログラムの先頭に毎回乱数を変えるための文を記述することが必要です.忘れないでください.

    #include <stdlib.h>
    #include <time.h>
    

    	srand((unsigned) time(NULL));
    

    複合演算子( += など) について演習を行いました.また,その活用を行う準備として,ちょっと変則的な繰り返し処理が入るプログラムも作ってみました.複合演算子の動作に今後は慣れていきましょう.

  4. キャスト演算子

    教科書p.37に型変換演算子が紹介されています.データ型を一時的に変更することが可能です.整数型の割り算を行う際には小数部が全て捨てられますが,キャストすることで一時的に実数扱いになるので,小数部も利用して計算することができます.

    計算結果
    5 / 80
    (float) 5 / 80.625000

    変数や数値の前に変換したい型を ( ) 内で指定するだけです.

  5. 実習

    実習の演習問題は予習用の部分はすでに見えますのでしっかり予習してください.

    本日も引き続き乱数の使用法を学習します.

  6. 確認テスト予行演習

    そろそろ理解具合を確認するためのテストを行う準備をしたいと思います.まずは,予行演習ということで,授業の後半で教室のテスト環境を試す練習をします.指示に従って作業してください.

  7. 次回の予習範囲

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

  8. 宿題

    宿題についても当日ご案内します.ただし, 宿題の問題を見ることができるのは6日以降になりますので,注意してく ださい.


目次ページに戻る