プログラミング入門2 - sicyaoki/program2/pdf/p03.pdfプログラミング入門2 第3回...

35
プログラミング入門2 プログラミング入門2 第3回 第3回 条件分岐 条件分岐 処理の流れを分ける(場合分け)プログラムの作成 処理の流れを分ける(場合分け)プログラムの作成 芝浦工業大学情報工学科 芝浦工業大学情報工学科 講師 講師 青木 青木 義満 義満

Upload: others

Post on 12-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

プログラミング入門2プログラミング入門2

第3回第3回条件分岐条件分岐

処理の流れを分ける(場合分け)プログラムの作成処理の流れを分ける(場合分け)プログラムの作成

芝浦工業大学情報工学科芝浦工業大学情報工学科 講師講師

青木青木 義満義満

Page 2: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 2

今回の講義内容今回の講義内容

これまでのプログラム

→ いつも決まった動作

実際には、様々な条件によって、処理の流れを変える

(条件分岐)必要がある → 場合分け

if 文, switch文 による条件分岐の実現

Page 3: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 3

ifif文による条件分岐文による条件分岐

条件にもとづいて、プログラムの流れを変える

例えば、

キーボードから入力した整数値が…

・ もし、5で割り切れなかったら、“5の倍数でありません。”と表示する。

・ そうでなかったら(5で割り切れたら)、“5の倍数です。”と表示する。

Page 4: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 4

例題(例題(List3List3--11)) ~~ 最初の最初のifif文プログラム文プログラム

ソースファイル名: list0301.c (p.36)概要: 読み込んだ整数値が5で割り切れないかどうか判定

目的: if 文の動作を確認

/* 読み込んだ整数値は5で割り切れないか */

#include <stdio.h>

int main(void){

int vx;

printf("整数を入力してください:");scanf("%d", &vx);

if (vx % 5)puts("その数は5で割り切れません。");

return (0);}

/* 読み込んだ整数値は5で割り切れないか */

#include <stdio.h>

int main(void){

int vx;

printf("整数を入力してください:");scanf("%d", &vx);

if (vx % 5)puts("その数は5で割り切れません。");

return (0);}

if文

%: 余り

Page 5: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 5

例題解説例題解説(1)(1) ~~ ifif文の動作文の動作

if (vx % 5)

puts("その数は5で割り切れません。");

vxが5の倍数 → vx%5 = 0vxが5の倍数でない → vx%5 ≠0(非ゼロ)構文

if ( 式 ) 文

•(式)を評価•式の結果が非0だったら、文を実行•式の結果が0だったら、文を実行せず

Page 6: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 6

例題(例題(List3List3--33,,p.38p.38)) ~~ ifif文プログラム(2)文プログラム(2)

ソースファイル名: list0303.c (p.38)概要: 割り切れなくても,割り切れても,その結果を表示

目的: if ~else~文の動作を確認

#include <stdio.h>

