• 検索結果がありません。

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

N/A
N/A
Protected

Academic year: 2021

シェア "4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

4 分岐処理と繰返し処理(教科書 P.32) プログラムの基本的処理は三つある. (1)順次処理: 上から下に順番に処理する (2)分岐 ぶ ん き 処理: 条件が揃そろえば,処理する (3)反復 はんぷく 処理: 条件が揃うまで処理を繰り返す 全てのプログラムは(1)から(3)の組み合わせで作れる.ここでは(2)と(3)について扱う. 4.1 分岐処理 4.1.1 if 文 条件式が真のとき{ }内の処理が実行され,偽のときは何もしない. if (条件式) { 処理 } 条件式が真であり{ }が無いときは下の1行だけ実行される.偽のときは何もしない. if (条件式) 式 1; 条件式の例を次に示す. 例: if (number > 10 ) /* もし number > 10 ならば真*/ 記号, >greater-thanは演算子と呼ばれ,他にもいくつかある.(教科書 p.33,表 4-1.) 演算子 書 式 意 味 < a < b 書式と同じ <= a <= b 書式と同じ > a > b 書式と同じ >= a >= b 書式と同じ == a == b a と b は等しい != a != b a と b は等しくない && 式 1 && 式 2 式 1 と式 2 が共に真である || 式 1 || 式 2 式 1 と式 2 のどちらかが真である ! !式 式が真なら偽,式が偽なら真 真と偽には次の数値が割り当てられている. 2 進数の場合: 偽は 0,真は 1. 10 進数の場合: 偽は 0,真は 0 以外. 条件式の代わりに変数も使用できる.(下の二つは同じ動作をする.) if(flag) /* もし flag が 0 以外ならば真. */ if( flag != 0 ) /* !=0 は 0 でないを意味する */

(2)

if 文を使った例題を示す.キーボードから 1 文字入力して,その文字コードを変数,moji に記憶する.次に変数 moji と a の文字コードを比較する.もし両者が一致すれば,AAAAA, BBBBB および CCCCC を,そうでなければ,CCCCC を画面に表示する. プログラム4-1 #include<stdio.h> /* stdio.h をインクルードする */ void main(void) {

int moji; /* int 型変数 moji を宣言する */ moji = getchar(); /* キーボードから入力されたキーの文字コードを moji へ代入する */ if(moji =='a' ){ /* moji と a の文字コードが等しいとき,{}の中の処理を行う */ printf("AAAAA¥n"); /* 画面に AAAAA を表示する */ printf("BBBBB¥n"); /* 画面に BBBBB を表示する */ } /* if 文が成立しないとき,次の処理を行う */ printf("CCCCC¥n"); /* 画面に CCCCC を表示する */ } /* 実行例: a[Enter] */ コンパイル・リンクと実行の手順は次のとおり. >gcc␣-o␣p4_1␣p4_1.c[Enter] >./p4_1[Enter]

4.1.2 if-else と if-else if-else 文

if-else 文は条件式が真のとき 1 番目の{ }が,偽のときは 2 番目の{ }が実行される. if (条件式) { 処理 1 } else { 処理 2 } if-else if-else 文は条件式 1 が真のとき 1 番目の{ }が,偽のときは条件式 2 が評価され,そ れが真のときは 2 番目の{ }が,それが偽のときは 3 番目の{ }が実行される. if (条件式 1) { 処理 1 } else if (条件式 2) { 処理 2 } else { 処理 3 }

(3)

4.1.3 switch 文 変数が値 1 ならば処理 1 から break まで,変数が値 2 ならば処理 2 から break まで,…., いずれもなければ処理 d 以降が実行される. switch (変数) { case 値 1: 処理 1 … break; case 値 2: 処理 2 … break; … … default: 処理 d; … } ここで例題を示す.まず x = 20,y = 5 の値にセットする.キーボードから,+, -, * ま たは / の何れか 1 文字を入力し,その文字コードは変数,moji に記録される.次に文字コ ードに対応する行へ制御が移り,計算が行われる.最後に計算結果が画面に表示される. プログラム4-3 #include<stdio.h> /* stdio.h をインクルードする */ void main(void) {

int moji; /* int 型変数を 1 つ宣言する */ int x, y, z; /* int 型変数を 3 つ宣言する */ x = 20; /* 20 を int 型変数 x へ代入する */ y = 5; /* 5 を int 型変数 y へ代入する */ moji = getchar(); /* キーボードから入力されたキーの文字コードを moji へ代入する */ switch(moji){ /* 文字コードに対応する行へ処理を移す */ case '+': /* + のときの処理 */ z = x + y; break; /* }の外へ移る */ case '-': /* - のときの処理 */ z = x - y; break; /* }の外へ制御が移る */ case '*': /* * のときの処理 */ z = x * y; break; /* }の外へ制御が移る */ case '/': /* / のときの処理 */ z = x / y; break; /* }の外へ制御が移る */ default: /* +,-,*,/ 以外のときの処理 */ z = 9999; } printf("z = %d¥n", z); /* z の値を表示する */ } /* 入力例: +[Enter] */

(4)

