3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

Similar documents
4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

PowerPoint プレゼンテーション

PowerPoint Presentation

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

C¥×¥í¥°¥é¥ß¥ó¥° ÆþÌç

Java講座

PowerPoint プレゼンテーション

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

PowerPoint プレゼンテーション

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

フローチャートの書き方

kiso2-06.key

Microsoft PowerPoint - prog04.ppt

PowerPoint Presentation

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - kougi2.ppt

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - å®�æ−•試é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - lec10.ppt

cp-7. 配列

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - kougi4.ppt

プログラミング入門1

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

C言語によるアルゴリズムとデータ構造

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

P05.ppt

P02.ppt

ガイダンス

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati


<82D282A982C1746F95F18D908F57967B95B E696E6464>

秋植え花壇の楽しみ方


講習No.1

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミング実習I

æœ•å¤§å–¬ç´—æŁ°,æœ•å°‘å–¬å•“æŁ°,ã…¦ã…¼ã‡¯ã…ªã……ã…›ã†®äº™éŽ¤æ³Ł

Excel97関数編

kiso2-03.key

Microsoft PowerPoint - program.ppt [互換モード]

Transcription:

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ int a, b; b = a % 3; if (b== 0) printf( %d は 3 で割り切れます n, a); if (b == 1) printf( %d を 3 で割った余りは 1 です n, a); printf( %d を 3 で割った余りは2です n, a); 実行例 1 125 125 を 3 で割った余りは 2 です 実行結果 2 99 99 は 3 で割り切れます もちろんこれでも問題ないが switch 文を使うと スッキリ表すことができる switch (a % 3) case 0 : printf( %d は 3 で割り切れます n, a); break; case 1 : printf( %d を 3 で割った余りは 1 です n, a); break; case 2 : printf( %d を 3 で割った余りは 2 です n, a); break; 二つを見比べてどうだろうか では switch 文の具体的な使い方を見ていこう

switch 文の構文は次の通り switch ( 式 ) case * : 文 ; break; case * : 文 ; break; default : 文 ; くても間違いではない switch に続く括弧の中は式が入るが 変数でもかまわない ただし 結果の値は int 型か char 型か enum 型でなくてはならない case の次に実際の値が入り 式の結果によって文を実行する 文は複数行でもかまわないが 最後は必ず break で終わること これは case * の内容はここまでですよ と言うことを表し break にぶつかると switch 文の外に出る また それ以外は と言うときには default を用い 最後の break は無くてもよい というのは 常識的に考えて default は switch 文の一番最後に来るはずであり break を付けなくても必然的に switch 文が終わるからである そう言う意味では 前例の case 2 の部分は default に変えてもよいし 明示的に case 2 を使うのであれば 最後の break はな では break がないとどうなるか switch (a % 3) case 0 : printf( %d は 3 で割り切れます n, a); case 1 : printf( %d を 3 で割った余りは 1 です n, a); case 2 : printf( %d を 3 で割った余りは 2 です n, a); これは 先ほどの例から break をとったものである a%3 が 0 の時はもちろん case0 に飛んで printf を実行する 次の行は case1 なので条件に当てはまらないので飛ばすと思うかもしれないが そうではない case1,case2 に続く printf も実行してしまうのだ どういうことかというと case * default はラベルと呼ばれるもので 飛び先の目印となる ところが 一度飛んでいくとその後の case や default は無視されてしまう switch 文全体を一つの建物として例えてみよう 建物の入り口にはいくつかの入り口があり 入り口には番号が振ってある 番号にしたがって中に入り どんどん進んでいくが break があったら外に出る 無ければ先まで進む 図示したら次のような感じか

逆に このことを利用して 例えば 0 と 1,2 と 3 でそれぞれ同じ内容を実行するときは次のよ うな書き方ができる switch (a % 3) case 0 : case 1 : printf( %d は 0 か 1 です n, a); break; case 2 : case 3 : printf( %d は 2 か 3 です n, a); break; default : printf( %d は 0,1,2,3 のいずれでもありません n, a); case0, 1 のような書き方はできない switch の括弧の中は 式であって条件式ではない a>0 や a==b のような判定には使えない 括弧の仲は char 型でもよいので case a のような書き方は OK