int main(void){

int vx;

printf("整数を入力してください:");scanf("%d", &vx);

if (vx % 5)puts("その数は5で割り切れません。");

elseputs(“その数は5で割り切れます。");

return (0);}

#include <stdio.h>

int main(void){

int vx;

printf("整数を入力してください:");scanf("%d", &vx);

if (vx % 5)puts("その数は5で割り切れません。");

elseputs(“その数は5で割り切れます。");

return (0);}

If~else~文

Page 7: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 7

例題解説例題解説(2)(2):: ifif~~elseelse~文の動作~文の動作

If(もしも~なら・・・),else(それ以外の時は・・・)という意味

文1

式if (vx % 5)

puts("その数は5で割り切れません。");else

puts(“その数は5で割り切れます。"); 文2

if ( 式 )文文11

構文

式を評価,その値が,

もし(if),非0だったら・・・→ 文文11 を実行を実行

そうでなければ(else),(0以外であれば)

→ 文文22 を実行

else文文22

を実行

Page 8: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 8

「式の評価」とは??「式の評価」とは??

C言語における「式」

x (int型変数)38 (int型定数)

x + 38 (演算)

全てその値を評価できる「式」

X + 38

15 38

X % 5

7 553式全体の評価値

2式全体の評価値

Page 9: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 9

値を比較するには?値を比較するには? ~~ 等価演算子,関係演算子等価演算子,関係演算子

条件分岐における条件判定

人間の日常生活の中での様々な判断は,1つの条件,またはいくつかの条件を総合して判断している。

例えば…只今の所持金は財布の中の2000円のみ欲しい品物が2000円より高い → 買えない2000円以下 → 買える!

大学の成績評価A(80~100),B(70~79),C(60~69),D(~59)

駅から歩くか,学バスが来るまで待つか,タクシーに乗るか判断要素: 天候,次のバスが来るまでの時間,所持金,疲労度,授業までの残り時間など

ある値の大小によって,処理を分岐する必要になる!

Page 10: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 10

値比較のプログラム値比較のプログラム(1)(1)ファイル名:list0306.c (p.42)

/* 読み込んだ二つの整数値は等しいか */

#include <stdio.h>

int main(void){

int x1, x2;

puts("二つの整数を入力してください。");printf("整数1:");scanf("%d", &x1);printf("整数2:");scanf("%d", &x2);

if (x1 == x2)puts("それらの値は同じです。");

else

puts("それらの値は違います。");

return (0);}

/* 読み込んだ二つの整数値は等しいか */

#include <stdio.h>

int main(void){

int x1, x2;

puts("二つの整数を入力してください。");printf("整数1:");scanf("%d", &x1);printf("整数2:");scanf("%d", &x2);

if (x1 == x2)puts("それらの値は同じです。");

else

puts("それらの値は違います。");

return (0);}

Page 11: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 11

値比較のプログラム値比較のプログラム(2)(2)ファイル名:list0307.c, p.43 (list0306を赤文字の部分のみ変更)

/* 読み込んだ二つの整数値は等しいか */

#include <stdio.h>

int main(void){

int x1, x2;

puts("二つの整数を入力してください。");printf("整数1:");scanf("%d", &x1);printf("整数2:");scanf("%d", &x2);

if (x1 != x2)puts("それらの値は違います。");

else

puts(“それらの値は同じです。");

return (0);}

/* 読み込んだ二つの整数値は等しいか */

#include <stdio.h>

int main(void){

int x1, x2;

puts("二つの整数を入力してください。");printf("整数1:");scanf("%d", &x1);printf("整数2:");scanf("%d", &x2);

if (x1 != x2)puts("それらの値は違います。");

else

puts(“それらの値は同じです。");

return (0);}

Page 12: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 12

等価演算子等価演算子

2つの式の値が等しいか,等しくないかを判定

aとbの値が等くなければ1,そうでなければ0a != b!=演算子

aとbの値が等しければ1,そうでなければ0a == b==演算子

等価演算子

値が1(等しい)

if (x1 == x2)

puts("それらの値は同じです。");else

puts("それらの値は違います。");

値が0(等しくない)

※ != はこの逆

Page 13: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 13

3つ以上の条件分岐をするには?3つ以上の条件分岐をするには?

これまでは流れを2つに分岐 → 3つ以上の場合は?

例)

所持金2,000円(1) 商品が2,000円より高かったら,惜しくも買えない.

(2) 商品が2,000円ピッタリだったら,ビンゴ.

(3) 商品が2,000円より安ければ,余裕で買える.

値が等しいかどうかを判定:等価演算子(==,!=)

値の大小を比較する演算子が必要!!

値の比較により,処理の流れを3つに分岐したい

Page 14: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 14

値比較のプログラム値比較のプログラム(3)(3)ファイル名:list0309.c (p.44)

/* 読み込んだ整数値の符号を判定 */

#include <stdio.h>

int main(void){

int no;

printf("整数を入力してください:");scanf("%d", &no);

if (no == 0)puts("その数は0です。");

else if (no > 0)puts("その数は正です。");

elseputs("その数は負です。");

return (0);}

/* 読み込んだ整数値の符号を判定 */

#include <stdio.h>

int main(void){

int no;

printf("整数を入力してください:");scanf("%d", &no);

if (no == 0)puts("その数は0です。");

else if (no > 0)puts("その数は正です。");

elseputs("その数は負です。");

return (0);}

Page 15: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 15

3つ以上の分岐:3つ以上の分岐: if if ~,~, else if else if ~~, else , else ~~

if(条件式1)文1

else if(条件式2)文2

else文3

① If(もし) 条件1であれば,文1実行

①でなく,条件2であれば,文2実行

①, ②のどの条件にもあてはまらない場合

if (no == 0)puts("その数は0です。");

else if (no > 0)puts("その数は正です。");

elseputs("その数は負です。");

if (no == 0)puts("その数は0です。");

else if (no > 0)puts("その数は正です。");

elseputs("その数は負です。");

③ ①,②以外,つまり,0でも正でもない場合

※else if は何個でも書ける.

Page 16: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 16

大小関係を比較する大小関係を比較する ~~ 関係演算子関係演算子

aがb以上であれば1,そうでなければ0a >= b>=演算子

aがb以下であれば1,そうでなければ0a <= b<=演算子

aがbより大きければ1,そうでなければ0a > b>演算子

aがbより小さければ1,そうでなければ0a < b< 演算子

if ( a >= b )○ → 値は1× → 値は0

Page 17: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 17

22つの整数の大きい方の値を求めるつの整数の大きい方の値を求める(1) (1) ファイル名:list0310.c (p.46)

/* 2つの整数の大きい方の値を求める */

#include <stdio.h>

int main(void){

int n1, n2;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2)printf("大きい方の値は%dです。¥n", n1);

elseprintf("大きい方の値は%dです。¥n", n2);

return (0);}

/* 2つの整数の大きい方の値を求める */

#include <stdio.h>

int main(void){

int n1, n2;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2)printf("大きい方の値は%dです。¥n", n1);

elseprintf("大きい方の値は%dです。¥n", n2);

return (0);}

Page 18: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 18

22つの整数の大きい方の値を求めるつの整数の大きい方の値を求める(2) (2) ファイル名:list0311.c (p.46)求めた値を,後の処理のために変数に格納

/* 2つの整数の大きい方の値を求める */

#include <stdio.h>

int main(void){

int n1, n2, max;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2) max = n1;

else max = n2;

printf("大きい方の値は%dです。¥n", max);

return (0);}

/* 2つの整数の大きい方の値を求める */

#include <stdio.h>

int main(void){

int n1, n2, max;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2) max = n1;

else max = n2;

printf("大きい方の値は%dです。¥n", max);

return (0);}

