わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

初期化すべきか

一昨日の「最大値問題」の続きです.といっても,読み解き(詳細化)をする体力はなく,コーディングの話です.
木曜に,それぞれの学生になんとか動くところまで作らせ,昨日,改めて自分なりにコードを書いてみました.そこで気になったのは,「それぞれの変数を初期化すべきか」ということ.
説明のため,変数名を決めておきます.

  • 何番目を読んでいるか(forループで使用)…i
  • scanfで読み出した値(を格納するところ)…d
  • 最大値…max.これはmaximumの略.
  • 最大値は,何番目に読み出したものか…pos.これはpositionの略.

それぞれ検討していきます.まずiは,forループの初期化で設定すればいいでしょう.次に,dの初期化も不要です.scanfで値を格納してから,使用(参照)するので.
maxとposですが,まず,「読み込んだ整数が0個ならば,何も出力しない」というルールを付けることにします.これは課題文になく,自分で決めたルールです.こうすると,「読み込んだ整数が0個か否か」が,何らかの方法で判断できないといけません.ここでは,またさらに変数を用意するのではなく,posを使います.上述の定義の通りだと,posは1以上となるのですが,posの初期値を0とし,「posが0なら,一つも整数を読み込んでいない」とすることで,自分で決めたルールをプログラムに乗せることができます.
最後にmaxについて.読み込んだ整数が0個なら,maxに入っている値は参照される(printfで出力される)ことなく終了します.読み込んだ整数が1個以上あれば,1個目を読み出せたときに,posに1が代入されるとともに,maxにdが代入されます.(そして更新を経ながら,最終的に出力されます.) ということなので,maxの変数宣言時には,初期値を設定する必要はないという結論になります.そもそも,入力は整数値(ここでは簡単のためint型としますが,どんな型でも問題はなくなりません)なので,「maxの初期値」に何を設定すればいいかが難しい,という問題もあります.こういうときは,初期値を具体的にこの値にする,というのではなく,maxに入っている値が確かに最大値であることを,別の変数が保証(ここではposが0でないか0か)すればいいということです.