260 likes | 322 Views
第6回[平æˆï¼‘6年5月25日(ç«ï¼‰ï¼½ï¼šï¼°ï¼®ï¼ï¼”ーï¼ï¼– . ï½ï½ï½”. 多å²é¸æŠž (switch æ–‡ ) ã¨ ç¹°ã‚Šè¿”ã—æ§‹é€ (do-while 文〠while æ–‡ ). 今日ã®å†…容. ï¼‘ã€€æ§‹é€ åŒ–ãƒ—ãƒã‚°ãƒ©ãƒ ã€é¸æŠžæ§‹é€ (if æ–‡ ) (復習) ï¼’ã€€è«–ç†æ¼”ç®—åã¨æ¼”ç®—åã®å„ªå…ˆé †ä½ ï¼“ã€€å¤šå² é¸æŠžæ§‹é€ (switch æ–‡ ) 4  ç¹°ã‚Šè¿”ã—æ§‹é€ (do-while 文〠while æ–‡ ) 5  演習. 皆ã•ã‚“ã®ãƒ¬ãƒãƒ¼ãƒˆã‹ã‚‰. オープン利用室㮠CPad ã®å…¥ã£ã¦ã„るパソコンã®å°æ•°ã‚’増やã—ã¦ã»ã—ㄠ→ センターã«å•ã„åˆã‚ã›ã¦ã¿ã¾ã™ã€‚
E N D
第6回[平成16年5月25日(火)]:PN04ー06.ppt第6回[平成16年5月25日(火)]:PN04ー06.ppt 多岐選択(switch文)と繰り返し構造(do-while文、while文) 今日の内容 1 構造化プログラム、選択構造(if文)(復習) 2 論理演算子と演算子の優先順位 3 多岐選択構造(switch文) 4 繰り返し構造(do-while文、while文) 5 演習
皆さんのレポートから • オープン利用室の CPad の入っているパソコンの台数を増やしてほしい → センターに問い合わせてみます。 • ギリギリまで授業をすると、次の講義が6号館なのでつらい → 数分前に終了するのを目標としましょうか。あるいは、開始を5分ぐらい早くするとか。 • 比較的簡単でした。あと、今日ぐらいの授業のスピードがちょうど良いです。 • 今日は時間内に終わったので良かったです。 • 授業が長いです。早く終わりたい → 90分を有効活用 • 内容が多い、資料は3枚(18スライド)ぐらいが良い。 • 簡単だったような難しかった様な感じで、何とも言い難かったです。とにかくがんばります。 • 難しそうに感じたけれど、コツをつかめば簡単そう。
皆さんのレポートから pptの印刷無し5人 • Ifは高校でやった時からよく分からなかったから、しっかり復習して理解したいと思った。 → 高校で習ったから分かる、習わなかったから分からない、というのはおかしい。 → 大学で新たに学習する意気込みで勉強しよう • If文では、何通りもの答えがあったりするから、少し頭が混乱してしまう。 → まず基本的な考え方を理解する • If文をもっと詳しく知りたいと思いました。elseの後ろなどにセミコロン(;)を付けないようにしたいと思います。 • ちゃんと理解できて良かった。If文と3項演算子をしっかり使い分けるようにしたい。 • Ifが入ってきたので、プログラムが本格的になってくるので、気を引き締めたやりたい → 油断大敵ですよ
A false true 判断 B A B false 判断 true A 復習 構造化プログラミング • 順次構造 • 選択構造 ・二者択一、複数場合分け ・if文、switch文 • 繰り返し(反復)構造 ・定数回繰り返し、前判断、後判断 ・for文、while文、do-while文 どの構造も入口と出口が一つだけ
true false 条件 文1 文2 復習 選択構造 • 条件判断によって処理を選択していく構造 • 判断の結果は非0 : true(Yes) または0 : false(No) if (条件)文1 //trueelse文2 //false 菱形の中:0又は非0(1)の結果を持つ式
復習 関係演算子と等価演算子(p.42-) • 関係演算子:値の大小関係を比較する 関係成立:1(true)、不成立:0(false) a <b aがbより小さいなら 1(条件成立) a <= b aがbより小さいか又は等しいなら1 a > b aがbより大きいなら 1 a >= b aがbより大きいか又は等しいなら 1 • 等価演算子:値が等しいかどうかを判定する • 関係成立:1(true)、不成立:0(false) a == b aとbが等しいなら 1 a != b aとbが等しくないなら 1
論理演算子(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頁を常に参照
論理演算:真(○)偽(×)値表 ○ × ○ × ○ × × × ○ ○ ○ × × ○ × ○ × × ○ ○ ○ ○ × ×
演算の優先順位 177頁
演習 次のif文で、年齢(age)が20歳以上かつ所持金(money)が1000円以上の場合、に変更してみよう if () {puts("You can drink beer"); puts("You can drink wine"); } else puts("You can drink juice");
演算子の優先順位 a=1; b=2; c=3; d=4; < > <= >= == != a != b < c 0(false) && 1(true) || a <= b && c == d 0(false) 1(true) 0(false) a == b >= c || d 1(true) 0(false) 0(false) 値4は非0(true)
演習(1) a,b,c,d,L を以下のような型と値を持つ変数とするとき、次の論理式の値を求めよ。 double a = 5.7 ; int c = 7 ;double b = 8.2 ; int d = 4 ;char L = ‘W’ ; 変数宣言の時初期値を入れることが出来る(初期化) (1) a < b (2) L == ‘$’ (3) ‘q’ < ‘r’ (4) -(a-b) > 2.0 (5) (c <= d) || (a == b)
演習(2) 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
演習(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 年が閏年かどうかを表示せよ ・[yが、4で割り切れて100で割り切れないか、 400で割り切れる年が閏年である] ・『「 y が 4 で割り切れる」かつ「 y が 100 で割り切れない」』または『 y が 400 で割り切れる』 if() puts("閏年だ"); else puts("閏年じゃあない"); ( && ) ||
式 処理A 値1 処理B 値2 値3 処理C 処理D その他 多岐選択(p.54-) break • 複数の選択肢から選ぶ • 式の値によって処理を選択 • 選択肢は幾つあっても良い • 以下の処理を避けるためにbreak文を使う • 該当する選択肢が無い場合は、その他の処理を実行 • その他は無くても良い
switch文 • ラベルは式の取りうる値 • breakにより switch文を抜ける switch (式) { caseラベル1 :文1break; 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}
k=1; printf("A"); k = k + 1; true k<=20000 false 反復を繰り返す条件 do-while文 • 継続条件式が真(true)の間は文繰り返す do 文 while (条件式 ); do{ 文1 ... 文n } while (条件式 ); k = 1; do { printf("A"); k = k + 1; } while( k<=20000);
反復を続ける条件 k=1; false k<=20000 true printf("A"); k = k + 1; while文 • 継続条件式が 真(true)の間は文を繰り返す while (条件式)文 while (条件式){文1 文2 ... 文n} k = 1; while (k<=20000 ) { printf("A"); k = k + 1; }
今回の課題 • キーボードから負の整数が入力されるまで、整数を入力しそれらを個数を求める部分を書け。(do-whileの場合とwhileの場合を書く) int a, count=0; do { printf("整数=>"); scanf("%d",&a); if ( ) count = ; } while ( ); 提出用紙に質問・意見・感想・提案等も書いて下さい
今回の課題(do-while場合の別解) int a, count=0; printf("整数=>"); scanf("%d",&a); if ( a >= 0 ) do { ; printf("整数=>"); scanf("%d",&a); }
今回の課題(whileの場合) int a, cnt=0; printf("整数=>"); scanf("%d",&a); while () { ; printf("整数=>"); scanf("%d",&a); } いずれの場合も結果出力の部分は省略した