Page 19: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 19

大きい方の値大きい方の値, , 小さい方の値両方を求める小さい方の値両方を求める(3)(3)ファイル名:list0315.c (p.50)

/* 2つの整数の大きい方,小さい方の値両方を求める */#include <stdio.h>int main(void){

int n1, n2, max, min;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2) {max = n1;min = n2;

} else {

max = n2;min = n1;

}

printf("大きい方の値は%dです。¥n", max);printf("小さい方の値は%dです。¥n", min);return (0);

}

/* 2つの整数の大きい方,小さい方の値両方を求める */#include <stdio.h>int main(void){

int n1, n2, max, min;

puts("二つの整数を入力してください。");printf("整数1:"); scanf("%d", &n1);printf("整数2:"); scanf("%d", &n2);

if (n1 > n2) {max = n1;min = n2;

} else {

max = n2;min = n1;

}

printf("大きい方の値は%dです。¥n", max);printf("小さい方の値は%dです。¥n", min);return (0);

}

今までに無かった中括弧

} 文が2つ(複数)

今までに無かった中括弧

} 文が2つ(複数)

Page 20: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 20

複合文(ブロック)複合文(ブロック) ((p.50p.50))

単一の文が要求されるところで,複数の文を実行しなければ

ならない時には,{}の中にまとめて,複合文(ブロック)として実現.

重要

例1)if (n1 > n2) {

max = n1;min = n2;

}複合文(ブロック)

※文が一つの場合,{}は書いても書かなくてもOK.

実はこんなところにも…

複合文(ブロック)

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

printf(“こんにちは。”);return (0);

}

Page 21: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 21

複数の条件から判断複数の条件から判断 ~~ 論理演算子論理演算子

一つの条件だけでなく,複数の条件が成立,またはどちらからかが成立した時,というように複数の条件から処理を判断.

例)

とある飲み会へ参加しようかどうか迷っている

(1)友人AとBが両方とも(AかつB)参加表明 → 私も参加

(2)友人AとBの少なくともどちらかが(AまたはB)参加表明 → 参加微妙

(3)友人AとB,両方とも不参加 → 私も不参加

論理演算子 の導入

Page 22: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 22

