多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

26
多多多多 (switch 多 ) 多 多多多多多多 (do-while 多while 多 ) 多多 多多多 多 多多 多多 多 多多 多多 多 多 多 多 多 多 多多 多 6[16525()]:PN0406 . pp 多多多多多多多多 多多多多 (if 多 ) 多多多 () 多多多多多多多多多多多多多多 多多 多多多多 (switch 多 ) 多多多多多多 (do-while 多while 多 ) 多多 多多多多多

Upload: cirila

Post on 19-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

第6回[平成16年5月25日(火)]:PN04ー06 . ppt. 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 ). 今日の内容. 1 構造化プログラム、選択構造 (if 文 ) (復習) 2 論理演算子と演算子の優先順位 3 多岐 選択構造 (switch 文 ) 4  繰り返し構造 (do-while 文、 while 文 ) 5  演習. 皆さんのレポートから. オープン利用室の CPad の入っているパソコンの台数を増やしてほしい → センターに問い合わせてみます。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

多岐選択 (switch 文 ) と繰り返し構造

(do-while 文、 while 文 )

第6回[平成16年5月25日(火)]:PN04ー06 . ppt

1 構造化プログラム、選択構造 (if 文 )(復習)

2 論理演算子と演算子の優先順位3 多岐選択構造 (switch 文 )4 繰り返し構造 (do-while 文、 while 文 )5 演習

今日の内容

Page 2: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

皆さんのレポートから

• オープン利用室の CPad の入っているパソコンの台数を増やしてほしい → センターに問い合わせてみます。

• ギリギリまで授業をすると、次の講義が6号館なのでつらい → 数分前に終了するのを目標としましょうか。あるいは、開始を5分ぐらい早くするとか。

• 比較的簡単でした。あと、今日ぐらいの授業のスピードがちょうど良いです。

• 今日は時間内に終わったので良かったです。• 授業が長いです。早く終わりたい → 90分を有効活用• 内容が多い、資料は3枚(18スライド)ぐらいが良い。• 簡単だったような難しかった様な感じで、何とも言い難

かったです。とにかくがんばります。• 難しそうに感じたけれど、コツをつかめば簡単そう。

Page 3: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

皆さんのレポートから

• If は高校でやった時からよく分からなかったから、しっかり復習して理解したいと思った。 → 高校で習ったから分かる、習わなかったから分からない、というのはおかしい。 → 大学で新たに学習する意気込みで勉強しよう

• If 文では、何通りもの答えがあったりするから、少し頭が混乱してしまう。 → まず基本的な考え方を理解する

• If 文をもっと詳しく知りたいと思いました。 else の後ろなどにセミコロン (;) を付けないようにしたいと思います。

• ちゃんと理解できて良かった。 If 文と3項演算子をしっかり使い分けるようにしたい。

• If が入ってきたので、プログラムが本格的になってくるので、気を引き締めたやりたい → 油断大敵ですよ

ppt の印刷無し5人

Page 4: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

構造化プログラミング•順次構造

B B

判断

true false

判断

true

false

•選択構造・二者択一、

複数場合分け・ if 文、 switch 文

•繰り返し(反復)構造・定数回繰り返し、前判断、後判断・ for 文、 while 文、 do-while 文

どの構造も入口と出口が一つだけ

復習

Page 5: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

選択構造•条件判断によって処理を選択していく

構造•判断の結果は

非0 : true(Yes) または0 : false(No)

文2

条件

文1

true false

復習

if ( 条件 )  文 1 //trueelse 文 2 //false

菱形の中:0又は非0 (1) の結果を持つ式

Page 6: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

関係演算子と等価演算子 (p.42-)•関係演算子:値の大小関係を比較する  関係成立: 1(true) 、不成立: 0(false)

a < b aがbより小さいなら 1(条件成立)a <= b aがbより小さいか又は等しいなら 1a > b aがbより大きいなら 1a >= b aがbより大きいか又は等しいなら 1

a == b aとbが等しいなら 1a != b aとbが等しくないなら 1

•等価演算子:値が等しいかどうかを判定する

  関係成立: 1(true) 、不成立: 0(false)

復習

Page 7: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

論理演算子 (p.52-)p,q は 非 0(true,1) 又は 0(false) とする•論理否定演算子 (!) → !p p が非 0(true,1) ならば  !p は 0(false) 0(false) 1(true)•論理 AND 演算子 (&&) → p && q p と q が共に非 0(true,1) の時のみ 1(true)•論理 OR 演算子 (||) → p || q p と q のいずれかが非 0(true,1) なら 1(true)

演算子の優先順位:教科書177頁を常に参照

Page 8: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

論理演算:真(○)偽( × )値表p q p && q p || q !p !q

×

×

×

×

×

×

×

×

×

×

×

×

Page 9: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

演算の優先順位

177頁

Page 10: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

if (              )

{ puts("You can drink beer"); puts("You can drink wine"); }

else puts("You can drink juice");

演習次の if 文で、年齢 (age) が20歳以上 かつ所持金 (money) が1000円以上の場合、に変更してみよう

Page 11: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

演算子の優先順位

a != b < c

a <= b && c == d

a == b >= c || d

< > <= >=== !=

&&

||

a=1; b=2; c=3; d=4;

1(true)0(false)

1(true) 0(false)

