プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf ·...

22
プログラミング初級 4201751条件文 1

Transcript of プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf ·...

Page 1: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

プログラミング初級

第4回 2017年5月1日

条件文

1

Page 2: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

第7章 条件文

2

Page 3: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

3

7.2 条件選択の必要性

「もし雨なら、傘をさせ」というのは条件選択処理の例

i f

選択 if

処理1

処理2

もし・・・・なら処理1を、そうでなければ処理2を行う

Page 4: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

if文の書式の基本形

4

もし ~ ならあれをやれ

そうでなければ ←必要に応じ

これをやれ ←必要に応じ

書式if (条件) {文1

}else {文2

}

制御式

制御式を満たすと文1を実行

そうでないときは文2を実行何もさせないときは省略可

Page 5: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

5

7.3 if文を使う条件処理の例・定価が10000円以上なら1000円引き

定価を入力

10000円以上なら定価を1000円引き

定価を出力

流れ

定価が10000円以上かを判断

条件が成り立たない場合は何もしない

選択

Page 6: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

6

if文の書き方

もし・・・なら ⇒ if (…)

ブロック { と } で処理される文の範囲を指定する=制御範囲が明確になる

1:#include <stdio.h>2:3:int main(void){4: int teika;5: printf("定価=");6: scanf("%d",&teika);7:

8: if (teika >= 10000)9: teika = teika - 1000;10: 11: printf("代金は=%d¥n",teika);12: return 0;13:14:}

もし10000円以上なら定価を1000円引き

if (teika >= 10000)teika = teika - 1000;

関係演算子

A >= B : AがBより大きいか等しい

if (teika >= 10000) {teika = teika - 1000;

} //ブロックを用いた書き方

Page 7: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

7

elseを使う条件処理の例・定価が10000円以上なら1000円引き・そうでないときは0円にする

定価を入力

10000円以上なら定価を1000円引き そうでないならタダ(0円)にする

定価を出力

流れ

定価が10000円以上かを判断

選択

Page 8: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

8

if-else文の書き方

もし・・・なら ⇒ ifそうでないなら ⇒ else

ブロック { と } で範囲を指定する

1:#include<stdio.h>2:3:int main(void){4: int teika;5: printf("定価=");6: scanf("%d",&teika);7:

8: if (teika >= 10000) {9: teika = teika - 1000;10: }11: else {12: teika = 0;13: }14:15: printf("代金は=%d¥n",teika);16: return 0;17:18:}

もし10000円以上なら定価を1000円引き

そうでないなら定価を500円引き

if (teika >= 10000) {teika = teika - 1000;

}

else {teika =0;

}

関係演算子

A >= B : AがBより大きいか等しい

Page 9: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

関係演算子を覚えよう9

演算子 説明 記述例

< 小さい if (a < b)

<= 小さいか等しい if (a <= b)

> 大きい if (a > b)

>= 大きいか等しい if (a >= b)

演算子 説明 記述例

== 等しい if (a == b)

!= 等しくない if (a != b)

Page 10: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

10

奇数・偶数を判別

#include<stdio.h>

int main(void){

int n;

printf("n==");scanf("%d", &n);

if (n % 2 == 0) {printf("偶数です¥n");

}else {

printf("奇数です¥n");}

return 0;

}

←もし nを2で割った余りが0ならば←「偶数です」と表示

←そうでなければ=余りが0でなければ←「奇数です」と表示

教科書P104 例題1

Page 11: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

11

else ifを使う

条件の変更①定価が10000円以上なら1000円引き②そうでなく、定価が1000円以上なら500円引きする③そうでないとタダにする

if (teika >= 10000) { teika = teika -1000;

}else if (teika >= 1000) {

teika = teika -500;}else {

teika =0;}

←10000円以上なら

←1000円引き

←500円引き

←そうではなく、1000円以上なら

←そうでないときは (1000円未満)

←タダにする

<ポイント>

■else ifを用いると条件処理を次々と重ねて記述できる

最初の条件を満たさないものが処理される:

10000円未満で1000円以上なら

Page 12: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

12

論理演算子(論理積)整数型の変数 a (int a;)条件A:aの値が10より大きいか等しい(a>=10)

条件B: aの値が20より小さいか等しい(a<=20)

条件AとBの両方を満たす数は?「a>=10」かつ「a<=20」⇔10以上20以下

もしaが「a>=10」かつ「a<=20」をみたすなら

⇒ if (a >= 10 && a <= 20)

論理積:

←論理積を表す演算子

Page 13: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

13

論理演算子(論理和)整数型の変数 a (int a;)条件A:aの値が 10以下である(a<=10)

条件B: aの値が 20以上である(a>=20)

条件AとBのどちらかを満たす数は?「a<=10」または「a>=20」⇔10以下か20以上