論理演算子論理演算子 ~~ AAかつかつBB,,AAまたはまたはBB の実現の実現

読み込んだ月から季節を判定するプログラム

仕様

整数値(月:変数名 month )を入力

その数字が,

3,4,5 → 春

6,7、8 → 夏

9,10,11 → 秋

12,1,2 → 冬

と判定したい

条件を?以上?以下で表現できる

条件を12または1または2

と表現できる

Page 23: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 23

論理演算子論理演算子

条件の「かつ」,「または」を表現

aとbの一方でも非0であれば1,そうでなければ0a || b|| (or)演算子

aとbがどちらも非0であれば1,そうでなければ0a && b&&(and) 演算子

例) もし,3月以上(かつ)5月以下だったら…

month >= 3 month <= 5&&「かつ」

① ②

○(1:正) ×(0:誤) →×(0:誤)

×(0:正) ○(1:正) →×(0:誤)

×(0:誤) ×(0:誤) →×(0:誤)

○(1:正) ○(1:正) → ○(1:正)

3 <= month <= 5

①,②の両方成り立てば○

Page 24: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 24

論理演算子論理演算子

条件の「かつ」,「または」を表現

aとbの一方でも非0であれば1,そうでなければ0a || b|| (or)演算子

aとbがどちらも非0であれば1,そうでなければ0a && b&&(and) 演算子

例) 12月,または1月だったら

month == 12 month == 1||「または」① ②

○(1:正) ×(0:誤) →○(1:正)

×(0:正) ○(1:正) →○(1:正)

×(0:誤) ×(0:誤) →×(0:誤)

○(1:正) ○(1:正) → ○(1:正)

①,②のどちらかが成り立てば○

Page 25: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 25

季節判定プログラム(論理演算子)季節判定プログラム(論理演算子)

ファイル名:list0316.c (p.53)/* 読み込んだ月の季節を表示 */#include <stdio.h>int main(void){

int month; /* 月 */

printf("何月ですか:");scanf("%d", &month);

if (month >= 3 && month <= 5)puts("春です。");

else if (month >= 6 && month <= 8)puts("夏です。");

else if (month >= 9 && month <= 11)puts("秋です。");

else if (month == 1 || month == 2 || month == 12)puts("冬です。");

elseputs("そんな月はありませんよ!!¥a");

return (0);}

/* 読み込んだ月の季節を表示 */#include <stdio.h>int main(void){

int month; /* 月 */

printf("何月ですか:");scanf("%d", &month);

if (month >= 3 && month <= 5)puts("春です。");

else if (month >= 6 && month <= 8)puts("夏です。");

else if (month >= 9 && month <= 11)puts("秋です。");

else if (month == 1 || month == 2 || month == 12)puts("冬です。");

elseputs("そんな月はありませんよ!!¥a");

return (0);}

Page 26: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 26

もう一つの条件分岐文もう一つの条件分岐文 ~~ switch switch 文文

ソースファイル名: list0317.c (p.54)読み込んだ整数値を3で割った剰余を表示(if文使用)

/* 読み込んだ整数値を3で割った余りを表示 */

#include <stdio.h>

int main(void){

int num;

printf("整数を入力してください:");scanf("%d", &num);

return (0);}

/* 読み込んだ整数値を3で割った余りを表示 */

#include <stdio.h>

int main(void){

int num;

printf("整数を入力してください:");scanf("%d", &num);

return (0);}

