応用理工学情報処理 第3回(2015年10月19日) Manaba https://manaba.tsukuba.ac.jp の応用理工学情報処理のページ 授業のHP http://www.ims.tsukuba.ac.jp/~maeshima/joho 1 第3章 プログラムの流れの分岐 2 分岐 とは 今までのプログラム例 変数 a を宣言 aに値 を代入 流れが一直線 分岐を含むプログラム 変数 a を宣言 aに値 を代入 作業Bを行う どんな場合でも同じ作業 aが条件を満たす場合 作業Bを行う aを評価 作業Cを行う 条件を満たさない場合 流れが二つに分かれる(分岐) 場合によって、作業内容を変える 3 if (p.42) #include <stdio.h> int main(void) { int no; printf("整数を入力してください : "); scanf("%d", &no); noを5で割った場合の余りが0でない場合に 実行される if (no % 5) puts("その数は5で割り切れません。"); return 0; } 4 if if (式) 文1; 指定した条件に合えば 文1を実行する。 式(制御式)を評価して その値が非0 指定した条件に合う (式を評価する = 式を計算する ) 1,2,3,4 (5で割り切れない場合) puts(“割り切れません。”) no % 5 0 (5で割り切れる場合) なにもしない 5 if-else (p.45) #include <stdio.h> int main(void) { int no; printf("整数を入力してください : "); scanf("%d", &no); noを2で割った場合の余りが0でない場合に 実行される if (no % 2) puts("その数は奇数です。"); else puts("その数は偶数です。"); return 0; noを2で割った場合の余りが0の場合に 実行される } 6 if-else if (式) 文1 else 文2 指定した条件(式で表現)に合 えば文1を、合わなければ文 2を実行する。 条件に合うかどうかは、式の値が非0か0か で判定 1 (2で割り切れない) 文1 puts(“noは奇数”) no % 2 0 (2で割り切れる) 文2 puts(“noは偶数”) 7 式 (p.27) 1. 変数、定数を演算子で結合したもの 2. 変数、定数それ自体 式の値 = 式の計算結果、 もしくは値それ自身 式の例 1. no%2 2. num 3. 56(定数) 使うことは ほとんどない 式の値 =no%2の 計算結果 式の値 =numの値 式の値 =定数の値 (この場合 56) 8 if文(式の評価) (p.46) if (num) 文1 else 文2 #include <stdio.h> int main(void) { int num; numの値を評価する printf("整数を入力してください : "); scanf("%d",&num); if (num) puts("その値は0ではありません。"); else puts("その値は0です。"); num ≠0 文1 num = 0 文2 return 0; } ただ 条件判定 = 式の値の評価 とする考え方は少し分かりにくい。 9 等価演算子 == 二つの値が等しいかどうかを判定 例: x1 == x2 • x1とx2が等しければ 式 x1 == x2 • x1とx2が等しくなければ 式 if (x1==x2) 文1 else 文2 の値は1 の値は0 式 x1 == x2 の値を評価する 1 (等しい) 文1 0 (等しくない) 文2 10 等価演算子の利点 式の値が 0 か 非0 か、など考える必要はない。 命題が”真”か”偽”か if (x1==x2) 文1 else 文2 “x1とx2は等しい”という命題は真か偽か? (もしくは”x1とx2は等しいですか?”という問い) 真 (等しい) 又は 偽 (等しくない) 又は 問いに対する答えがYES 問いに対する答えがNO 文1 != • x1とx2が等しくなければ 命題 • x1とx2が等しければ 命題 文2 x1 != x2 は真 は偽 11 等価演算子 (p.48) #include <stdio.h> int main(void) { int n1, n2; puts("二つの整数を入力してください。"); printf("整数1 : "); scanf("%d", &n1); printf("整数2 : "); scanf("%d", &n2); if (n1 == n2) puts("それらの値は同じです。"); n1とn2の値が等しい場合 else puts("それらの値は違います。"); 等しくない場合 return 0; } 12 等価演算子を用いて 偶奇判定(p.45)のプログラムを書き直す(p.49 List 3-8改変) #include <stdio.h> int main(void) { int no; printf("整数を入力してください : "); scanf("%d", &no); noを2で割った場合の余りが0の場合に 実行される if ( (no % 2) ==0 ) puts("その数は偶数です。"); else puts("その数は奇数です。"); return 0; noを2で割った場合の余りが0でない場合に 実行される } こちらのほうが読みやすい (という人がいるかも知れない) 重要: 自分が読みやすいプログラムを書きましょう 13 関係演算子 大小関係を判定する •a<b •a>b • a <=b • a >=b aがbよりも小さければ1, そうでなければ0 aがbよりも大きければ1, そうでなければ0 aがb以下ならば1, そうでなければ0 aがb以上ならば1, そうでなければ0 関係演算子についても、式の値ではなく、命題が”真”か” 偽”か、と考えるほうが分かりやすい。 “a>b”は真か偽か? if (a>b) 文1 else 文2 真(a>b) 文1 偽(a=bまたはa<b) 文2 14 関係演算子 (p.50) #include <stdio.h> int main(void) { int no; printf("整数を入力してください : "); scanf("%d", &no); if (no == 0) puts("その値は0です。"); else if( no >0 ) puts("その値は正です。"); else puts("その値は負です。"); return 0; } 15 演習問題 二つの整数値を読み込んで、後者が前者の約数であるか、そうでないかを 表示するプログラムを作成せよ (教科書p.45 演習3-1)。 つまり 2つの整数を読み込み(読み込んだ順に n1, n2とする) n1÷n2 が割り切れるかどうかを判定してください。 • 演習問題の提出・出席確認について • 授業中にプログラムが完成した方は申し出てください。プログラ ムの確認・出席の確認を同時に行います。完成が確認できた方 は退出しても構いません。 • 授業終了10分前(16:20)の時点でプログラムが未完成の方も、 申し出てください。出席の確認のみを行います。 • 授業終了までにプログラムを完成できなかった方は第4回目の 授業の際に確認を行いますので、それまでに完成させておいて ください。 16
© Copyright 2024 ExpyDoc