case と default の文の最後はコロン,:であることに注意する.もし break 文がないと,次の case 文も実行するので注意する. 4.2 繰り返し処理 4.2.1 while 文 条件式が真のとき{ }内の処理を繰り返し,偽のときはそれをしない. while (条件式) { 処理 } 例題を次に示す.まず i = 0 にする.i < 5 が成立する間,{ }内の処理を繰り返す,つまり i の値を表示して,その度に i を 1 ずつ増やし,それを表示する.i < 5 が不成立のときは画面 を改行する. プログラム4-5 #include<stdio.h> /* stdio.h をインクルードする */ void main(void) { int i = 0; /* int 型変数 i を宣言して,0 をそれに代入する */ while(i<5){ /* i<5 が真のとき{ }内の処理を繰り返す */ printf("%d", i); /* i の値を画面に表示する */ ++i; /* i=i+1 と同じ.つまり i+1 の値を i へ代入する */ } printf("¥n"); /* 改行する */ } 4.2.2 do-while 文 { }内の処理を一度実行したあと,条件式が評価される.条件式が真のとき{ }内の処理を 繰り返し,偽のときは{ }から外れる. do { 処理 } while (条件式) (注意)プログラム 4-7,上から 9 行目,中括弧 { が消えている.正しくは次のとおり. if ( num > 100 ) { 4.2.3 for 文 前処理式は繰り返し処理の前に一度実行される.条件式が真のとき{ }内を繰り返す.繰 返しのたびに後処理式が実行される.条件式が偽のときは{ }から外れる. for ( 前処理式; 条件式; 後処理式 ) { 処理 } { }が無いときは下の 1 行だけ実行される.

(5)

for ( 前処理式; 条件式; 後処理式 ) 式 1;

for 文の例題を示す.まず i = 0 にする.i < 10 が成立する間,for 文の下の 1 行を実行し, その度に i を 1 ずつ増加する. i < 10 が不成立になると,画面を改行する. プログラム4-8 #include<stdio.h> /* stdio.h をインクルードする */ void main(void) { int i; /* int 型変数を宣言する*/

for(i = 0; i < 10; ++i) /* i=0 とし,i<10 が真のとき,下の 1 行を実行する*/ printf("%d", i); /* i の値を画面に表示する*/

/* このとき for 文の++i が実行される*/ printf("¥n"); /* 改行する*/

}

4.2.4 繰り変し処理における break と continue

{ }内の処理は break と continue で制御できる.もし break あると,{ }の外へ制御が移る(図 1 左).もし continue があると,繰り返しの最初,式 1 へ制御が移る. 図 1 左は break 文の例,右は continue 文の例. 両者の例題を次に示す.このプログラムは 1900 年から 2100 年のある年がうるう年か否 かを示す.まず画面に入力を促すメッセージが表示される.次にキーボードから年を入力 する.入力の年が 1900 年から 2100 年の範囲であれば,うるう年の判定のメッセージが表 示される.もしその範囲でなければ,再入力を促される.0 を入力すると,処理は終了する. while(1) { 式 1; … break; 式 2; … } while(1) { 式 1; … continue; 式 2; … }

(6)

プログラム 4-9

#include<stdio.h> /* stdio.h をインクルードする */ void main(void)

{

int year; /* int 型変数を宣言する,年を扱う*/

printf("Input year between 1900 and 2100.(0 to quit)¥n"); /*メッセージの表示 */ while(1) /*while(1)は無限ループを意味する:(1)は常に偽である */ { scanf("%d", &year); /* キーボードから年を入力する */ if(year == 0) /* もし year=0 ならば処理を終わる */ break; if((year < 1900) || (year > 2100)){ /* 入力した年が間違っている時の処理 */ printf("Not between 1900 and 2100.¥n"); /* 入力範囲外の表示 */ continue; /* scanf へ制御が戻る */ }

if(((year%4 ==0) && (year%100 !=0)) || (year%400 == 0))/*条件のチェック*/ printf("%d is a leap year.¥n", year); /* うるう年の表示 */ else

printf("%d is a comon year.¥n", year); /* 普通の年の表示 */ } } continue を使うと,入力判定部分をループで回さなくてよいので,カウンタ用変数の使用を 避けられる.また記述が簡素化できることがある. 演習問題の補足 (7) 答えの素数が間違っている.正しくは 2,3,5,7,…

参照

関連したドキュメント

固体廃棄物の処理・処分方策とその安全性に関する技術的な見通し.. ©Nuclear Damage Compensation and Decommissioning Facilitation

の後︑患者は理事から要請には同意できるが︑ それは遺体処理法一 0

  他人か ら産業廃棄物 の処理 (収集運搬、処 分)の 委託を 受けて 、その

原子炉建屋から採取された試料は、解体廃棄物の汚染状態の把握、発生量(体 積、質量)や放射能量の推定、インベントリの評価を行う上で重要である。 今回、 1

震災発生時のがれき処理に関

処理処分の流れ図(図 1-1 及び図 1-2)の各項目の処理量は、産業廃棄物・特別管理産業廃 棄物処理計画実施状況報告書(平成

過水タンク並びに Sr 処理水貯槽のうち Sr 処理水貯槽(K2 エリア)及び Sr 処理水貯槽(K1 南エリア)の放射能濃度は,水分析結果を基に線源条件を設定する。RO

(注)