314640 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

giru0116のブログ

giru0116のブログ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2007.01.10
XML
カテゴリ:C言語
さて、前回の十章でif,else文をやりましたが、十章の段階だと
まだ条件が簡単なのしか出来ませんでしたね。そういうわけで今回はその発展系から始めます。

if文の発展



上で書いたように、前回は条件が「0ならば」等簡単なものでした。
最初に補足すると、条件というのは実は偽は確かに0なのですが
真は0以外の事を指します。
これは論理演算子(等価演算子、不等号演算子等)の時は
真が1であるので誤解しやすいです

さて、今回は「~かつ・・・」、「~または・・・」を紹介します。

まず「かつ」は「&&演算子」で表します。
何故&が2つもあるかというと、実は&1つの演算子も存在するためです。
ただ、その演算子は現在必要ないので気にしないで下さい(UU)
次に「または」は「||演算子」で表します。 これも&と同じ理由で|が2つありますが、気にしないで下さい(汗

さて、例を紹介します。

if03

こんな感じです。この&&, ||演算子はif等の条件でしばしば使うと思われるのでよく覚えてください。
まず、最初のif文は入力された整数(以下seisu)が
2、3で割った際余りが共に0になる時、条件が真となりseisuは2の倍数でかつ3の倍数だと分かります

次のelse if文で余りが共に0ではないけれども、どちらかが0の場合if文の条件が偽で、else if文の条件が
真となるのでseisuは2の倍数または3の倍数だと分かります。

最後にifもelse if文も偽だった時は、seisuは2の倍数でも3の倍数でもないと分かりますね。

このように、複雑な条件にも対応する事ができます。 これ以上複雑な条件の場合は
else if文はif文とelse文の間に何個でも入れることができるためelse if文を2つ、3つと使っていけば対応できます。

ところで&&演算子は「~かつ・・・」です。 ~の部分が偽だった場合、・・・を考える必要がありません。

つまり、~が偽だった場合、・・・の部分は完全に無視されます。



また、書いてなかったので一応書きますが、if,else文は1つのプログラム上で何個でも使えます。
else if, elseを単品で使う事はできませんが・・・。

そしてif(条件)等を入力した後は、改行した際タブキーでifより右方面にずらした方が見やすいです。
この「C言語で始めよう」だと大半の場合この作業をオートでやってくれます。
この作業を「インデント」と言います。 これは見やすくすると後々に修正しやすいため絶対に覚えた方がいいです。
しかし、たまにオートでやってくれない場合もありますので、その際には自分でやりましょう。
中には全くオートインデントをしてくれないテキストエディタもありますしね。

switch文



さて、次は2つ目の制御文のswitch文です。
if,else文は入力等によって処理を分岐させる制御文でした。
今回のswitch文は処理を多分岐させる制御文です。
確かにif文でもelse if文を何個も使えば多分岐させることはできるんですが、switch文の方が便利な場合もあります。

switch文はif文より説明し辛いので、例を示した後で詳しく説明します。



ちょっと長くなったので、今回はテキスト形式にしました。
それを見れば分かるようにswitch文というのはまずswitch(式)から始まり { を付けて
次にcase (数字か文字の定数):として、処理内容を書いて、最後にbreak;を付けます。
ちょっと分かり辛いかもしれないので書きますが、case 1: ←これはコロンです。セミコロンじゃないです。

それを条件分岐の数だけ続けて最後にdefault:を書いて、処理内容を書きます。
defaultはelseのように省略可能です。 それにswitch(式)の式は大抵変数です。

まず、caseというのは日本語訳では「場合」です。 つまり上の例だと
1の場合、2の場合、…、6の場合というわけですね。
if文で条件を満たした際のように1の場合はこの処理を実行するといった使い方をします。

また、ここでbreak文が初登場したのでこれも紹介しなければいけませんね。
break文は処理をその場で中断して、switch文の括弧の外に出る(以下switch文を抜ける)ための文です。
これだけだと何を言っているのか分からない気もしますので
先ほどの例の中のcase 2の手前のbreak;を抜いて再び実行して1を入力してみてください。

そうするとswitch文を抜けるという意味が分かるのではないでしょうか?
だからdefaultの処理の後にはbreak;をつける必要が無いわけです。
でも上の例にはdefaultの後にもbreak;を付けています。
これは今まで読んで来た様々な本の中で「とりあえず付けておけ」
と書いてあったため付けてあります。 別に抜いても構わない気がしますが・・・

ここまでくると、if,else文よりもswitch文のほうがいい場合が分かるかと思いますが
条件が数字か文字の定数である場合はswitch文の方がいいです。
いちいち else if(seisu == 2) と書くよりも case 2:の方が早く書けますからね。
それにelse ifを何個も使っていると多分どこかでミスを犯します(汗

まぁそれでも複雑な条件が必要となる場合はやはりif,else文の方が確実です。
if(seisu > 0 && seisu < 10)と書いたほうが、case 1~case 9と書くよりも早いですからね^^;
(無論この場合はcase 1~case 8にはbreak;を付けませんし処理は1つですが、それでもif文の方が早いです)

例題


1:何か整数を入力して、その後偶数でかつ6で割れる場合と偶数の場合とそれ以外で
処理を分けるプログラムを作成しましょう。(if文1個、else if文1個、else文1個を使う)

2:上の問題をif文3個を使ってプログラムを作成しましょう。
(ただし2つ目の偶数の場合という条件を6で割れない偶数に変更)

3:1~10までの整数を入力するという条件の下で1の問題をswitch文を使って解いてください。
(printf関数の使用は3回)

解答例

2はelse ifやelseの価値を再認識してもらうための問題です^^;
ここまで来たらこの第十一章は終了です。
ここに書いてあることが分からない場合は記事にコメント、もしくはメールをお願いします。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2007.04.23 12:31:15
コメント(0) | コメントを書く


PR

キーワードサーチ

▼キーワード検索

プロフィール

giru0116

giru0116

カレンダー

お気に入りブログ

まだ登録されていません

コメント新着

かほほほほ@ Re:ネイピア数(02/16) やっと見つけました! さがしていたので嬉…
通りすがり@ 見つけた! 円周率は結構載ってるんですが、 自然対…
無料@ アクセス記録ソフト 無料 楽天 アクセス記録ソフト! http:/…
無料@ アクセス記録ソフト 無料 楽天 アクセス記録ソフト! http:/…
無料@ アクセス記録ソフト 無料 楽天 アクセス記録ソフト! http:/…

フリーページ

ニューストピックス


© Rakuten Group, Inc.
X