- 本日の作業内容
- 小テスト
C6クラスとC7クラスで別々の小テストを実施します.
- 宿題の結果について
再び,添付ファイル名や件名の間違いが出始めました.注意してください.例に
よって,以下に興味深い間違いを列挙しますので,今後の参考にしてください.
|
printf("Number of over displayed: %d\n\n",k);
printf("\nNumber of ""over"" displayed: %d\n\n",count);
printf("Number of 'over' displayed: %d\n" , sum);
printf("\nNumber of ”over” displayed: %d\n\n",c);
|
"over" を表示するのに苦労している後が見られます.最初のころに授
業でやったことを思い出すだけでよかったのですが…
|
for (j = 0 ; j <= 10 ; j++){
a = rand() % 100 + 1;
printf(" %3d ",a);
sum += a ;
if ( j == 10 )
printf(" %3d",sum);
if(j == 10 && sum>500){
printf(" over");
n++;
}
|
何人かに見られたパターンです.改行を入れるかどうかを if で判定
する必要はありません.内側の j に関するループが終了した時点で改
行すれば良いだけです.
おかしい例 | 左の修正例 |
for(j=1;j<=10;j++){
a = rand()%100+1;
sum+=a ;
printf("%3d ",a);
}
printf(" %4d",sum);
|
for(j=1;j<=10;j++){
a = rand()%100+1;
sum+=a ;
printf("%3d ",a);
}
printf(" %4d",sum);
|
|
for(i=1;i<=10;i++){
int sum=0;
for(j=1;j<=10;j++){
int m;
m=rand()%100+1;
printf("%3d ",m);
sum+=m;
}
printf("%d",sum);
if(sum>=501){
printf(" over");
n++;
}
printf("\n");
}
|
for(i=1;i<=10;i++){
int sum=0;
for(j=1;j<=10;j++){
int m;
m=rand()%100+1;
printf("%3d ",m);
sum+=m;
}
printf("%d",sum);
if(sum>=501){
printf(" over");
n++;
}
printf("\n");
}
|
|
for(i=1;i<=10;i++){
b=0;
for(j=1;j<=10;j++){
a=rand()%100+1;
printf("%3d ",a);
b+=a;
}
printf(" %d",b);
if(b>=501){
c++;
printf(" over");
}
printf("\n");
}
|
for(i=1;i<=10;i++){
b=0;
for(j=1;j<=10;j++){
a=rand()%100+1;
printf("%3d ",a);
b+=a;
}
printf(" %d",b);
if(b>=501){
c++;
printf(" over");
}
printf("\n");
}
|
|
for(i=1; i<=10; i++){
sum = 0;
for(j=1; j<=10; j++){
num = rand () % 100 + 1;
sum += num;
printf("%3d ", num);
}
printf(" %3d ", sum);
if(sum >= 501){
printf(" over");
count++;
}
printf("\n");
}
|
for(i=1; i<=10; i++){
sum = 0;
for(j=1; j<=10; j++){
num = rand () % 100 + 1;
sum += num;
printf("%3d ", num);
}
printf(" %3d ", sum);
if(sum >= 501){
printf(" over");
count++;
}
printf("\n");
}
|
|
for(i=1; i<=10; i++){
b = 0;
for(j=1; j<=10; j++){
a = rand()% 100 + 1;
b += a;
printf("%d ",a);
}
printf(" %d",b);
if(b > 500){
printf(" over\n");
c ++;
}
else
printf("\n");
}
|
for(i=1; i<=10; i++){
b = 0;
for(j=1; j<=10; j++){
a = rand()% 100 + 1;
b += a;
printf("%d ",a);
}
printf(" %d",b);
if(b > 500){
printf(" over\n");
c ++;
}
else
printf("\n");
}
|
|
for(i=1;i<=10;i++){
wa = 0;
for(k=1;k<=10;k++){
rnd = rand() % 100 + 1;
wa += rnd;
printf("%3d",rnd);
}
printf("%5d",wa);
if(wa > 500){
printf(" over\n");
over++;
}
else
printf("\n");
}
|
for(i=1;i<=10;i++){
wa = 0;
for(k=1;k<=10;k++){
rnd = rand() % 100 + 1;
wa += rnd;
printf("%3d",rnd);
}
printf("%5d",wa);
if(wa > 500){
printf(" over\n");
over++;
}
else
printf("\n");
}
|
インデントのおかしい答案が相変わらず多く見られます.上記は左側におかしい
もの,右側にそれを修正したものを載せていますので,心当たりのある人はよく
見て理解して下さい.
|
if(sum < 501)
printf(" %3d\n", sum);
if(sum >= 501){
printf(" %3d over\n", sum);
count++;
}
|
場合の数が2つの場合には if で片方を選択した場合には残りは
else で処理しましょう.間違いを防ぐ大事な方法です.
|
int b = rand() % 100 + 1;
printf(" %d ",b);
|
いろいろと間違いを含んでいる例です.まず,これは,実は for 文の
中なのですが,ループの中で int などで宣言をすることがおかしいで
す.さらにインデントがおかしいですね.printf の行が下がり過ぎで
す.そして,printf の中で %d を使用していますが,桁数
の指定をしていません.
|
if(n == 100)
printf("%d ",n);
else if(n <= 9)
printf(" %d ",n);
else
printf(" %d ",n);
|
これもprintf の中で桁数指定をすれば良いだけの話です.基本をしっ
かり抑えていないと,いざと言うときこのような無駄なことをしてしまいます.
- 前回の復習
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を予習してきてください.また,配列に関する小テストを実施
しますので,予習をしっかりしてきてください.
- 宿題
授業の終わりに宿題の案内をします.今回
は冬休みを挟んで1ヶ月近く間が開くので2段階で宿題を出します.一つ目の提出
期限は1/10(火)の午前10:00とし,その日の午後に新しい宿題を提示しますので
その2つめの宿題の〆切は1/16(月)の午前10:00とします.案内に注意していて下
さい.
なお,メンター学習室の開設は以下に示す日時で実施しますので,必要に応じて
利用してください.
12/21(水) | 1/6(金) | 1/11(水) | 1/13(金) |