これまでのプログラムは上から順に実行されました。次は条件によって命令を実行したりしなかったりするようにします。「700円持っていたらラーメン、持っていなかったら牛丼」というような処理です。
(1) if文の形式
条件に合っている時には命令A、条件に合っていないときには命令Bという処理を実行するための命令がif文(ちなみに「いふぶん」と読む)。if文の構造は、
if (条件式) 命令A; else 命令B;
であり、条件式を満足する(真)場合には命令Aを実行し命令Bは実行しません。満足しない場合には(偽)命令Aを実行せずelse以下の命令Bを実行します。else以下は省略可能です。条件式が満足しない場合に更に条件を判断させる場合には、else if (条件式) となる。この場合は、
if(条件式1) 命令A; else if(条件式2) 命令B; else 命令C;
となる。条件式1が成立していれば命令Aをやって終わり。条件式1が不成立で、条件式2が成立している場合は命令B、どちらの条件も満足していなければ命令Cを行います。
条件によって行う命令が複数文にわたるときには、
if (条件式) { 命令 …} else { 命令 …}
と書く。
条件式は、次の関係演算子と論理演算子で書かれる。
関係演算子
> より大きい
>= より大きいか、等しい(以上)
< より小さい
<= より小さいか、等しい(以下)
== 等しい
!= 等しくない
論理演算子と使用例
&& 論理積(2つの条件共成立) if(a>0 && b>0)
|| 論理和(2つの条件のうち少なくとも片方が成立)if(a>0 || b>0)
! 否定(後に続く条件が成立しない) if(!(a==b))
成立した場合、1(真)、成立しない場合、0(偽)となる。
(2) if文の例
新しいプロジェクトno6にソースファイルif1.cを追加して次の内容を入力してください。
実行結果は、
100
です。10行目の条件式は成立するのでx=-x; が実行されるのでxの値が100になります。elseがないので条件が成立しなければ10行目では何もせずに11行目以降に移動します。int x=-100; のところを scanf("%d",&x); とすれば入力した整数値の絶対値を表示するプログラムです。
(3) if文の例2
新しいプロジェクトno6にソースファイルmax3.cを追加して次の内容を入力してください。コメント部分は省略可です。
各命令の説明はコメントに書いておきました。これは、a, b, cの中の最大値を求めるプログラムです。a, b, cの値を変えてもちゃんと最大値を表示することを確認してください。
演習1 max3.cのプログラムで、12-13行目を次の様に書き換えるとうまく動作しなくなる。その理由を説明せよ。
12 if(b>Xmax) Xmax=b;
13 else if(c>Xmax) Xmax=c;
※ この演習の解説はページ最後にあります。
演習2 所持金を整数型変数の変数moにコンソールから入力し、そのmoの値が800円以上なら焼肉弁当、400円以上800円未満なら牛丼、400円未満ならおごってもらう、と表示するプログラムを作成せよ。
(3) if文の例3(&&や||を使う)
新しいプロジェクトno7にソースファイルif2.cを追加して次の内容を入力してください。
さて、このプログラムは数学をmathと英語をengとしてその2変数に点数が代入され、両方とも60点以上なら合格、片方だけ60点以上なら一科目補習と表示するプログラムです。両方60点未満なら何も表示されません。&&は両方の条件math>=60, eng>=60を満足している時に真、||は少なくとも片方の条件が満足なら真です。
まず13行目のif文で2つの条件が満足すれば真となり合格と出力して14行目はもう実行せずに終わる。13行目の条件が偽になった場合に、14行目で今度はどちらか片方でも60点以上なら真になり、一科目補習と表示して終わる。
演習3 整数型変数のinp_aに値をコンソールから入力し、その値が偶数か奇数かを表示するプログラムを作成せよ。
演習4 整数型変数のyearにコンソールから西暦を4桁で入力し、その年がうるう年かどうか判断して、うるう年かどうか判断して表示するプログラムを作成せよ。
※うるう年かどうか判断する方法は次の通り。年号を4で割った余りがゼロの時はうるう年であるが、例外で100で割った余りがゼロの時はうるう年ではなく、さらに例外で100で割った余りがゼロでも400で割った余りがゼロならうるう年である。プログラムができたら、次の値を入力して確認すること。1988,2000,2018はうるう年、1986,1900,2006,2100は非うるう年である。
演習1の解答
2つのプログラムの処理の差を図にすると下図の様になる。
左側はmax3.cのプログラムであり、aを最初にXmaxに入れ、それよりもbが大きければXmaxをbに、さらにそのXmaxよりもcが大きければXmaxにcを入れる。
右側は演習の際のプログラムであり、aを最初にXmaxに入れ、それよりもbが大きければXmaxをbにするがこれで処理が終わる。bが大きくない場合にXmaxとcを比較してcが大きければXmaxにcを入れる、という処理になり、b>aの時にはcに関係なくXmaxにbを入れて終わってしまうため、c>b>aの時に最大値が求まらない。
0コメント