if (num % 3 == 0)puts(“3で割った余りは0です");

else if (num % 3 == 1)puts(" 3で割った余りは1です");

elseputs(“3で割った余りは2です");

処理を自分で記述

同じ式が2回登場 → 無駄?

Page 27: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 27

switch switch 文文単一の条件式の値によって,処理を複数に分岐させる場合

→ if文よりも簡潔に記述できる!

ソースファイル名: list0318.c (p.55)

/* 読み込んだ整数値を3で割った余りを表示 */

#include <stdio.h>

int main(void){

int num;

printf("整数を入力してください:");scanf("%d", &num);

switch ( num % 3 ) {case 0 : puts(“3で割り切れます”); break ;case 1 : puts(“余りは1です”); break ;case 2 : puts(“余りは2です”); break ;

}

return (0);}

/* 読み込んだ整数値を3で割った余りを表示 */

#include <stdio.h>

int main(void){

int num;

printf("整数を入力してください:");scanf("%d", &num);

switch ( num % 3 ) {case 0 : puts(“3で割り切れます”); break ;case 1 : puts(“余りは1です”); break ;case 2 : puts(“余りは2です”); break ;

}

return (0);}

Page 28: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 28

switchswitch文の構造文の構造

switch ( num % 3 ) {

case 0 : puts(“3で割り切れます”); break ;case 1 : puts(“余りは1です”); break ;case 2 : puts(“余りは2です”); break ;

}

条件式①

①の値が0の場合

(Switch文終了)break でswitch文を抜ける

1の場合

2の場合

()カッコ内の式を評価し,case で書かれた

値と一致するところにプログラムの流れを移行

Page 29: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 29

switchswitch文の文の break; break; とと default : default : の役割の役割

ソースファイル名: list0319.c (p.56)

/* switch文の動作を確認するプログラム */#include <stdio.h>

int main(void){

int sw;

printf("整数を入力してください:");scanf("%d", &sw);

switch (sw) {case 1 : puts("A"); puts("B"); break;case 2 : puts("C");case 5 : puts("D"); break;case 6 :case 7 : puts("E"); break;default : puts("F"); break;

}

return (0);}

/* switch文の動作を確認するプログラム */#include <stdio.h>

int main(void){

int sw;

printf("整数を入力してください:");scanf("%d", &sw);

switch (sw) {case 1 : puts("A"); puts("B"); break;case 2 : puts("C");case 5 : puts("D"); break;case 6 :case 7 : puts("E"); break;default : puts("F"); break;

}

return (0);}

break; がない

break; がない

新しい default : switch文の動作を確認

Page 30: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 30

switch (sw) {

case 1 : puts("A"); puts("B"); break;case 2 : puts("C");case 5 : puts("D"); break;case 6 :case 7 : puts("E"); break;

default : puts("F"); break;

} “sw” が 1, 2, 5, 6, 7 以外の場合

Page 31: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 31

switchswitch文文 とと ifif文文

Switch文→ 単一の式の値によって,プログラムの流れを分岐

if 文→ 複数の式の値によって,複雑な条件判断

を行い,処理を分岐することができる

Page 32: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 32

キャスト演算子キャスト演算子 ~~ 値の型を(強引に)変換値の型を(強引に)変換

a (型)aの値を型名で指定された値に

変換したものを生成

例1)(double) 5 → 5.0 を生成(int) 2.55 → 2 を生成

例2)int na, nb;

double heikin;

na = 40;nb = 45;

heikin = (double) (na + nb) / 2 ;85(int型)

85.0(double型)

85.0 / 2(double) / (int)

45.2 (double)45.2 (double)

代入代入

Page 33: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 33

今日の課題今日の課題

1.if文を用いて,点数を入力すると、その評価を出力するプログラム

を作れ。

なお評価は、以下のとおりとする。

・80点以上: A(優), 70点以上80点未満: B(良),60点以上70点未満: C(可),

60点未満: D(不可)

2.月を数字で読込み,その月が何日あるかを表示するプログラムを作れ。(switch文使用)

ただし,

・2月 →28日・ 4, 6, 9, 11 → 30日・1,3,5,7,8,10,12 → 31日

Page 34: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 34

レポート課題(第1回目)レポート課題(第1回目)

以下のプログラムを作成し,動作確認した上で

ソースファイル(report1.c) をメールに添付して提出せよ。

提出方法:メールの題名(subjet)を, “学籍番号”+”名前”とする。例) L02001 aoki

提出先: [email protected] (青木アドレス)提出期限: 10月6日(月) 12:00まで(厳守)

課題プログラム

4桁の整数で西暦年を 入力し、それがうるう年(2月が29日まである年)かどうかを判定し,その結果を表示せよ。

うるう年かどうかの判定条件は

400 で割りきれたら, うるう年

または

100 で割りきれず

なおかつ

4 で割りきれた場合が うるう年

である。

Page 35: プログラミング入門2 - SICyaoki/program2/pdf/P03.pdfプログラミング入門2 第3回 条件分岐 処理の流れを分ける(場合分け)プログラムの作成

2003/9/29 プログラミング入門2 35

次回の講義予定次回の講義予定

次回講義内容

繰り返し文

で、プログラミングの幅を広げよう!