- 本日の作業内容
- 確認テスト
授業の後半で確認テストを実施しますので,アナウンスに従って作業してください.
- 前回の宿題について
今回は久しぶりに解答用紙を使用しない人が出てきました.残念です.
解答用紙不使用: b1772
学生番号を出力してない人と,相変わらずインデント(字下げ)の不備もありました.
番号出力無し: b1827
インデントの不備: b1801 b1848 b1859 b1864 program4
以下は気になるプログラムの例です.参考にしてください.
int i = rand() % 900 + 100;
|
だ〜か〜ら〜,こういう変数名に i を使うなって言ってるだろうに!
int num = rand() % 990 + 100;
|
乱数の範囲には注意してください.
if(a%2==0)
{
b = a / 2;
}
else
{
b = a * 3;
b ++;
}
a = b;
printf("%d ", a);
|
間違いでは無いけれど,変数 b は不要ですね.
if(num%2==0)
{
num /= 2;
printf("%d ",num);
}
else
{
num = num*3 + 1 ;
printf("%d ",num);
}
|
こちらも間違いでは無いけれど, printf は最後にまとめれば1個ですみますけど...
while(i==1)
{
if(num % 2==0)
{
num = num / 2;
printf("%d ",num);
}
else
{
num = num * 3 + 1;
printf("%d ",num);
}
if(num==1)
{
i++;
}
num=num;
}
|
せっかく while 文を使っているのに,余分なことをするのなら意味が無くなります.
while(num>0)
{
printf("%d ",num);
if(num%2==0&&num>1)
{
num/=2;
}
else if(num==1)
{
num -= 1;
}
else if(num%2!=0)
{
num *= 3;
num += 1;
}
}
|
場合分けが変ですし, if - else 文を使用するという基本がわかっていません.
while(a > 1)
{
printf("%d ",a);
if(a%2==0)
{
a = a/2 ;
}
else
{
a= a*3+1;
}
}
|
微妙な間違いです.先に printf で変数 a の値を出力してしまうと,最後の1が出力されません.
- 前回の復習
前回は while 文でした.何回繰り返すかわからない処理の場合などには for 文よりも while 文の方が適している場合がありますので,今後も必要に応じて使い分けていきましょう.
- 多重の for 文
for 文の中にまた for 文を入れることで様々なことが可能になります.例えば,2次元的な画面表示があります.今回は,画面に座標的な出力を行うことを学習します.
12月10日の演習課題の iii. のような表示は,今回扱う2重の for 文を使用すればものすごく簡単になります.また,剰余なども必要ありません.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned) time(NULL));
int i, j;
for(i=1; i<=5; i++)
{
for(j=0; j<25; j++)
{
printf("%d ", j);
}
printf("\n");
}
return 0;
}
|
基本的には,外側のループで行を縦にすすめる制御を,内側のループで行内を右へ表示していく作業を行っています.
乱数を使って行ごとに異なる数の●を表示させる以下のようなプログラムを考えましょう.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned) time(NULL));
int i, j, dots;
for(i=1; i<=3; i++)
{
dots = rand() % 4 + 1;
for(j=1; j<=dots; j++)
{
printf("● ");
}
printf("\n");
}
return 0;
}
|
このプログラムの動作を理解してもらうための,紙芝居的なページも別に用意しましたので,必要に応じてご覧ください.じっくり見て動作を確認してもらえれば幸いです.
ただし,発生する乱数は4,3,1と固定されていますので,ご注意ください.
- 実習
実習の演習問題は当日ご案内します.
- 次回の予習範囲
引き続き多重の for 文を扱います.予習用の課題を見ておいてください.
- 宿題
授業の終わりに宿題の案内をします.