- 本日の作業内容
- 宿題の結果について
今回はコンパイルエラーはありませんでした.しかし,無限ループのものが残念ながら出てきました.採点対象外です.
b1140
以下は,いつものように問題のある答案です.まずは,次のもの.
for(i=1;i<=9;i++)
printf(" %d",i);
printf(" 10 Average\n");
|
インデントもおかしいですが,それ以前に %d 記法の基本を忘れているので,無用な場合分けが入っています.他にも必要の無い if 文を使用した例なども多く見られました.注意してください.
printf(" 1 2 3 4 5 6 7 8 9 10 Average\n");
|
上のは例によって,絶対にやっちゃダメなものです.2年生以上に多く見られたのが残念です.
for(i=1;i<=10;i++){
printf(" %2d ",i);
i;
}
|
上のものはよくわからない i; だけの行があります.何なのでしょうか?
乱数の間違いは今年度は減ったと思いますが,依然として上のような間違いが出てきます.どうして理解できないのか,よくわかりません.
以下はいつものようにインデントの悪い例です.わからない人は質問してください.
printf(" average");
printf("\n");
for(l=1;l<=10;l++){
sum=0;
i=rand()%6+5;
for(m=1;m<=i;m++){
j=rand()% 900 + 100;
printf("%d " ,j);
sum += j;
}
for(;m<=10;m++){
printf(" ");
}
sum=sum/i;
printf(" %7.1f\n",sum);
}
|
printf(" average");
printf("\n");
for(l=1;l<=10;l++){
sum=0;
i=rand()%6+5;
for(m=1;m<=i;m++){
j=rand()% 900 + 100;
printf("%d " ,j);
sum += j;
}
for(;m<=10;m++){
printf(" ");
}
sum=sum/i;
printf(" %7.1f\n",sum);
}
|
for(l=1; l<=44-4*a; l++)
printf(" ");
printf("%.1f\n",sum/a);
|
for(j=1;j<=b;j++){
a = rand() % 900 + 100;
sum += a;
printf("%d ", a);
}
for(n=1;n<=44-b*4;n++)
printf(" ");
|
- 前回の復習
for 文が始まると,変数の値がループが回るたびにどのように変わっていくのか,十分に把握しておく必要があるのですが,そこをフォローするのが難しいのも事実です.そのため,変数の値の遷移をノートなどで確認していくことが重要です.例えば,以下のように考えてみましょう.
#include <stdio.h>
main()
{
int i, j;
for(i=0; i<=5; i++){ // <- loop1
for(j=0; j<i; j++) // <- loop2
printf(" ");
for(j=i; j<=i+5; j++){ // <- loop3
printf("%2d ", j);
}
printf("\n");
}
return(0);
}
|
のようなプログラムで変数 i と j がどのように変わっていくのか見てみましょう.
loop1 | loop2 | loop3 |
i | j | j |
0 | - | 0 |
1 |
2 |
3 |
4 |
5 |
1 | 0 | - |
- | 1 |
2 |
3 |
4 |
5 |
6 |
2 | 0 | - |
1 |
- | 2 |
3 |
4 |
5 |
6 |
7 |
- - - - |
5 | 0 | - |
1 |
2 |
3 |
4 |
- | 5 |
6 |
7 |
8 |
9 |
10 |
この変数の変化と実際の実行結果との対応を考えてみてください.
- 多重の for 文
前回に引き続き多重のループの練習を今日も行いますが,ループの処理の学習の
初期には変数の値がどのように変化しているのか,注意して行くと間違いに気づ
いたり,処理の無駄に気づいたりということが多いので,分からなくなってきた
ら,メモ用紙などに変数の値の遷移を書いて見直してみてください.
- 実習
実習の演習問題は当日ご案内します.
- 次回の予習範囲
教科書のp.42からp.48の while 文を予習してきてください.
なお,来週10日(月)は出張のため休講です.御注意下さい.
- 宿題
授業の終わりに宿題の案内をします.ただし,問題を見ることができるのは4日以降です.
10.184.10.130/report/
にアクセスして問題を見てください.
今回は提出期限は12/17(月)の10:00です.