C言語入門ブログ

C言語を、本当に初歩から学んで、その内容を書いていきます。

真偽値とif文について

さて、ついに『if文』について説明します。

『if文』とは『条件分岐』とか言われるものです。これは、プログラムがただの電卓より強い理由の1つとなるものです。
大事なので、頑張って習得しましょう。

一番シンプルな『if文』の形

さて、まずは『if文』を使ったプログラムを読んでみましょう。
入力や出力、そして変数の知識が必要です。自信のない方は下の記事で復習してみて下さい。
C言語における入力について - C言語の勉強用ブログ
変数について - C言語の勉強用ブログ←この記事で出力の説明もしています。

はい、今回読む1つ目のプログラムはコチラ。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a == 3){
		printf("number is 3!");
	}

	return 0;
}

とりあえずはideone上で実行してみましょう。
まずは、入力を3にしてやってみて下さい。そうすると、

a is 3!

と出力されますね。また、入力を3以外の数字にしたら、何も出力されません。

では、内容の説明です。『if文』は、次のような書き方をします。

if(条件){
条件が『真』だったときに実行すること
}

条件が『真』である、という表現は少し分かりにくいですかね。これは、条件に書いてあることが正しかったら、という言い方に変えてもよいと思います。
上の例ではこのif文は

//if文
	if(a == 3){
		printf("number is 3!");
	}

と書いてありますね。

==

というのは、『この==の右と左の数値は等しいか?』という質問を表します。『=』が2つ重ねるとそのような意味を持ちます。1つにしか書かないというミスがよくあるので、注意して下さい。
というわけで、

a == 3

と書くと、『aは3に等しいか?』という質問になります。
これはもちろんですが、aが3の時に『真(=正しい)』です(それ以外は正しくないですね。そういうときは『真』に対して『偽』と言います)。

そして正しいときに実行される部分には、

printf("number is 3!");

と書いてあります。というわけで、上のif文の部分は、
aが3の時は"a is 3!"と表示される
という意味になります。

では、ここから色々変更して理解を深めてみましょう。
まずは、条件のところ(a == 3のところ)を変えてみましょう。
次のように変更します。

a > 3

つまり全体では、次のようなコードになります。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a > 3){
		printf("number is bigger than 3!");
	}

	return 0;
}

入力を色々変えてやってみましょう。とりあえず、入力を7、3、1に変えて実行してください。
入力が7の時は"number is bigger than 3!"と表示されて、3、1のときは何も出力されないですね。

a > 3

というのは、
aが3より大きいか?
という質問になります。
ちなみに、aが3のときは、これは『偽』になります。
aが3のときも『真』と判定して欲しいとき、つまり『aが3以上』のときに『真』と判定して欲しいときは次のように書きます。

a >= 3

『=>』と書くミスがよくあります。注意しましょう。僕は、
日本語で『だいなりイコール』とか読むから、記号もこの順で書く
と覚えています。
同じように使える、他の書き方と、どういうときに『真』と判定されるのかを紹介します。

a < 3  //aが3より小さいとき
a <= 3  //aが3以下のとき
a != 3   //aが3でないとき

というわけで、ここで練習問題です。

☆練習問題1.入力が3でないときに"number is not 3!"と出力し、それ以外の時は何も出力しないプログラムを書いて下さい。また、ideone上で色々な入力で試し、実際に合っているか確かめて下さい。

『else』も使ってみる

覚えると便利な、『else』について説明します。
文法的な説明からすると、次のようになります。

if(条件){
条件が『真』だったときに実行すること
}else{
条件が『偽』だったときに実行すること
}

さて、これを参考に、この記事の一番最初で見たコードを変更した、下のコードを見て下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a == 3){
		printf("number is 3!");
	}else{
		printf("number is not 3!");
	}

	return 0;
}

これを入力を色々変えて試してみて下さい。3と3以外の数字は試しましょう。
入力が3のときは"a is 3!"、それ以外の時は"a is not 3!"と出ます。
上の文法通りの実行になっていますね。

また、ifのあとの{}内には、複数の実行文を書くことができます。たとえば、次のプログラムを見て下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a > 10){
		printf("number is big!\n");
		printf("Yeah!");
	}else{
		printf("number is small");
	}

	return 0;
}

これを実行すると、入力として10より大きい数字だと、

number is big!
Yeah!

と出ますね。このように、複数の実行文も可能です。

実行文にprint以外の文を入れてみよう

もちろん、これまでのように入力に応じてなにか決まった文を出力を出すだけでは面白くありません。
ためしに、次のようなコードを考えてみましょう。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a >= 10){
		a *= 2;
	}

	printf("%d",a);

	return 0;
}

これは、aが10以上の時、aを2倍にする文が実行されますね。
よって、入力が10以上のときには最後のprintfが実行される前にaが2倍となり、出力もその2倍した数値になります。
入力と出力の対応は、

3 →3
7 →7
12→24

になりますね。

もちろん、else文を使うと、もっと複雑なコードが書けます。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a >= 10){
		a *= 2;
	}else{
		a -= 3;
	}

	printf("%d",a);

	return 0;
}

これは、『入力が10以上のときは2倍したものを、10未満のときは3を引いたものを出力する』というコードです。
ideoneで入力を色々変えて試してみて下さい。

というわけで、最後の練習問題です。
☆練習問題2.入力が5以上のときはそれを2増やした数を、5未満のときは3増やした数を出力するプログラムを書き、ideoneで実行して確認して下さい。


今回はここまでです。
次は、もう少し複雑なif文の話をしようと思います。

以下に練習問題の解答を書きます。

練習問題の解答例

練習問題1.

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a != 3){
		printf("number is not 3!");
	}

	return 0;
}

練習問題2.

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	scanf("%d", &a);   //aに、入力された数字を代入する
	
//if文
	if(a >= 5){
		a += 2;
	}else{
		a += 3;
	}

	printf("%d",a);

	return 0;
}