次のようなプログラムがある 1~8 までの整数を入力したときの実行結果をそれ ぞれ示せ 問題 3-4 switch (a) case 1 : printf( A n ); printf( B n ); break; case 2 : printf( C n ); case 5 : printf( D n ); break; case 4 : printf( G n ); case 6 : case 7 : printf( E n ); break; default : printf( F n ); 3-5 入れ子になった if 文 if 文の中に さらに if 文を入れることができる 例えば 整数を入力して 正の値であれば 5 で割り切れるかどうかを表示し そうでなければ 正でない値が入力されました と表示する プログラムは 次のようになる if (a > 0) if (a % 5) printf( %d は 5 では割り切れません n, a); printf( %d は 5 では割り切れます n, a); printf( 正でない値が入力されました n ); まず 入力された値が 0 より大きいかどうかを判定し 0 より大きければさらに 5 で割り切れるかどうかを判定する 0 以下の時は最後の に飛んで printf を実行する 入れ子になった if 文や 多重ループ ( 後から出てくる ) はきちんとインデントをとらないとこんがらがってしまうので 十分注意すること

問題 3-5 荷物の運送料を 3 辺の合計と重さで決めるとする それらを入力することによ って 料金を自動的に計算するプログラムを作れ 荷物の大きさは縦 横 高さ をそれぞれ入力するものとする なお 料金の規定は次の通りである 5kg 未満 5kg 以上 8kg 未満 8kg 以上 100cm 未満 500 750 1000 100cm 以上 150cm 未満 700 950 1200 150cm 以上 900 1150 1400 次のプログラムの間違いをすべて指摘して修正せよ 問題 3-6 1: /*/* 小さい方の値と大きい方の値を求めて表示 */*/ 2: #includo <stdio.h> 3: main () 4: 5: int a, b; /* 読込む値 /* 6: int min, max; /* 小さい方 / 大きい方の値 7: printf( 整数 a: ); scanf( %d, a); 8: printf( 整数 b: ); scanf( %d, b); 9: if (a = b) 10: printf( 二つの値は同じです m ); 11: if 12: if (a < b) 13: min = a; 14: max = b; 15: 16: min = b; 17: max = a; 18: 19: 20: printf( 小さい方の値は min です m ); 21: printf( 大きい方の値は max です m ); 22:

問題解答 3-4 実行例 1 実行例 2 実行例 3 整数値を入力して下さい :1 A B 整数値を入力して下さい :2 C D 整数値を入力して下さい :3 F 実行例 4 実行例 5 実行例 6 整数値を入力して下さい :4 G E 整数値を入力して下さい :5 D 整数値を入力して下さい :6 E 実行例 7 実行例 8 整数値を入力して下さい :7 E 整数値を入力して下さい :8 F 1: case 1 を実行して終了 2: case 2 を実行した後 break がないので case 5 を実行して終了 3,8: 該当するケースがないので default を実行して終了 4: case 4 を実行した後 break がないので case 7 を実行して終了 値の並び順は 必ずしも順序よく並んでなくてもよい 5: case 5 を実行して終了 6,7: case 7 を実行して終了

3-5 double tate, yoko, takasa, weight; /* tate= たて yoko= よこ takasa= 高さ weight= 重さ */ double sum; /* sum=3 辺の長さの合計 */ int price; /* price= 料金 */ printf( 荷物のタテの長さ (cm): ); scanf( %lf, &tate); printf( ヨコの長さ (cm): ); scanf( %lf, &yoko); printf( 高さ (cm): ); scanf( %lf, &takasa); printf( 荷物の重さ (kg): ); scanf( %lf, weight); sum = tate + yoko + takasa; if (sum < 100) if (weight < 5) price = 500; if (weight < 8) price = 750; price = 1000; if (sum < 150) if (weight < 5) price = 700; if (weight < 8) price = 950; price = 1200; if (weight < 5) price = 900; if (weight < 8) price = 1150; price = 1400; printf( 料金は %d 円です \n, price);

3-6 1: 最後の */ が不必要 2: include が includo になっている 5: 最後の */ が /* になっている 6: 最後の */ が無い 7: scanf の & が抜けている 8: 7 と同じ 9: == が = になっている 10,20,21:\n が \m になっている 11: if が余計 10 行目の最後もしくは 11 行目の頭に が必要 あるいは 9 行目の を削除