前回、最後にif文は{ }内の分が単一の場合、省略が可能だと説明しました。
では、複数の文を扱う場合はどうする必要があるのでしょうか?
これは意外と重要な問題です。
そこで今回は、「複合文」について勉強したいと思います。
複合文(ブロック)について
if文が使えるようになると幅が広がります。
前回まではif( 式 )の式の関係演算子で場合分け処理をしましたが、
結果を表示させたのは一つだけでした。
今回は、二つの結果を表示させてみましょう。
ここでは、「二つの整数を入力して大きい方の値と小さい方の値をそれぞれ表示させるプログラム」を作りたいと思います。
単純に二つの入力された数値が、
大きい方の値
小さい方の値
それぞれ表示させてみます。
まずはプログラムを作ってみましょう。
#include <stdio.h>
int main(void)
{
int no1, no2, max, min;
printf("二つの整数を入力してください。¥n");
printf("整数1:"); scanf("%d", &no1);
printf("整数2:"); scanf("%d", &no2);
if(no1 > no2){
max = no1;
min = no2;
} else {
max = no2;
min = no1;
}
printf("大きい方の値は%dです。¥n", max);
printf("小さい方の値は%dです。¥n", min);
return 0;
}
実行結果
二つの整数を入力してください。
整数1:50↵
整数2:51↵
大きい方の値は51です。
小さい方の値は50です。
さて、ここで注目してほしいのは、if文の後です。
if(no1 > no2){
max = no1;
min = no2;
}
今までは、ifの後に文は一つでしたが、今回は二つです。
しかしながら、if文の構成は決まっています。
if( 条件式 ) 文;
何が言いたいかというと、if文が制御する文は「1つ」だけということです。
それではなぜ今回のプログラムが実行できたかというのが今回です。
今回の文をもう一度見てみましょう。
if(no1 > no2){ max = no1; min = no2; }
max = no1; min = no2;を{ }で囲んであるのが分かるかと思います。
これが重要です!
この文の並びを{ }で囲んだものを「複合文」といいます。ブロックとも言いますね。
前回、「{ }内の文が単一の場合、{ }を省略することも出来ます。」といいました。
今回のように文が複数の場合、{ }で囲む必要があるということです。
試しに
if(no1 > no2){ max = no1; min = no2; }
この文の{ }を外してプログラムを実行してみましょう。
出来ましたか?出来なかったと思います。
これは先ほど言った通り、if文の制御する文が1つだけだからです。もちろんelse文も同じです。
複合文の構成
複合文は複数の文を扱うことができますが、もう一つ含めるものがあります。
それは、「宣言」です。
ただし、条件があります。それは、文よりも前に配置しないといけないことです。
{ 宣言; 文; }
こうなるわけです。これさえ守ればいくつでもOKです。
例えば、
{ int ax; int bx; ax = 1; bx = 2; printf("%d", ax + bx); }
こんな風に
{ 宣言; 宣言; 文; 文; 文; }
なんてやっても宣言が先にくれば、
どんなに追加しても単一の文と認識してくれるので大丈夫です。
では最後にこれを踏まえて、今回のプログラム整数が同じ場合を追加してみましょう。
#include <stdio.h>
int main(void)
{
int no1, no2, max, min;
printf("二つの整数を入力してください。¥n");
printf("整数1:"); scanf("%d", &no1);
printf("整数2:"); scanf("%d", &no2);
if(no1 > no2){
max = no1;
min = no2;
printf("大きい方の値は%dです。¥n", max);
printf("小さい方の値は%dです。¥n", min);
} else if(no2 > no2){
max = no2;
min = no1;
printf("大きい方の値は%dです。¥n", max);
printf("小さい方の値は%dです。¥n", min);
} else
printf("その値は同じです。¥n");
return 0;
}
実行結果(数値が異なる場合)
二つの整数を入力してください。
整数1:22↵
整数2:23↵
大きい方の値は23です。
小さい方の値は22です。
実行結果(数値が同じ場合)
二つの整数を入力してください。
整数1:100↵
整数2:100↵
その値は同じです。
追加してみた感じではこんな感じかなと思います。
あくまで今回の重要な部分は複合文ですのでわざとこんなプログラムを考えてみました。
正直、このサイトで習ってきたことを踏まえれば最後のプログラムはもっとシンプルにできます。
この最後のプログラムを書くなら宣言のmaxとminはいらないです。
よかったら考えてみてください。
では最後に復習です。
複合文は{ }で囲む
{ 宣言; 文; }の順番を守る
if文、else文の制御出来る文は1つだけ
今回はこんなところです。
メニューへ戻る
タグ:C言語
↓もしこの記事が役に立ったらクリックお願いします。


【プログラミング>C言語の最新記事】