View
35
Download
0
Category
Preview:
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
Citation preview
多岐選択 (switch 文 ) と繰り返し構造
(do-while 文、 while 文 )
第6回[平成16年5月25日(火)]:PN04ー06 . ppt
1 構造化プログラム、選択構造 (if 文 )(復習)
2 論理演算子と演算子の優先順位3 多岐選択構造 (switch 文 )4 繰り返し構造 (do-while 文、 while 文 )5 演習
今日の内容
皆さんのレポートから
• オープン利用室の CPad の入っているパソコンの台数を増やしてほしい → センターに問い合わせてみます。
• ギリギリまで授業をすると、次の講義が6号館なのでつらい → 数分前に終了するのを目標としましょうか。あるいは、開始を5分ぐらい早くするとか。
• 比較的簡単でした。あと、今日ぐらいの授業のスピードがちょうど良いです。
• 今日は時間内に終わったので良かったです。• 授業が長いです。早く終わりたい → 90分を有効活用• 内容が多い、資料は3枚(18スライド)ぐらいが良い。• 簡単だったような難しかった様な感じで、何とも言い難
かったです。とにかくがんばります。• 難しそうに感じたけれど、コツをつかめば簡単そう。
皆さんのレポートから
• If は高校でやった時からよく分からなかったから、しっかり復習して理解したいと思った。 → 高校で習ったから分かる、習わなかったから分からない、というのはおかしい。 → 大学で新たに学習する意気込みで勉強しよう
• If 文では、何通りもの答えがあったりするから、少し頭が混乱してしまう。 → まず基本的な考え方を理解する
• If 文をもっと詳しく知りたいと思いました。 else の後ろなどにセミコロン (;) を付けないようにしたいと思います。
• ちゃんと理解できて良かった。 If 文と3項演算子をしっかり使い分けるようにしたい。
• If が入ってきたので、プログラムが本格的になってくるので、気を引き締めたやりたい → 油断大敵ですよ
ppt の印刷無し5人
構造化プログラミング•順次構造
A
B B
判断
A
true false
判断
A
true
false
•選択構造・二者択一、
複数場合分け・ if 文、 switch 文
•繰り返し(反復)構造・定数回繰り返し、前判断、後判断・ for 文、 while 文、 do-while 文
どの構造も入口と出口が一つだけ
復習
選択構造•条件判断によって処理を選択していく
構造•判断の結果は
非0 : true(Yes) または0 : false(No)
文2
条件
文1
true false
復習
if ( 条件 ) 文 1 //trueelse 文 2 //false
菱形の中:0又は非0 (1) の結果を持つ式
関係演算子と等価演算子 (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)
復習
論理演算子 (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頁を常に参照
論理演算:真(○)偽( × )値表p q p && q p || q !p !q
○
○
×
×
○
×
○
×
○
×
×
×
○
○
○
×
×
×
○
○
×
○
×
○
演算の優先順位
177頁
if ( )
{ puts("You can drink beer"); puts("You can drink wine"); }
else puts("You can drink juice");
演習次の if 文で、年齢 (age) が20歳以上 かつ所持金 (money) が1000円以上の場合、に変更してみよう
演算子の優先順位
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)
(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’ ;
変数宣言の時初期値を入れることが出来る(初期化)
(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’ ;
演習(3)次の数学上での条件を論理式で表現せよ(1) x = 5(2) x ≠ 0(3) x ≧ 2(4) 0 < x ≦ 10 (5) x < 0 または x > 10(6) x は負 または 5 以上で 10 を除
く値
演習(4)西暦 y 年が閏年かどうかを表示せよ
if( )
puts(" 閏年だ "); else puts(" 閏年じゃあない ");
・[ y が、4で割り切れて 100 で割り切れないか、 400 で割り切れる年が閏年である]
・『 「 y が 4 で割り切れる」 かつ 「 y が 100 で割り切れない」 』 または 『 y が 400 で割り切れる』 ( && ) ||
多岐選択 (p.54-)•複数の選択肢から選ぶ
•式の値によって処理を選択•選択肢は幾つあっても良い•以下の処理を避けるためにbreak 文を使う
処理D
式
処理A
処理B
処理C
値 1
値 2
値 3
その他•該当する選択肢が無い場合は、その他の処理を実行•その他は無くても良い
break
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 の部分は省略可能
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;}
演習•入力された 年 (year) と 月 (month) か
ら、その月の 日数 (days) を与えるプログラム(部分)を switch 文 で書け year と month は入力済みとする month を調べて days を与える ただし、 month が 2 の時は、 year
の値によって、閏年かどうかを判断し、 days を与える
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(" 月の入力ミス "); }
不定数回の繰り返し(反復)構造
・不定数回反復とは 繰返しの回数が、前もって分からない反復・継続条件式が満たされている間は繰り返す
実行したい文が複数ある→複合文 ,複文
do 文 while ( 条件式 );do { 文 1 ... 文 n} while ( 条件式 );
while ( 条件式 ) 文while ( 条件式 ) { 文 1 文 2 ... 文 n}
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 );
反復を繰り返す条件
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;反復を続ける条件
今回の課題•キーボードから負の整数が入力されるまで、整数
を入力しそれらを個数を求める部分を書け。( do-while の場合と while の場合を書く)
提出用紙に質問・意見・感想・提案等も書いて下さい
int a, count=0;do { printf("整数 =>"); scanf("%d",&a); if ( ) count = ;} while ( );
int a, count=0;printf("整数 =>");scanf("%d",&a);if ( a >= 0 ) do { ; printf("整数 =>"); scanf("%d",&a); }
今回の課題( do-while 場合の別解)
今回の課題( while の場合)int a, cnt=0;printf("整数 =>");scanf("%d",&a);while ( ) { ; printf("整数 =>"); scanf("%d",&a);}
いずれの場合も結果出力の部分は省略した
Recommended