11分SHAREツイートシェアはてブLINEPocket今井こんにちは!今井(@ima_maru)です。今回は、C言語やC++で、プログラムの流れを制御する「場合に応じた処理」についての解説記事を書きたいと思います。プログラミングを学ぶと、わからないことだらけだと思います。if文って何!?switch文って何!?場合に応じた処理って何!?こんなような疑問を持つ方もいると思いますので、初学者にもわかりやすいよう心がけて記事を書いていきます。わからないことがあれば、twitterでお待ちしています。それでは解説に移ります。場合に応じた処理とはまず、プログラミングにおいて「場合に応じた処理」とは何でしょうか?場合に応じた処理とは「~~だったら○○する。」などの条件を含んだ処理のことを言います。明日晴れだったらピクニックに行く明日雨だったら読書をするこのような文を表すことができるのが、場合に応じた処理ということになります。これを使うと、条件によって行う処理を変える、条件分岐するプログラムを書くことができるようになります。入力された値が0以上であったら「負の値ではない」と返し、0未満であったら「負の値である」と返すようなプログラムを作れます。以下がそのサンプルコードです。0;}実行結果1値を入力してください:-1負の値である実行結果2値を入力してください:1負の値ではない実行結果3値を入力してください:0負の値ではないこのように、入力された値によって表示を変えることができます。このように、if文をはじめとした場合に応じた処理を学ぶことで、ある条件によって動作を変えるというプログラムを作ることができるようになります。この記事では、以下の場合に応じた処理を学びます。if>-else文switch文この4つをおさえておけば大丈夫です!!まずは一番簡単な「if文」から解説します。それでは解説に入ります。if文の構造それでは実際にif文という構文を使って場合に応じた処理を作ってみます。初めに、if文の構造を学びます。条件がtrueなら処理される}if文は主に「条件」と「処理」の二つの要素から成り立っています。条件がtrueであれば読まれる条件は、比較演算子や論理演算子といったものであらわされることが多いです。条件がtrueの場合はこの処理がすべて行われ、条件がfalseの場合はこの処理はすべてスキップされます。実際に見てみましょう。WEBCAMPはこちらif文を使って場合に応じた処理をするそれではこのif文を使って場合に応じた処理というものを実現してみましょう。処理}今回書くプログラムは、キーボードから入力した値が3未満であれば「3未満」と表示するというものです。実行結果2値を入力してください:4どうでしょうか。入力した値が3未満でなければ何も反応しないと。コンピュータが自分の意志を持って振る舞いを変えているようです。条件を付けてその条件を満たすときだけ処理を実行するということができるようになるわけです。if-else文とはif文を理解しているのであれば、if-else文は簡単です。if-else文は、if文にelse文というものが合体しただけです。else文って何のことにゃ!ぷーにゃん今井else文は、if文の条件に当てはまらなかったときに読まれる処理だよ。else文は簡単です。if文の条件に当てはまらなかったときに読まれる処理を記述します。if文の条件がtrueの時にはif文が読まれ、if文の条件がfalseの時にはelse文が読まれます。if-else文の書き方はこんな感じ。条件がfalseの場合の処理}elseのほうには条件を書かなくてよいことが特徴的です。ifの条件に合わなかったときにelseのほうの処理が実行されるわけです。elseという英語に「他」という意味があるのでそれと一緒に覚えるといいですね。実行結果2値を入力してください:43以上if文では3以上の場合は何も表示されませんでしたが、今回はelse文によって3未満でない処理、つまり3以上の処理をちゃんと表示するようにすることができました。if-else文は場合分けされていて、今回のプログラムだと3未満の場合と3未満でない(すなわち3以上である)場合で分けられています。}には条件がfalseの場合に実行される処理を書きます。「WEBの仕事の基礎。if文というものが存在します。言葉で説明するのだと紛らわしいので、構文を見てみましょう。if>-else文は、if-else文にもう一つ以上条件を付け加えた形です。if>-else文「もし~~なら○○して、それ以外の時で△△だったら□□して、それ以外だったら××して」ともう一つ条件1に当てはまらなかった場合の条件2(,3,4...)を付け足すことができます。if>-else文を使ったプログラムを見てみましょう。実行結果3値を入力してください:500以上100以下このように場合分けが3つなされているのがわかると思います。if>-else文には、とても特徴的な仕様と使い方があります。一度どれかの条件に当てはまってしまえばほかの処理は実行されないということです。このことは、成績を使って解説します。0;}このプログラムを実行して、点数を入力してみます。実行結果1点数を入力してください:95S実行結果2点数を入力してください:89A実行結果3点数を入力してください:40D実行結果4点数を入力してください:-10適正な値を入力してくださいこのように表現することができました。一度どれかの条件に当てはまってしまえばほかの処理は実行されないということです。条件がtrueならその文のみを処理してif文全体を終える上の条件がfalseなら次の条件を評価していくというようになっています。上の実行例では95点はすべての条件でtrueになります。}しかし実際コンソールには「S」とだけ表示されほかの文は実行されていません。値を入力してください:95Sこれは先ほどの「上からプログラムを読んでいって、初めて条件がtrueの文に当たった瞬間ほかの文は処理されない」というところが肝になっています。以下のようにプログラムを書き換えると、正しく表示されません。}実行結果1値を入力してください:95S実行結果2値を入力してください:90S実行結果3値を入力してください:89D「89点でD評価かよ!」ってことになってしまいました。これは先にD判定の条件を持ってきてしまい、順番が狂ってしまったのが原因です。0点以上という条件が先に評価されてしまうので、たとえ80点以上(A判定)であってもEが先についてしまいます。評価が「S」か「E」に二分化されてしまいました。if>の条件には順番がある、これに気を付けてほしいということです。switch文とはswitch文は上で書いたif文達とは少し書き方が異なります。if文は条件がtrueなら実行という形でしたが、switch文は式の値によって場合分けします。式の値3;処理;break;...default:処理;}if文は毎回条件を書いてそれが「trueか?falseか?」で条件分岐していましたが、switch文では一つの式の値で場合分けをして条件分岐します。式が「さいころの目」で式の値が「1,2,3,4,5,6」で場合分けされたプログラムを作ってみると、以下のようになります。0;}プログラムを実行して、さいころの出目を入力してみます。実行結果1サイコロの出目を入力してください:11が出ました実行結果2サイコロの出目を入力してください:33が出ました実行結果3サイコロの出目を入力してください:71,2,3,4,5,6どれかを入力してください入力した値が式となり、その式の値が「1」だった場合は「1が出ました」と表示され、「3」だった場合は「3が出ました」と表示されます。1,2,3,4,5,6以外の値が入力されるとdefault処理が実行されます。default処理はif文でいうelse文のような役割で、どの式の値にも当てはまらない場合の処理を書きます。今回は「1,2,3,4,5,6どれかを入力してください」と表示する処理を書きました。超重要なのが、「break;」です。これがないとこうなります。0;}実行結果1サイコロの出目を入力してください:11が出ました2が出ました3が出ました4が出ました5が出ました6が出ました1,2,3,4,5,6どれかを入力してください実行結果2サイコロの出目を入力してください:33が出ました4が出ました5が出ました6が出ました1,2,3,4,5,6どれかを入力してくださいこのように垂れ流し状態になるので「break;」は一つ一つに挟むおまじないであると思ってください。if]-else文の説明で以下のことを考えた方がいるかもしれません。90点以上はSランク80点以上90点未満はAランク70点以上80点未満はBランク60点以上70点未満はCランク60点未満はDランクこうすればいいじゃないか!と。これはプログラミングにおいてあまり良い書き方とは言えません。(もちろん可読性が上がるというとらえ方はできるが)なぜなら90点以上の人はSランクであり、AランクやBランクかどうかは気にしなくていいからです。無駄な比較の処理を行う可能性があるということです。コンパイラで最適化してくれるかもしれませんが、期待はできません。週1でブログ書いてます。