第 3 章 「プログラムの流れの分岐」のまとめ
3.1

用語のまとめ教 p.42if 文
if ( 式 1 ) 文 1という形のこと、式 1 を評価して、その値が(すなわち真) であれば、。

式の値が (すなわち偽) であるときは、何もしない
教 p.48if〜else 文
if ( 式 1 ) 文 1 else 文 2という形のこと、式 1 を評価して、その値が(すなわち真) であれば、式の値が (すなわち偽) であるときは、

if 文。

。

if〜else 文

Q 3.1.1 次のプログラムの断片の出力は ?（ 出力なしのときは「無」）1 if (0) printf("X");

答:2 if (0) printf("Y"); else printf("Z");答:III - 1

教 p.48等価演算子 ==は両辺の値が等しければ （つまり真）を、等しくなければ （つまり偽）を返す演算子である。==と逆に等しくないかど うかを判定する演算子はである。

教 p.50
関係演算子

教 p.51

以下の 4 つがある。

<

左辺が右辺よりもとき真>

左辺が右辺よりもとき真<=左辺が右辺よりもか等しいとき真>=左辺が右辺よりもか等しいとき真入れ子になった if 文

if (no == 0)puts("その数は 0で す 。");
else if (no > 0)puts("その数は正です。");
elseputs("その数は負です。");
これは、単に else の次の文が 、また if 文になっているだけのことである。
（ 発展）ぶら下がりの else (dangling else)if (h < 12) if (h < 6) printf("A"); else printf("B");は、どのように文法的に解釈されるか ?
解釈 1:

if (h < 12) { if (h < 6) printf("A"); else printf("B"); }解釈 2:

if (h < 12) { if (h < 6) printf("A"); } else printf("B");

Q 3.1.2 上の解釈 1, 解釈 2 は h の値が以下のとき、どのように出力するか ?
解釈 1 解釈 2
h = 3
h = 9
h = 15
ぶら下がりの else は、解釈と同等である。つまり、近い方の if と対応する。

III - 2

条件演算子 (三項演算子)

教 p.56

式1 ? 式2 : 式3
まず 式 1 を評価し 、その値が 、非 0 (真) であれば 、を評価して、その値を返す。

0 ( 偽)

であれば 、を評価して、その値を返す。
教 p.58

複合文 (ブロック ) 文の並びを波括弧 (ブレース — 「 」と「 」 —) で囲んだものを複合文またはブロックという。(文のまえにいくつかの宣言があってもよい。)
複合文は構文上単一の文と見なされる。複合文中の文は上 (左) から順に一つずつ実行される。
通常、if 文の制御する文 (後述の while 文、for 文などでも同様) は、たとえ一つの文でも (間違いを避けるため) 波括弧で囲んでブロックにする。
△ 望ましくないスタイル◎ 望ましいスタイル

if (n1 > n2)
max = n1;else
max = n2;

if (n1 > n2) {max = n1;} else {max = n2;}

教科書の例題は望ましいスタイルでないものが多いので、特に注意する。
教 p.60
論理演算子 は以下のような演算子である。左右非対称である — つまり左オペ
ランド を評価して値が決まれば 、は評価しない — ことに注意する（ 短絡評価）
。
演算子

呼び方

説明

&&

論理 AND 演算子

左オペランド を評価して、0 (偽) であれば 、0 (偽) を返す。
非 0 (真) であれば 、右オペランド を評価してその値を返す。

||

論理 OR 演算子

左オペランド を評価して、非 0 (真) であればその値を返す。
0 (偽) であれば 、右オペランド を評価してその値を返す。

switch 文 ある式の値 (整数型) によって、プログラムの流れを複数に分岐するときに使う。
switch ( 式 ) 文
switch 文は式を評価して、と :の間に書かれた定数と一致するところにジャンプする。(どの case にも一致しないときは、にジャンプする。) た
だし 、break 文に出会うと、一気に switch 文を飛び出る。逆に break 文がなければ 、そのまま次の文を実行する。
(名case〜:や default :のようにプログラムの飛び先を示す目印を札) と呼ぶ。

III - 3

教 p.64

3.2 プログラム例
繰り上がりの計算

123456789101112131415161718192021222324#include <stdio.h>
int main(void) {int hour1, minute1, hour2, minute2, hour3, minute3;
printf("hour1を入力し て下さい :");
scanf("%d", &hour1);
printf("minute1を入力し て下さい :");
scanf("%d", &minute1);
printf("hour2を入力し て下さい :");
scanf("%d", &hour2);
printf("minute2を入力し て下さい :");
scanf("%d", &minute2);
hour3= hour1 + hour2;
minute3 = minute1 + minute2;
if (minute3 >= 60) {hour3= hour3 + 1 ;minute3 = minute3 - 60;}
printf("その和は、%d 時間 %d 分です。 \n", hour3, minute3);
return 0;}2 つの数を大きい順に並べる
12345678910111213141516#include <stdio.h>
int main(void) {int n1, n2, tmp;
printf("整数1を 入力し て 下さい :");
printf("整数2を 入力し て 下さい :");

scanf("%d", &n1);
scanf("%d", &n2);

if (n2 > n1) {/* n1と n2を入れ 換える */tmp = n1;
n1 = n2;n2 = tmp;}
printf("大きい方は %d で す 。小さい方は %dです。 \n", n1, n2);
return 0;}

III - 4

3.3

文法のまとめ文 (statement)に以下を追加、

分類

一般形

補足説明

if 文
if〜else 文
複合文 (ブロック)switch 文
ラベル付き文if ( 式 ) 文
if ( 式 ) 文 else 文{ 宣言 . . . 文 . . . }switch ( 式 ) 文
case 整数リテラル : 文
default : 文
break ;

(教 p.42)(教 p.44)(教 p.58)(教 p.64)

break 文式 (expression)に以下を追加、

分類

一般形

補足説明

三項演算子

式?式:式

(教 p.56)

III - 5

(教 p.65)(教 p.65)