もしaが「a<=10」または「a>=20」を満たすならば

⇒ if (a <= 10 || a >= 20)

A B

←論理和

←論理和を表す演算子

Page 14: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

14

西暦から「うるう年」かどうかを判定するうるう年とは、・4で割り切れ、かつ、100で割り切れない年・400で割り切れる年のどちらかにあてはまる年です。

if (n % 4 == 0 && n % 100 != 0) {printf("うるう年です¥n");

}else if (n % 400 == 0) {

printf("うるう年です¥n");}else {

printf("うるう年ではありません¥n");}

if ( (n % 4 == 0 && n % 100 == 0) || n % 400 == 0) {printf("うるう年です¥n");

}else {

printf("うるう年ではありません¥n");}

論理演算子を用いて

教科書P98

Page 15: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

15

「でない」の表現

論理演算子には「でない」という否定表現の機能もあります。これは「否定」と呼びます。

例えばaの値が100以上、でないならという条件は、

if ( !(a >= 100) )

となります。

A !A

内側のかっこ( )は「aの値が100以上」

という条件全体を否定するために必要!

Page 16: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

16

「でない」の表現(2)

例えば「bの値が10または100以上」でないならという条件は、

if ( !(b == 10 || b >= 100) )

となります。

!(A || B)

内側のかっこ( )は「bの値が10または100以上」

という条件全体を否定するために必要!

A B

Page 17: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

17

論理演算子のまとめ

「a>10」 かつ 「a<100」なら ⇒ if (a > 10 && a < 100)

「a==100」 または 「a==200」なら ⇒ if (a == 100 || a == 200)

「a >= 10000」でないなら ⇒ if (!(a >= 10000))

演算子 説明 記述例 記述の意味

&& 論理積(かつ,and) if(a==3 && b==4) aが3かつbが4なら

|| 論理和(または,or) if(a==3 || b ==4) aが3またはbが4なら

! 否定(でない,not) if(!(a==3 && b==4)) aが3かつbが4,でないなら

Page 18: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

18

優先処理の指定論理演算子でも( )をつけて優先順位を指定する#include <stdio.h>

int main(void){

int c;

printf("文字");c = getchar();

if (('0'<=c && c<='9') || ('A'<=c && c<='F') || ('a'<=c && c<='f')) {

printf("16進数文字です¥n");}else {

printf("16進数文字ではありません¥n");}

return 0;}

もし① cが'0'以上かつ'9'以下

または② cが'A'以上かつ'F'以下

または③ cが'a'以上かつ'f'以下

ならば‥

( )が優先されるのは数式の場合とおなじですね!

教科書P105 例題2

Page 19: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

switch文を使う

19

■switch文は整数の値によって処理を分けるときに用いる。

■一致する値を記述したcaseラベルにジャンプし、そこに記述された文を実行する。

■break文に出会うと、その処理を終了する。

■どのcaseとも一致しない文を実行させたいときは、defaultラベルを使う。

教科書P101

Page 20: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

20

「nは3です」と出力 「other」と出力

switch文で分岐変数(整数型) n

n

n==3なら それ以外なら

switch (n) {case 1:printf("nは1です¥n");break;case 3:printf("nは3です¥n");break;default: printf("other¥n");

}

「nは1です」と出力

n==1なら

プログラムでは右のように書くcase **: には必ず整数式「:」(コロン)も忘れずに

注意:case ”abcd”は文字列だから×case 5.6は小数点数だから×

← n = 1のとき実行される文← case文の終了

←どのcaseとも一致しない場合=それ以外のとき実行される文

Page 21: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

なにもしない

switch文で分岐(複数ラベルを用いる)変数(整数型)

n

それ以外なら

switch (n) {case 1: case 5: case 8:dt = 0;break;

}

「dt=0」を代入

n=1か5か8なら

プログラムでは右のように書く

どのcaseとも一致しない場合に何もしないのであればdefaultは省略可能

Page 22: プログラミング初級 - 東北学院大学mmt1.cs.tohoku-gakuin.ac.jp/cprog/slide04.pdf · 2017-05-01 · 5 7.3 if文を使う 条件処理の例 ・定価が10000円以上なら1000円引き

22

#include<stdio.h>int main(void){

int c

printf("実行するならYを、実行中止ならNを入力して下さい: ");c = getchar();

switch (c) {case 'Y': case 'y':

puts(“実行します");break;

case 'N': case 'n':puts(“中止します");

break;

default:puts("不正な入力です");

}

return 0;}

switch文を使う

← C = ‘Y’または‘y’のとき実行される文← case文の終了

以上に当てはまらないとき実行される文

cで分岐⇒

← C = ‘N’または‘n’のとき実行される文← case文の終了

教科書P105 例題3