- 本日の作業内容
- 宿題の結果について
提出の不備は相変わらずありますが,それ以外のことについて以下に説明します.
解答例を良く見て自分の解答を考え
直してください.
- 変数が多すぎる
今回は変数は2つで十分です.無用な変数は定義しないようにしましょう.
- 結果として同じ数が表示される解答がある.
同じ数が出たときに乱数の発生をやり直すのですが,その回数として何回やり直
せば良いか,について考えてください.また,
srand((unsigned) time(NULL));
|
を何度も実行している解答もありましたが,必要なのは乱数の再発生です.間違
えないようにしてください.
- 数が表示されない
if(a != b)
printf("hogehoge\n");
|
みたいな処理を書いているだけだと,同じ数が発生したときに何も表示されない
で終わります.問題は「必ず異なる数が表示される」ように指示しているので,
何も表示されないのは間違いです.
- インデントがおかしい
- 学生番号の表示が間違っている
- 区切りのハイフン列がない
- 解答用紙のクラスの部分を選択していない(必要ないクラスの方を削除して
ください)
- 前回の復習
if 文の基本について学習しました.教科書には書いてないことで,条
件式に関する重要な概念がありますので,以下に説明しておきます.
教科書のp.24にあるように if 文の基本は図1のようになります.
図1 if 文の構成
ここで,式の値が「真」か「偽」かによって処理の流れが変わるのが if
文の基本動作ですが,式の値が真もしくは偽とはどういう意味なのか
について考えましょう.
教科書では関係演算子や等価演算子のような「比較演算子」の使用が最初から行
われていますので,括弧の中には比較する式が入るものと思いがちですが,そこ
には値さえあれば,何でも動作します.ですので,等価演算子 == の
代わりに間違って代入記号の = を使用してもエラーなく動作します.
(処理は間違ってしまいますが.)
以下のプログラムで,値の真と偽について考えてみましょう.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned) time(NULL));
int num = rand() % 3 - 1;
printf("%d\n", num);
if(num)
printf("True\n");
return(0);
}
|
- if ~ else文
今回は,もし〜ならば,という条件式にさらに「そうでないならば」という
else の処理を追加したプログラムを学習します.実習課題に沿って学習し
ていきましょう.
注意
インデント(字下げ)について毎回注意していますが,if 文においても
インデントは論理構造を把握するのに重要です.ところが,教科書のインデント
の例はあまり良くないので,以下のどちらかのように揃えるようにしましょう.きっと,こ
の方が分かりやすいと思います.
if( hoge ){
hogehoge ;
hogehogehoge ;
}
if( hege )
hegehege ;
else
hegehegehege ;
if( huge )
hugehuge ;
else if( hugehugehuge)
hugehugehugehuge ;
else if( hage ){
hagehage ;
hagehagehage ;
}
else
hige ;
|
if( hoge ){
hogehoge ;
hogehogehoge ;
}
if( hege )
hegehege ;
else
hegehegehege ;
if( huge )
hugehuge ;
else if( hugehugehuge)
hugehugehugehuge ;
else if( hage ){
hagehage ;
hagehagehage ;
}
else
hige ;
|
- 実習