第6回[平成16年5月25日(火)]:PN04ー06.ppt 多岐選択(switch文)と 繰り返し構造 (do-while文、while文) 今日の内容 1 2 3 4 5 構造化プログラム、選択構造(if文)(復習) 論理演算子と演算子の優先順位 多岐選択構造(switch文) 繰り返し構造(do-while文、while文) 演習 皆さんのレポートから • オープン利用室の CPad の入っているパソコンの台数 を増やしてほしい → センターに問い合わせてみます。 • ギリギリまで授業をすると、次の講義が6号館なのでつ らい → 数分前に終了するのを目標としましょうか。あ るいは、開始を5分ぐらい早くするとか。 • 比較的簡単でした。あと、今日ぐらいの授業のスピード がちょうど良いです。 • 今日は時間内に終わったので良かったです。 • 授業が長いです。早く終わりたい → 90分を有効活用 • 内容が多い、資料は3枚(18スライド)ぐらいが良い。 • 簡単だったような難しかった様な感じで、何とも言い難 かったです。とにかくがんばります。 • 難しそうに感じたけれど、コツをつかめば簡単そう。 皆さんのレポートから pptの印刷無し5人 • Ifは高校でやった時からよく分からなかったから、しっか り復習して理解したいと思った。 → 高校で習ったから分かる、習わなかったから分から ない、というのはおかしい。 → 大学で新たに学習する意気込みで勉強しよう • If文では、何通りもの答えがあったりするから、少し頭 が混乱してしまう。 → まず基本的な考え方を理解する • If文をもっと詳しく知りたいと思いました。elseの後ろな どにセミコロン(;)を付けないようにしたいと思います。 • ちゃんと理解できて良かった。If文と3項演算子をしっか り使い分けるようにしたい。 • Ifが入ってきたので、プログラムが本格的になってくる ので、気を引き締めたやりたい → 油断大敵ですよ 復習 構造化プログラミング • 順次構造 A B • 選択構造 true 判断 ・二者択一、 複数場合分け A ・if文、switch文 false B • 繰り返し(反復)構造 ・定数回繰り返し、前判断、後判断 ・for文、while文、do-while文 どの構造も入口と出口 が一つだけ false 判断 true A 選択構造 復習 • 条件判断によって処理を選択していく構造 • 判断の結果は 非0 : true(Yes) または true false 0 : false(No) 条件 if (条件) 文1 //true 文1 文2 else 文2 //false 菱形の中:0又は非0(1)の結果を持つ式 関係演算子と等価演算子(p.42-) 復習 • 関係演算子:値の大小関係を比較する 関係成立:1(true)、不成立:0(false) a a a a < b <= b > b >= b aがbより小さいなら 1(条件成立) aがbより小さいか又は等しいなら 1 aがbより大きいなら 1 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頁を常に参照 論理演算:真(○)偽(×)値表 p q p && q p || q !p !q ○ ○ ○ ○ × × ○ × × ○ × ○ × ○ × ○ ○ × × × × × ○ ○ 演 算 の 優 先 順 位 177 頁 順 位 高 低 種 類 論理否定 乗除演算 加減演算 関係演算 等価演算 論理 AND 論理 OR 代入 演 算 子 ! * / % + < > <= >= = = != && || = 演習 次のif文で、年齢(age)が20歳以上 かつ所持金(money)が1000円以上の 場合、に変更してみよう if ( ) { puts("You can drink beer"); puts("You can drink wine"); } else puts("You can drink juice"); 演算子の優先順位 < > <= >= == != 0(false) a=1; b=2; c=3; d=4; a != b < c && 1(true) a <= b && c == d 1(true) 0(false) || 0(false) a == b >= c || d 0(false)0(false) 1(true) 値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( ( && || else puts("閏年だ"); puts("閏年じゃあない"); ) ) 多岐選択(p.54-) • 複数の選択肢から選ぶ • 式の値によって処理を選択 • 選択肢は幾つあっても良い • 以下の処理を避けるために break文を使う •該当する選択肢が無い場合 は、その他の処理を実行 •その他は無くても良い break 式 値1 処理A 値2 処理B 値3 処理C その他 処理D 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 = 1; do { printf("A"); k = k + 1; } while( k<=20000 ); k=1; printf("A"); k = k + 1; true k<=20000 反復を繰り返す条件 false while文 • 継続条件式が 真(true)の間は文を繰り返す while ( 条件式 ) 文 while ( 条件式 ) {文1 文2 ... 文n} 反復を続ける条件 k = 1; while ( k<=20000 ) { printf("A"); k = k + 1; } k=1; false k<=20000 true 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); } いずれの場合も結果出力の部分は省略した
© Copyright 2024 ExpyDoc