0(false)

0(false)

1(true)

0(false) 値 4 は非 0(true)

Page 12: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

    (1) a < b    (2) L == ‘$’    (3) ‘q’ < ‘r’    (4) -(a-b) > 2.0    (5) (c <= d) || (a == b)

演習(1)a,b,c,d,L を以下のような型と値を持つ変数とするとき、次の論理式の値を求めよ。  double a = 5.7 ; int c = 7 ;  double b = 8.2 ; int d = 4 ;  char L = ‘W’ ;

変数宣言の時初期値を入れることが出来る(初期化)

Page 13: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

    (6)   !(5 == d + 1)    (7) c+d == (c ? 10 : 11)    (8) 1 || b <= 8     (9) (a > 0) && (c != 7)     (10) c*d == L - 59

演習(2)a,b,c,d,L を以下のような型と値を持つ変数とするとき、次の論理式の値を求めよ。  double a = 5.7 ; int c = 7 ;  double b = 8.2 ; int d = 4 ;  char L = ‘W’ ;

Page 14: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

演習(3)次の数学上での条件を論理式で表現せよ(1) x = 5(2) x ≠ 0(3) x ≧ 2(4) 0 < x ≦ 10 (5) x < 0 または x > 10(6) x は負 または  5 以上で 10 を除

く値

Page 15: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

演習(4)西暦 y 年が閏年かどうかを表示せよ

if( )

    puts(" 閏年だ "); else puts(" 閏年じゃあない ");

・[ y が、4で割り切れて 100 で割り切れないか、   400 で割り切れる年が閏年である]

・『 「 y が 4 で割り切れる」 かつ   「 y が 100 で割り切れない」 』 または 『 y が 400 で割り切れる』 ( && ) ||

Page 16: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

多岐選択 (p.54-)•複数の選択肢から選ぶ

•式の値によって処理を選択•選択肢は幾つあっても良い•以下の処理を避けるためにbreak 文を使う

処理D

処理A

処理B

処理C

値 1

値 2

値 3

その他•該当する選択肢が無い場合は、その他の処理を実行•その他は無くても良い

break

Page 17: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

switch文•ラベルは式の取りうる値•break により  switch 文を抜けるswitch ( 式 ) { case ラベル 1 : 文 1 break; case ラベル 2 : 文 21 文 22 break; case ラベル 30 : case ラベル 31 : 文 31 case ラベル 32 : 文 32 break; : default : 文 n [break;] } default の部分は省略可能

Page 18: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

switch 文の例• month を調べて、日数を days に与える• month が 1~ 12 以外の時は ‘入力ミス’

と出力するswitch ( month ) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default : printf(" 入力ミス ");break;}

Page 19: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

演習•入力された 年 (year) と 月 (month) か

ら、その月の 日数 (days) を与えるプログラム(部分)を switch 文 で書け year と month は入力済みとする month を調べて days  を与える ただし、 month  が 2 の時は、 year

の値によって、閏年かどうかを判断し、 days  を与える

Page 20: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

switch (month) {case 1: case 3: case 5: case 7:case 8: case 10: case 12: _________; ______case 4: ________________________ days = 30; ______case 2:if ( _____________________ ____________________ _____________________ ) days = 29; else days = 28; ________________ printf(" 月の入力ミス "); }

Page 21: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

不定数回の繰り返し(反復)構造

・不定数回反復とは  繰返しの回数が、前もって分からない反復・継続条件式が満たされている間は繰り返す

実行したい文が複数ある→複合文 ,複文

do 文 while ( 条件式 );do { 文 1 ... 文 n}   while ( 条件式 );

while ( 条件式 ) 文while ( 条件式 ) { 文 1 文 2 ... 文 n}

Page 22: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

do-while文•継続条件式が真 (true) の間は文繰り返す  do 文 while (  条件式 );  do { 文 1 ... 文 n } while (  条件式 );

k<=20000

printf("A");k = k + 1;

false

true

k=1;k = 1;do { printf("A"); k = k + 1;} while( k<=20000 );

反復を繰り返す条件

Page 23: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

while文•継続条件式が 真 (true) の間は文を繰り返す while ( 条件式 )  文 while ( 条件式 ) { 文 1 文 2 ... 文 n}

k = 1;while ( k<=20000 ) { printf("A"); k = k + 1; }

k<=20000

printf("A");k = k + 1;

true

false

k=1;反復を続ける条件

Page 24: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

今回の課題•キーボードから負の整数が入力されるまで、整数

を入力しそれらを個数を求める部分を書け。( do-while の場合と while の場合を書く)

提出用紙に質問・意見・感想・提案等も書いて下さい

int a, count=0;do { printf("整数 =>"); scanf("%d",&a); if ( ) count = ;} while ( );

Page 25: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

int a, count=0;printf("整数 =>");scanf("%d",&a);if ( a >= 0 ) do {                  ; printf("整数 =>"); scanf("%d",&a); }

今回の課題( do-while 場合の別解)

Page 26: 多岐選択 (switch 文 ) と 繰り返し構造 (do-while 文、 while 文 )

今回の課題( while の場合)int a, cnt=0;printf("整数 =>");scanf("%d",&a);while (         ) {              ; printf("整数 =>");  scanf("%d",&a);}

いずれの場合も結果出力の部分は省略した