フローチャート · フローチャートの書き方 •...
Transcript of フローチャート · フローチャートの書き方 •...
フローチャートフローチャート– フローチャートとは、プログラムの処理の流れを整理し、図的に順序立てて描いたもの。流れ図流れ図ともいう。
始め
終わり
半径R
面積S←πR2
S
端子端子:開始、終了、停止などを示す
手操作入力手操作入力:キーボードなどから手で操作して入力することを示す
処理処理:あらゆる種類の処理を示す
表示表示:ディスプレイ表示を示す
例:
このようにフローチャートでは、記号形状自体が処理の意味を示している。
このようにフローチャートでは、記号形状自体が処理の意味を示している。
•• 端子端子:フローチャートの開始、終了の端子を意味する。
•• 処理処理:一般的な処理を意味する。
•• 準備準備:初期値設定などの準備を意味する。
•• 手操作入力手操作入力:キーボードからの手操作入力を意味する。
•• 表示表示:画面への情報表示を意味する。
主なフローチャートの図記号主なフローチャートの図記号
•• 判断判断:比較・判断を意味する。
•• 結合子結合子:フローチャートの他の処理への出口、または他の処理からの入口を意味する。
•• 繰り返しループ繰り返しループ:反復処理の始まりと終わりを意味する(for文の
ときに使用)。
フローチャートの書き方フローチャートの書き方
• フローチャートの流れは基本的に上から下、左から右に進行する。それ以外の場合は、流れ線に矢印を入れる。
• 流れ線は交差してもよい。交差しても合流は意味しない。
• 結合子には番号や名前を入れ、相互に結合していることを示す。
合流なし 合流あり
1
1
• 条件分岐のフローチャートは下記のようなバリエーションがある
A>0
A A
A:0
Yes
No <
=
>
1 2 3 その他 123
その他
命令1
命令2
命令3
順次処理
条件
命令1 命令2
Yes
No
選択処理
条件
命令1
Yes
No
反復処理
順次処理、選択処理、反復処理順次処理、選択処理、反復処理のフローチャートのフローチャート
例:例: 絶対値を求めるプログラムのフローチャート
始まり
終わり
実数値 val
val < 0
val←-val
val
Yes
No
キーボードから実数値を入力し、変数valに書き込む
val < 0 が成り立てば、valの符号を反転して変数valに書き
戻す。条件が成立しなければ、valの値はそのまま。
変数valの値を画面に表示
練習問題練習問題11
• 次のプログラムのフローチャートを記述せよ。
• キーボードから入力した整数値が10であったら「10です」、10以外であったら「10以外
です」と表示するプログラム。
選択処理選択処理
ifif文文((pp.45pp.45--4747、、pp.138pp.138--143143))例題例題11::キーボードから実数値を入力し、その絶対
値を表示するプログラムを作成せよ。
#include <stdio.h>main( ){
double val;scanf("%lf", &val);if(valif(val < 0){< 0){
valval = = --valval;;}}printf("val = %f¥n", val);
}
ifの括弧内の条件が成り立って
いる場合は、中括弧{ }内の処理を行う。
ifif文文の書式の書式とフローチャートとフローチャートif(式){
文;}– 式が成立した時は、{ }内の文を実行し、
成立しない場合は文を実行しない。– 式が成立した場合を条件が真真(True)(True)である
といい、成立しない場合を条件が偽偽(False)(False)であるという。
– { }内は字下げすると見やすくなる。
– 文が一つの場合は、中括弧を省略できる。例:先ほどのプログラムのif文は、中括弧を省略して次のように書くことができる:if(val < 0) val = -val;
– 文が複数ある場合は、括弧は省略不可。if(val > 0){
val = -val;printf("val=%f¥n", val);
}}
式
文
No
Yes
関係演算子と関係演算子と等値演算子等値演算子((pp.110pp.110--112112))• 関係演算子:値の大小関係を比較する演算子
– 「<」、「<=」、「>」、「>=」がある。
– 「=<」や「=>」は間違い。等号は必ず後ろにつく。
• 等値・否定演算子:値が等しいか等しくないかを比較する演算子– 「==」:値が等しいかどうかを比較する
– 「!=」:値が等しくないかどうかを比較する
例:よくある間違いif(a = b){ ..... }「=」は代入演算子なので、等価を示すときは「==」を使わないといけない!この例では、bの値をaに代入し、その値で条件判断をすることになる。C言語の場合、aの値が00以外の場合は全て真以外の場合は全て真となってしまう。
if if -- elseelse文文 ((pp.138pp.138--142142))例題例題22::キーボードから入力した値が10であったら「10です」、10以外であったら「10以外です」と表示するプログラムを作成せよ。
#include <stdio.h>main( ){
int val;scanf("%d", &val);if(valif(val == 10){== 10){
printf("printf("1010ですです¥¥n");n");}}else{else{
printf("printf("1010以外です以外です¥¥n");n");}}
}
if文の括弧内の条件が成立す
れば次の中括弧内の命令を実行し、条件が成立しなければ、elseに続く中括弧内の命令を実
行する
if(式){文1;
}else{
文2;}• 式が成り立つ場合は文1を実行し、成り立たない場合は文2を実行する。
• 文1もしくは文2が1文の場合、それを囲む中括弧は省略できる。
式
文1
No
Yes
文2
ifif--elseelse文文の書式の書式とフローチャートとフローチャート
else ifelse if文の使い方文の使い方
if (式1){文1;
}else if (式2){
文2;}• 式1が成り立つ場合は、文1を実行し、成り立たない場合は、式2を評価する。そこで、式2が成り立つ場合は、文2を実行する。
式1
文1 式2
文2
Yes
No
Yes
No
else ifelse if文の意味文の意味
else if(式2){文2;
}と
else{if(式2){文2;
}}は等価である。
例題例題33::テストの点数を入力し、60点以上で100点以下なら「good」、60未満なら「no good」と表示するプログラムを作成せよ。ただし、100点を超
える点数が入力された場合は、「データの誤り」と表示する。
始め
得点入力 score
score > 100
score > =60データの誤り
good
終わり
Yes
No
Yes
No
60≦score≦100
score≦100
score<60
no good
#include <stdio.h>main( ){
int score;printf("得点は:");scanf("%d", &score);if(scoreif(score > 100){> 100){
printfprintf("("データの誤りデータの誤り¥¥n");n");}}else else if(scoreif(score >= 60){>= 60){
printf("goodprintf("good¥¥nn");");}}else{else{
printf("noprintf("no goodgood¥¥n");n");}}
}
変数scoreの値が100よりも大きい場合は、画面に「データの誤り(改行)」と表示し、100以下の場合は、次のelse if文を実行する。
tenの値が60以上の場合(つまり、scoreの値が100以下60以上の場合)、画面に「good(改行)」と表示
する。
60未満の場合は、次のelse文を実行する。
ifif--elseelse文の入れ子構造文の入れ子構造if(式1){
if(式2){文1;
}else{文2;
}}• 式1が成立し、かつ式2が成立
する場合は、文1を、式1が成立し、かつ式2が成立しない場合は文2を実行する。
• if-elseブロック内にさらにif-elseブロックを入れられる(入れ子)。
式1
式2
文1 文2
Yes
No
Yes
No
例題例題44::西暦年数を入力させ、うるう年の判定をせよ。
うるう年の判定:400で割り切れる年数
または、4で割り切れ、かつ100で割り切れない年数
うるう年の判定:400で割り切れる年数
または、4で割り切れ、かつ100で割り切れない年数
複数の条件が組み合わされて、1つの
条件となっている
論理演算子を利用すると良い
論理演算子の利用論理演算子の利用((pp.110pp.110--112112))• 論理演算:複数の条件(式)を組み合わせて表現する演算
例: a は b より大きく、かつ b は c より大きい。
• 論理演算子:論理演算を行うために用意された演算子
論理積:条件1が成立し、かつ条件2が成立するとき、全体の演算結果を真とする演算。記号は「&&」を使用。例: (a > b) && (b > c)論理和:条件1が成立するか、または条件2が成立するとき、全体の演算結果を真とする演算。記号は「||」注:「|」パイプ記号は「delete」キーの左隣のキー
例: (a > b) | | (b > c)否定:条件が成立しない場合、演算結果を真とする演算。記号は「!」例: !(a > b)
例題例題44を論理演算子を用いて解を論理演算子を用いて解いてみるいてみる
• うるう年の条件:
(400で割り切れる年数) または (4で割り切れる年数で、かつ100で割り切れない年数)
• 上記の条件をif文で表現(nに西暦年が入っているとする)
if((n % 400 == 0) || ((n % 4 == 0) && (n % 100 != 0)))printf("うるう年¥n");
elseprintf("うるう年ではない¥n");
• 処理範囲と処理順を明確にするために、各条件と処理の固まりは括弧で括った方がわかりやすい。
switchswitch文文 (pp.154(pp.154--158)158)
switchswitch文の文の形式とフローチャート形式とフローチャートswitch(整数式){
case 定数式1:文1;break;
case 定数式2:文2;break;
....default:文;break;
}
整数式
文1 文2 文n 文…
定数式1 定数式2 定数式n default
• 整数や文字の値に応じて多方向分岐が必要な処理では、switch文を使うと便利。
•• switchswitch文の構造説明文の構造説明
– switchに続く( )内に分岐の指標となる整数式を書く。
– case に続く定数式の値(整数)が、switchの括弧内の式の値と一致した時、case以降に続く文を実行する。
– case内にbreakがある場合は、そこで、switchのブロッ
クから抜け出す。
– default に続く文は、式の値がcase文のどの定数式に
も当てはまらない場合に実行される。この場合、default文がない場合は、switchのブロックから抜ける。
– caseの記述順序は拘らない(全てのcase内にbreakを含む場合のみ)。ただし、上のcase文から評価される。
– case文の定数式の値は各々異なっている必要がある。
• switchに続く( )内には整数式(結果的に整数となる式や値、文字でも良い)を書く。
良い例良い例11: int data=2;switch(data){...}
良い例良い例22: char moji='A';switch(moji){...}
悪い例悪い例: double real=3.4;switch(real){...} /* 実数値は使用不可 */
• case文内にbreak文がないと、処理は次のcase文に移ってしまう。
例:例: switch(data){case 20:
printf("data = 20¥n");case 21:
printf("data = 21¥n");.......
}dataの数値が20の場合は、両方のprintf文が実行され、数値が21の場合は下のprintf文だけが実行される。
break文がないと、次のcase文が実行
される
• 異なる式の値でも同一の文を実行させる例
switch(data){case 1:case 2:
printf("%d is 1 or 2¥n", data);break;
....}
このようにcase 1に何の命令文も書かないと、dataの値が1の場合は、自動的に、case 2に実行が移る。従って、dataの値が1でも2でも、同一の文を実行することになる。
dataが1のときも2のときもこのprintf文が実行される
例題例題55::キーボードから整数値を入力し、入力値が1または2なら「A」、3なら「B」、それ以外なら「C」を表
示するプログラムを作成せよ。フローチャートフローチャート
始め
終わり
num
num
A B C1または2 3 default switch文
で表現可能
switch(num){case 1: case 2:
printf("A¥n");break;
case 3:printf("B¥n");break;
default:printf("C¥n");break;
}
プログラムプログラムの主要部分の主要部分
numには評価をしたい整数値が入っている
numの値が1または2の場合、次のprintf文を実行する
このbreakでswitchのブロックから抜ける
numの値が3の場合は、次のprintf文を実
行する
numの値が上記のcaseに合致しない場合
まとめまとめ11•• ifif文文 :: 式が成り立った場合に中括弧内の文を実
行する。if(式){文;}
•• if if -- elseelse文:文:式が成り立った場合にはif文の次の中括弧内の文を実行し、成り立たない場合はelse文の次の文を実行する。if(式){文1;}else{文2;}
• 式の部分には関係演算子関係演算子(<, <=, >, >=)や等価等価演算子演算子(==, !=)を入れて数値の比較が可能。
まとめまとめ22• if-elseブロック内にさらにif-elseブロックを挿入可能
• else ブロック内に ifブロックが入る場合は、else ifと記述可能
• 条件式が複数ある場合は、論理演算子を用いて一つの条件式にまとめることが可能な場合あり。
– 論理積:日本語の「かつ」に相当。記号「&&」
– 論理和:日本語の「または」に相当。記号「||」
– 否定:日本語の「~でない」に相当。記号「!」
まとめまとめ33• 整数や文字の値に応じて多方向分岐が必要な処理では、
switch文を使うと便利。
•• switchswitch文の一般形:文の一般形:
switch(整数式){case 定数式:文;break;....
default:文;break;
}
参考文献参考文献• 「学生のためのC」 東京電機大学出版
ISBN4-501-52310-7• ポケットコンピュータ SHARP PC-G850V
取り扱い説明書
• 「はじめてのC」 技術評論社
ISBN4-7741-1264-X