- 本日の作業内容
- 宿題の結果について
今回はコンパイルエラーなどは無く,安心しました.ただ,インデントについてはいまだに多くの人の答案で不具合が見られます.また,今回の解答では,変数の初期化をしないまま複合演算子で自己代入を行なう例がいくつか見られました.結果が変な値になっている人は今一度見直してください.
では,いつものように困った問題のある答案です.
for(i=1;i<=8000;i++){
sum = 0;
for(j=1;j<=i;j++){
if(i%j==0)
sum+=1;
}
if(sum>=max)
sum=max;
i=num;
}
|
上の例は,外側の for 文の変数である i に最後にわるさをしているので,式3の i++ があっても式2の条件に到達せず,無限ループになるものです.
for(i = 1;i <= 8000;i++){
count = 0;
for(j = 1;j <= 8000;j++){
|
これは何人かの人に見られましたが,内側の for ループの式2の条件が8000となっていて,無駄にループが回るので,実行に時間がかかるものです.
if(a >= 61)
printf("Number: %d, number of measures: %d \n", i, a);
|
これは,絶対やっちゃダメ!な方法です.残念です.
- 前回の復習
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)
- while 文
while 文は,for 文と異なり,終了条件(式2)しか指定しま
せん.その分,自由度が高いので,熟練した人はよく使用します.最初は
for 文の方が簡単なので,この授業では基本的に for
文を使用しますが,知っておいて損はありません.
- 実習
実習の演習問題は当日ご案内します.
- 次回の予習範囲
教科書のp.52-59を予習してきてください.また,配列に関する小テストを実施
しますので,予習をしっかりしてきてください.
- 宿題
授業の終わりに宿題の案内をします.今回
は冬休みを挟んで間が開くのでダレないように気を付けてください.
なお,メンター学習室の開設は12/21に実施しますので,必要に応じて
利用してください.