この章ではwhile文について説明します。
何回も同じ処理(ループ)をする必要があるときにwhile文を使えば簡単に記述することができます。
同じような処理を何度も繰り返すプログラムを書く場合、以下のように何度も同じ処理を書くのは面倒ですし、間違いも多くなりがちです。 そこでwhileを使うと簡潔に書くことが出来ます。 初めにwhileを実行する時に条件式がTRUEもしくはFALSEかどうかをif文と同じようにチェックします。
TRUEである場合はwhileの処理文が実行されます。
FALSEである場合、処理文は実行されません。
whileは条件式がTRUEである限り何度でも処理文を実行します。
では例をみてみましょう。 while( i < 4)の条件式をif文と同じようにTRUEもしくはFALSEで判定します。
1はまだ4未満でTRUEですのでを実行して、1を出力します(FALSEであるならば何も出力されません)。 上の2番でiは1が足されているので2になっていますが、まだ4未満なのでTRUEになり、を実行し、2を出力します。 上の4番でiは1が足されているので3になっていますが、まだ4未満なのでTRUEになり、を実行し、3を出力します。 上の6番でiは1が足されているので4になっていますが、すでに4未満ではないのでFALSEになり、while文はここで終了です。
結果は「123」です。
もし、i++がないとどうなると思いますか?
答えは無限ループと言いまして、の部分が永遠に4より大きくならないので無限にを繰り返します。
投稿者: 無漏路
switch文を知ろう
この章ではswitch文について説明します。
if文と同じく条件分岐できるのがswitch文です。 switchのカッコ()の中の式が、caseの値と一致するとbreakまでの文が実行されます。
breakはブロックを抜けるために存在します。
ブロックとはif文でも出てきましたが、の部分です。
switch文の場合はbreakでswitchのブロックを抜けることが出来ます。
ではswitch文の例を見てみましょう。 先ほどのswitch文と同じことをif文で表すと以下のようになります。 次は仮にbreak文を記述しなければどうなるか説明します。 通常はcaseの値に一致した場合、それ以降の処理をbreakの箇所まで実行していきますが、 caseの値に一致したのに関わらずbreakがないと次のbreakまで 、もしくはbreakがどこにもなければdefaultまで処理が実行されます。
仮に上の例で入力したaの値が0だとすると、0はの値と一致するのでを実行して処理が終わるはずのところ、breakが無いがために、そこで止まらず抜けて行ってしまいます。
さらににもにもbreakが無いのでそこの処理も実行されて、最後のdefaultまで実行されてしまいます。
つまりaの値が0の場合、以下のすべてが実行されることになります。
次の例を見てみましょう。 今まで、breakまでのcase文は1つだけでしたが、上の例のようにcase文はまとめて複数設置することが出来ます。
switchの式がbreakまでの複数のcaseの中でどれか1つのcaseの値と合致した場合はそこの処理文を実行してbreakで抜けます。
if文で星座の判定をしよう
この章ではif文で星座の判定のプログラムを作成します。
scanfでユーザーに誕生月と誕生日を入力させて、それに対して星座を出力させるプログラムです。
少し長いプログラムですが、if文が連なっているだけです。 ここで使っているif文は入れ子になっています。
つまり、if文の中にif文が入っている構造になっています。
この例では初めにmonthの数値が1から12までのどの数値なのかを以下の条件式で確認します。
次に2つ目のif文でdayの数値により星座の分別を行います。
2つ目の条件式は2つの星座の日付を扱っているのでという形式で書きます。
例えばMonthが1であれば山羊座か水瓶座なので、dayが18であれば山羊座になります。
また、dayの値が31を超えていればが出力されます。
論理演算子について知ろう
この章では論理演算子について説明します。
「if文について理解しよう。if文の基本構文1」の箇所で比較演算子について説明しましたが、if文でもっと複雑な条件定義をしたい場合に論理演算子を使用します。
では論理演算子の例を見てみましょう。 論理演算子は条件式をもっと詳しく表現したい時に使用します。
例えば「3より大きく そして 10より小さい」というような複雑な条件式にしたい時に使用します。
例ではの中で「&&」を使用していますが、次のような意味があります
「aは0よりも大きいそしてaは100よりも小さい 」という意味です。
この2つの条件をつないでいる「そして」の部分が論理演算子です。 「&&」は「&&」の左右の値が2つともTRUEの場合のみ条件式がTRUEとなります。
「||」は「||」の左右の値のどちらか一方がTRUEの場合に条件式がTRUEとなります。
では「||」の使用例をみてみましょう。 この例は年齢が20歳以上もしくは身長が170センチ以上であるならばTRUEです。
つまり「||」を挟んだ両辺のどちらかがTRUEであるならばTRUEですが、この例ではの部分がTRUEですので「trueです」が出力されます。
次は「!」の使用例をみてみましょう。 次の例は「年齢が80歳以上ではない」場合はTRUEになります。
この例の条件式は「20は80より大きい」の否定なのでTRUEです。
比較演算子と一緒に「!」を使用する場合には例のように比較演算子をカッコでくくって、その前に「!」を置きます。
次は論理演算子の優先度の説明です。
上の例では論理演算子は1つでしたが、論理演算子が複数使われている場合はどこが先に実行されるのかが重要になります。
では例をみてみましょう。 また、以下のようにカッコを付けることで優先順位を変えることが出来ます。
if文の条件式に変数を入れよう
これまでは条件式に比較演算子を使っていますが、のように条件式に変数を入れることも出来ます。
この場合、条件式に0以外の整数値が入っている場合にはTRUEになります。
以下の例では条件式にchar型が入っていますが、char型は整数で表せることを学習しました。
つまり、以下の例の条件式には0以外の数字が入っていることになり、条件式がTRUEになっています。
では例をみてみましょう。 これを書き換えると以下のようになります。
変わっている箇所はifの条件式です。 つまり、最初の例はの部分を省略して書いているわけです。
つまり、この例ではaが0でない時にTRUEになります。
この場合、aは0ではないので、が実行されます。
if文について理解しよう。if文の基本構文3
if文について理解しよう。if文の基本構文2
この章でもif文について説明します。
ifの基本構文1では条件式がFALSEの場合にはif文の中は無視されて何の処理も行われません。
そこで、条件式がFALSEの場合にも何かしらの処理を実行したい時に使用するのがです。 では例をみてみましょう。 「wallet=15000;」は財布に15000円入っていると言う意味です。
そして条件式は「財布に入っているお金が10000より少ないのならば」と言う意味なのですが、財布には15000円入っているので、条件式はFALSEです。
FALSEなので「条件式がFALSEのときに実行される文;」つまりが実行されます。
もう1つ例を挙げます。 ユーザーに入力させたaとbの値が同じ数値、つまりTRUEであるならばを実行します。
ユーザーに入力させたaとbの値が違う数値、つまりFALSEであるならばを実行します。
例えば45を2回入力した場合の結果は以下の通りです。
if文について理解しよう。if文の基本構文1
この章ではif文について説明します。
if文はどのような時に使われるのかを日常生活の場面で説明します。
例えば、「もし、今日財布にお金が10000円あったらフランス料理にして、20000円あったら中華料理にする」などの選択を繰り返して人は生きていますが、プログラムでもこのような表現ができるのです。
このように条件によって表現を変えることを条件分岐と言います。
条件分岐にはifを使用します。 条件式は条件を満たしていればTRUEを返し、条件を満たしていないならばFALSEを返します。
そして、TRUEの時にブロックの中の文が実行されます。
TRUEは「真」
FALSEは偽」
とも言います。
次の例でTRUEやFALSEについて説明します。 条件式には比較演算子の「>」を使用していますが、常識的に考えて5は2より大きいですので、条件を満たしていると考えるのです。
これがTRUEです。
TRUEですので が実行されます。
では以下のif文は条件を満たしているでしょうか? 2は5より大きくないので条件を満たしていません。
これがFALSEです。
FALSEの場合はが実行されません。
つまり、何も実行されないので何も表示されません。
次は比較演算子の中から「= =」を使います。 aとbの値が等しい場合にTRUEになります。
aとbの値が等しい場合にTRUEになりますので、この例では「aとbは等しい」が出力されます。
ユーザーに文字を入力させる方法
この章ではユーザーにキーボードから入力させる方法について説明します。
この方法もC言語で使われていますがC++でも使えるので説明をします。
では例をみてみましょう。 gets(配列名);は文字列と文字列の間に空白を入れることが出来ます。
例えば,「dog cats」のようにdog とcatsの間に空白を入れて複数入力することが出来ます。
例えば以下のように出力されます。 この後に説明するscanfではのように空白を文字列に入れることはできません。
scanfについては説明しましたが、復習のつもりでもう一度説明します。
scanfはエンターキーを押すまで入力することが可能になります。
では例をみてみましょう。 結果は以下の通りです。 scanfの中の文字を入れる配列は複数書くことが出来ます。
この例ではxとsの2つを設定しています。
その場合にはそれぞれの配列をカンマで区切ります。 結果は以下の通りです。 もう一つユーザーにキーボードから入力させる方法があります。 入力演算子「>>」を使うことでもユーザーにキーボードからの入力をさせることが出来ます。 ユーザーが入力したデータはの中の変数nに入ります。
その後、で変数nを出力しています。