「if文の使い方が知りたい」
「条件で処理するものを変えたい」
そんな疑問を持つ方に向けて書きました!
大学や本で学んだことを例題を入れながら、わかりやすくまとめてみました!
条件式
プログラムを書いていると常に同じものを実行することはありません。
あるときは処理Aを行い、またあるときは処理Bを行なったりします。
このように、なんらかの条件をつけることによって
処理されるものを変えることができるのが
条件式です。
if、else文
まずは以下を実行してみましょう。
/*
正の整数を読み込み、偶数/奇数を判定して表示
*/
#include <stdio.h>
int main(void)
{
int a;
printf("正の整数を入力してださい:");
scanf("%d",&a);
if(a%2==0)
printf("その数は偶数です");
else
printf("その数は奇数です");
return 0;
}
こちらは正の整数をキーボードから入力して、
その数が偶数か奇数かを教えてくれるプログラムになります。
フローチャートで書くと以下になります。
(フローチャートについてはこちらで解説しています。)
if文は、
if(条件式)
処理
と書きます。
これは、条件式を満たした場合のみ処理が行われ、
満たしていない場合は何もせず、次のコードに写ります。
if(条件式)
処理A
else
処理B
これは、条件式を満たした場合は処理Aを行い、満たさない場合は処理Bを行います。
もし、「else」の代わりに「else if(条件式2)」と書くと、
最初の条件式を満たさなかった場合で、
条件式2を満たす場合は処理Bが行われ、
満たさない場合は次のコードに移ります。
switch文
まずは以下を実行してみましょう。
#include <stdio.h>/* printf, scanf を使うのに必要 */
int main(void)
{
int a; /* くじの番号 */
printf("4桁の正の整数を入力してください:");
scanf("%d",&a); /* キーボードから入力文字列を読み込み,整数に変換しnumに格納 */
if ( a < 1000 || a > 9999 ) /* 4桁の整数であるかのチェック */
printf("正しい4桁の正の整数を入力してください\n");
else { /* 4桁の整数が入力された場合 */
switch ( a % 100 ) { /* a の100で割った余り(下2桁)によって分岐する */
case 11: printf("2等当選です!\n"); break; /* 下2桁が11の場合 */
case 22: printf("3等当選です!\n"); break; /* 下2桁が22の場合 */
case 77: printf("1等当選です!\n"); break; /* 下2桁が77の場合 */
case 80: printf("3等当選です!\n"); break; /* 下2桁が80の場合 */
default: printf("残念でした\n"); break;
}
}
return 0;
}
これは、4桁の数字をキーボードから入力して、下2桁の数字によって当選するかしないかを判定するプログラムです。
switch文は以下のように書きます。
switch(条件式){
case A : 処理A break;
case B : 処理B break;
case C : 処理C break;
}
「case」の後の「A,B,C」は数値を入れて、条件式の結果がAのとき、Bのとき、、、と何個でも書くことができます。
「break;」を書くことにより、処理が実行された後でswitch文から抜け出します。
それぞれの条件式の使いわけ
if、else文は、
・条件分けが2つのとき
に使います。
短い文で処理できるので、swich文より綺麗にまとめることができます。
if、else if文は、
・それぞれの条件式が違う場合
に使います。
条件式A、条件式Bで判別するものが違う場合はswitch文が使えないため
else ifで条件分けをします。
switch文は、
・それぞれの条件式が同じ場合
に使います。
条件式A、条件式Bで判別するものが同じ場合は、switch文でまとめた方が綺麗に短いコードで書けます。
問題(発展)
今回学んだことを活かして以下の問題を解いてみましょう。
「3辺の長さを入力し、その3辺がどんな三角形になるのかを印字するプログラム」(鈍角、鋭角、直角、三角形を作らないかを判定し、さらにその三角形が正三角形かも判定する。)
答えは以下になります。
#include <stdio.h> /* printf, scanf を使うのに必要 */
int main(void)
{
int a,b,c,d,e,f;
printf("3辺の長さを整数で入力してください\n"); /*三辺の長さを入力*/
printf("1辺目:"); scanf("%d",&a);
printf("2辺目:"); scanf("%d",&b);
printf("3辺目:"); scanf("%d",&c);
if(a>=b && a>=c && b>=c) /*三辺の長さを長い順に並び替える*/
{ d=a; e=b; f=c;}
else if(a>=b && a>=c && c>b)
{ d=a; f=b; e=c; }
else if(b>=a && b>=c && a>=c)
{e=a; d=b; f=c;}
else if(b>=a && b>=c && c>a)
{f=a; d=b; e=c;}
else if(c>=a && c>=b && a>=b)
{e=a; f=b; d=c;}
else if(c>=a && c>=b && b>a)
{f=a; e=b; d=c;}
if(d>=(e+f)) /*三角形を判別する*/
printf("3辺%d,%d,%dは三角形をつくりません\n",d,e,f);
else if(d*d<(e*e+f*f))
printf("3辺%d,%d,%dは鋭角三角形です\n",d,e,f);
else if(d*d==(e*e+f*f))
printf("3辺%d,%d,%dは直角三角形です\n",d,e,f);
else if(d*d>(e*e+f*f))
printf("3辺%d,%d,%dは鈍角三角形です\n",d,e,f);
if(d<(e+f) && d==e && d==f) /*さらに正三角形かどうかを判定*/
printf("さらに正三角形です\n");
else if(d<(e+f) && d==e || d<(e+f) && e==f) /*さらに二等辺三角形かどうかを判定*/
printf("さらに二等辺三角形です\n");
return 0;
}
発展問題のような難しいものとなっていますので、作れたら凄いくらいに思ってください。
もちろん書き方は人によって変わるので、似たような結果になれば大丈夫です!
まとめ
今回は、条件式について学びました。if文やswitch文を組み合わせていくことで、より複雑なコードを書くことが可能になりました。
条件式はいろんなプログラムで必ずと言っていいほど使われますので、完璧にマスターしましょう!!
ループ処理について、こちらで解説しています!
気になる方はぜひご覧ください。