CプログラミングⅠ
条件分岐
条件分岐とは
ある条件が成立したときとしないときで処理の内容を変更
する
場合に応じた,複雑な処理を行うことができる
C言語では,if文,if~else文,if~else if~else文,switch文
で条件分岐の処理を実現できる
ご褒美に何か買ってもらう
お小遣いが減らされる
成績が良かったか?
yes
no
条件分岐
関係演算子と条件
『条件』って何?
さまざまな状況を表すための概念
『場合に応じた処理』に用いる
条件の表し方
プログラムでは条件も「式」で表す
条件式の値
条件が満たされる(成り立つ)場合 ⇒ 真(true)
満たされない(成り立たない)場合 ⇒ 偽(false)
条件の例
成績がよかったら 旅行に行く 成績がいまひとつ 勉強する条件を用いると
状況に応じて
処理を変えること
ができる.
条件:よい成績である
※80点以上なら「よい」成績とすると
90点の場合
60点の場合
80点以上なので条件は「真」
80点未満なので条件は「偽」
この場合,プログラムでは条件『80点以上である』を式として表す
3 > 1
関係演算子と条件
C言語で記述できる「条件」
二つの数の大,小,等価など
比較する数を『関係演算子』で結んで表記する
例: 3 > 1, 3 < 1 など
条件式は評価され,
条件が満たされて(成り立って)いれば
「真」
満たされて(成り立って)いなければ
「偽」
関係演算子
評価
真
値
条件:
1 > 3
関係演算子
評価
偽
値
条件:
条件式の演算も
通常の式の演算
と同じ
の値をとる
関係演算子と条件
関係演算子
右表参照
関係演算子利用の注意点
条件式に変数を含む場合は,変数の値によって式の評価値が異なる
= (代入演算子)と == (関係演算子) を混同しない
条件式の値
条件が偽のとき条件式の値は 0 となる
条件が真のとき条件式の値は 0 以外の数値(通常は 1 )となる
C言語では 数値の 0 を「偽」、0 以外を「真」として扱う
関係演算子
使用例
意味
==
a == b
b が a に等しい
!=
a != b
b が a に等しくない
>
a > b
b より a が大きい
>=
a >= b
b より a が大きいか等しい
<
a < b
b より a が小さい
<=
a <= b
b より a が小さいか等しい
代入演算子(=)
と混同しない
ように注意
関係演算子と条件
いろいろな条件式
== 6
変数の値によって
評価する
式との比較の場合,
式の評価結果との
比較となる
変数同士で
それぞれに格納されている
値によって評価する
12
>
10
真
a
6
真
==
a
1
偽
b
6
変数に格納されている値との比較
式の評価結果を比較
a
6
+ 6 > 10
条件分岐 : if文
if文
条件式が真の場合に処理を行う
条件式 文1 真 偽① 条件式の判定
② 条件式の判定結果が真(true)の場合,
{ }ブロック内の文を実行
③ 条件式の判定結果が偽(false)の場合,
{ }ブロック内の文は実行しない
条件式が真の
場合のみ
{ }ブロック内の
文を実行する
if文の書式
if( 条件式 ){
文1;
文2;
:
}
文2 :条件分岐 : if文
if文のプログラム例
① キーボードから整数値を入力し, a に格納 ② a に格納されている値が1かどうかを 判定(1と等しいか判定) ②-1 a が1である(1と等しい)とき printf文を実行 ②-2 a がでない(1と等しくない)とき 何もしない ③ printf("処理を終了します.¥n"); を実行 入力値によって処理を変える 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 1){ printf("入力された値は1です.¥n"); } printf("処理を終了します.¥n"); return 0; } 実行結果 a = 1[Enter] 入力された値は1です. 処理を終了します. 実行結果 a = 0[Enter] 処理を終了します.入力によって
結果が異なること
条件分岐 : if文
フローチャート
プログラムの処理の流れを図式化したもの
入力値によって処理を変える 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 1) { printf("入力された値は1です.¥n"); } printf("処理を終了します.¥n"); return 0; } a == 1start
end
真 偽 if 処理を 終了します. 入力された 値は1です. a = 変数aに 値を入力プログラムのフローチャート
int a;条件分岐 : if文
if文のプログラム例
入力値によって処理を変える 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 1) printf("入力された値は1です.¥n"); printf("処理を終了します.¥n"); return 0; }条件が真の場合に行う文が
1つのみの場合には
{ } は書かなくてもよい
ただし,見やすいプログラムを書くために
必ず字下げする
論理演算子(基本編)
論理演算子
条件を組み合わせて複雑な条件をつくることができる
条件を組み合わせた例
5 > 3 && 3 == 4
a == 6 | | a >= 12
! (a == 6)
論理演算子 名前 使用例 意味&& 論理積(AND) (条件1) && (条件2) 条件1と条件2がともにtrueのとき true | | 論理和(OR) (条件1) | | (条件2) 条件1または条件2がtrueのとき true ! 否定(NOT) !(条件) 条件がfalseのとき true
右辺が偽なので,
条件式全体も偽となる
a に格納されている値が 6
または
a に格納されている値が 12 以上
のとき真
a に格納されているが 6 以外のとき 真
論理演算子を用いた複雑な条件による条件分岐
複雑な条件による分岐
① キーボードから整数値を入力し, a に格納 ② a に格納されている値が 5 以上かつ 10 以下かどうか判定 ( 5 から 10 の間の値か判定) ②-1 5 以上かつ 10 以下であるとき printf文を実行 ②-2 5 以上かつ 10 以下でないとき 何もしない ③ printf("処理を終了します.¥n"); を実行 複雑な条件による分岐 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: #include <stdio.h> int main(void) { int a;printf("a = "); scanf("%d", &a); if(a >= 5 && a <= 10) { printf("入力値は5~10の値です.¥n"); } printf("処理を終了します.¥n"); return 0; } 実行結果 a = 7[Enter] 入力値は5~10の値です. 処理を終了します. 実行結果 a = 0[Enter] 処理を終了します.
論理演算子を用いた複雑な条件による条件分岐
フローチャート
複雑な条件による分岐 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: #include <stdio.h> int main(void) { int a;printf("a = "); scanf("%d", &a); if(a >= 5 && a <= 10) { printf("入力値は5~10の値です.¥n"); } printf("処理を終了します.¥n"); return 0; } a >= 5 && a <= 10
start
end
真 偽 if 処理を 終了します. 入力値は 5~10の 値です. a = 変数aに 値を入力プログラムのフローチャート
int a;条件分岐 : if~else文
if~else文
条件式が真,偽のそれぞれの場合に指定した処理を行う
14 条件式 真 文1-1 偽① 条件式の判定
② 条件式の判定結果が真の場合,
文1を実行
③ 条件式の判定結果が偽の場合,
文2を実行
条件式が
真の場合と偽の場合で
実行する文が異なる
文2-1if~else文の書式
if( 条件式 ){
文1-1;
文1-2;
:
} else {
文2-1;
文2-2;
:
}
文1-2 : 文2-2 :条件分岐 : if~else文
if~else文のプログラム例
① キーボードから整数値を入力し, a に格納 ② a に格納されている値が 1かどうかを判定 ②-1 a が 1 であるとき ”入力された値は1です." を表示 ②-2 a が 1 でないとき ”1以外が入力されました." を表示 ③ "処理を終了します."を表示 入力値によって処理を変える(if~else文) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: #include <stdio.h> int main(void) { int a;printf("a = "); scanf("%d", &a); if(a == 1){ printf("入力された値は1です.¥n"); } else { printf("1以外が入力されました.¥n"); } printf("処理を終了します.¥n"); return 0; } 実行結果 a = 1[Enter] 入力された値は1です. 実行結果 a = 0[Enter] 1以外が入力されました. 処理を終了します.
条件分岐 : if~else文
フローチャート
入力値によって処理を変える(if~else文) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: #include <stdio.h> int main(void) { int a;printf("a = "); scanf("%d", &a); if(a == 1){ printf("入力された値は1です.¥n"); } else { printf("1以外が入力されました.¥n"); } printf("処理を終了します.¥n"); return 0; } a == 1