
C言語の基本|流れ図の基本
いきなりコードに迷ったら、まず手順を図にしよう。流れ図で処理を見える形にすると、C言語の条件分岐や繰り返しが書きやすくなる。
アルゴリズムは、問題を解決するための手順です。
簡単な処理であれば、頭の中だけでも手順を整理できるかもしれません。しかし、条件によって処理が分かれたり、同じ処理を何度も繰り返したりすると、少しずつ流れを追いにくくなります。
たとえば、次のような処理です。
- 数値を入力する
- 入力された値を基準値と比較する
- 条件によって表示内容を変える
- 複数のデータに同じ処理を繰り返す
- 条件を満たすまで処理を続ける
このような手順をいきなりC言語で書こうとすると、どこにifが必要なのか、forの中に何を書けばよいのか分からなくなることがあります。
そこで役立つのが、アルゴリズムを文章や図で表現する方法です。
コードを書く前に、手順を箇条書きにしたり、表で整理したり、流れ図で表したりすると、処理全体を確認しやすくなります。
この記事では、アルゴリズムの表現方法の中でも、処理の順番を視覚的に確認できる流れ図を中心に解説します。
アルゴリズムを表現する必要性
アルゴリズムには、順次、分岐、繰り返しという基本的な流れがあります。
| 基本的な流れ | 内容 | 例 |
|---|---|---|
| 順次 | 決められた順番に処理する | 入力、計算、表示の順に実行する |
| 分岐 | 条件によって処理を分ける | 点数が70以上なら合格と表示する |
| 繰り返し | 同じ処理を何度も実行する | 5個のデータを順番に表示する |
順次だけで構成されたアルゴリズムは、比較的簡単に説明できます。
しかし、順次の途中に分岐があり、その分岐の中に繰り返しが含まれるようになると、文章だけでは処理のつながりを把握しにくくなります。
そのような場合は、次の方法で処理を見える形にします。
- 箇条書きで手順を順番に並べる
- 表を使って条件と処理の対応を整理する
- 流れ図を使って処理の進む方向を示す
処理を見える形にすると、自分でアルゴリズムを確認しやすくなるだけでなく、ほかの人にも説明しやすくなります。
図1:アルゴリズムを構成する3つの基本的な流れ

この図から分かること
順次では、処理を決められた順番に実行します。入力した値を計算し、その結果を表示する流れが代表的です。
分岐では、条件の結果によって次に実行する処理が変わります。条件が成立した場合と成立しなかった場合で、別々の方向へ進みます。
繰り返しでは、指定された回数や条件に従って同じ処理を何度も実行します。
多くのプログラムは、この3つの流れを組み合わせて作られています。
アルゴリズムの主な表現方法
アルゴリズムを表現する方法には、それぞれ特徴があります。
| 表現方法 | 特徴 | 向いている場面 |
|---|---|---|
| 箇条書き | 手順を短い文章で順番に並べる | 処理の概要をすばやく整理したい場合 |
| 表 | 条件と処理を対応させて整理する | 複数の条件や結果を比較したい場合 |
| 流れ図 | 記号と矢印で処理の流れを示す | 分岐や繰り返しを視覚的に確認したい場合 |
箇条書きは、アルゴリズムを考え始めるときに便利です。思いついた処理を順番に書くだけでも、抜けている手順を見つけやすくなります。
表は、条件と処理の組み合わせが多い場合に役立ちます。どの条件で、どの処理を実行するのかを横に並べて確認できます。
流れ図は、矢印を使って処理の進む方向を表します。処理がどこで分かれ、どこで合流し、どこへ戻るのかを確認しやすい方法です。
これらの方法は、どれか1つだけを使わなければならないわけではありません。最初に箇条書きで整理し、必要に応じて表や流れ図に置き換える方法もあります。
流れ図とは
流れ図は、処理の内容を記号で表し、それらを矢印でつないだ図です。フローチャートとも呼ばれます。
基本的には、開始から終了へ向かって上から下に処理を並べます。
条件によって処理が分かれる場合は、矢印を複数の方向へ分岐させます。同じ処理を繰り返す場合は、以前の処理へ戻る矢印を使います。
流れ図を作成すると、次の点を確認しやすくなります。
- 処理がどこから始まるのか
- 最初に何を実行するのか
- どの条件で処理が分かれるのか
- 分岐した後に何を実行するのか
- 繰り返しはどこからどこまでなのか
- どの時点で処理が終了するのか
流れ図は、コードを書く前の設計図として利用できます。
流れ図を使う利点
| 目的 | 流れ図を使う利点 |
|---|---|
| 処理手順を整理する | 実行する順番を矢印で確認できる |
| 条件分岐を確認する | 条件が成立した場合と成立しない場合を分けて確認できる |
| 繰り返しを確認する | どの処理へ戻るのかが分かる |
| コードを書く準備をする | ifやforが必要な場所を判断しやすくなる |
| ほかの人に説明する | 処理全体を視覚的に伝えられる |
| 間違いを探す | 処理の抜けや、終了できない流れを発見しやすくなる |
特に初心者にとって大きな利点は、C言語の制御構文との対応が見えることです。
流れ図に条件による分かれ道があれば、C言語ではifやif elseが必要になります。矢印が以前の処理へ戻っていれば、forやwhileなどの繰り返しが必要になると考えられます。
最初に覚えたい流れ図の記号
流れ図では、処理の種類ごとに異なる記号を使います。標準的な記号はJISなどで定められていますが、最初からすべてを覚える必要はありません。
まずは、使用頻度の高い次の5つを覚えるとよいでしょう。
| 記号の名前 | 一般的な形 | 役割 | 記述例 |
|---|---|---|---|
| 端子 | 角を丸くした長方形や楕円 | 処理の開始と終了を表す | 開始、終了 |
| 処理 | 長方形 | 計算や代入などの処理を表す | 合計を計算する |
| 判断 | ひし形 | 条件を判定して流れを分ける | 点数は70以上? |
| データ | 平行四辺形 | データの入力や受け渡しを表す | 点数を入力する |
| 表示 | 画面出力を表す形 | 結果やメッセージの表示を表す | 判定結果を表示する |
端子は、流れ図の始まりと終わりに配置します。どこから処理が始まり、どこで終了するのかを示す記号です。
処理記号には、加算、代入、値の更新などを記述します。
判断記号には、成立または不成立を判定できる条件を記述します。判断記号から出る矢印には、はいといいえ、真と偽などの結果を付けます。
データ記号は、キーボードからの入力や処理で使用するデータを表します。
表示記号は、計算結果や判定結果を画面に表示する処理を表します。
図2:最初に覚えたい5つの流れ図記号

この図から分かること
流れ図では、すべての処理を同じ形で表すのではなく、処理の役割に合わせて記号を使い分けます。
開始と終了には端子、計算や代入には処理、条件分岐には判断を使います。入力にはデータ、画面への出力には表示を使います。
記号の形を見るだけで、その場所が入力なのか、計算なのか、条件分岐なのかを判断できます。同じ意味の処理に同じ記号を使うことで、流れ図全体が読みやすくなります。
順次を流れ図で表す

順次は、処理を上から下へ決められた順番に実行する流れです。
たとえば、2つの数値を加算して表示する場合は、次の順番になります。
- 処理を開始する
- 2つの数値を入力する
- 2つの数値を加算する
- 加算結果を表示する
- 処理を終了する
流れ図では、開始から終了までを下向きの矢印でつなぎます。途中に分岐や戻りがないため、最も基本的な形です。
C言語でも、上に書かれた文から下へ順番に実行されます。そのため、順次の流れ図はコードの記述順と対応させやすくなります。
分岐を流れ図で表す

分岐は、条件によって実行する処理を変える流れです。
たとえば、入力された点数が70以上かどうかを判定する場合は、次の手順になります。
- 処理を開始する
- 点数を入力する
- 点数が70以上か判定する
- 条件が成立した場合は合格と表示する
- 条件が成立しない場合は再学習が必要と表示する
- 処理を終了する
判断記号からは、2本以上の矢印が出ます。それぞれの矢印には、はいといいえなどの判定結果を付けます。
この分岐は、C言語のif elseに対応します。
繰り返しを流れ図で表す

繰り返しは、同じ処理を決められた回数、または条件を満たしている間だけ実行する流れです。
たとえば、配列に保存された5個の値を表示する場合は、次の手順になります。
- 繰り返しに使用する変数を0にする
- 変数が5より小さいか判定する
- 条件が成立していれば配列の要素を表示する
- 変数を1増やす
- 条件の判定へ戻る
- 条件が成立しなくなったら処理を終了する
流れ図では、処理から以前の判断記号へ戻る矢印を描きます。
繰り返しでは、どこに戻るのかを明確にすることが大切です。また、いつか条件が成立しなくなるように、繰り返しに使用する値を正しく更新する必要があります。
点数を判定するアルゴリズムを流れ図にする
ここでは、入力された点数が70以上なら合格、70未満なら再学習が必要と表示するアルゴリズムを考えます。
最初に、文章で手順を整理します。
- 処理を開始する
- 点数を入力する
- 点数が70以上か判定する
- 70以上なら合格と表示する
- 70未満なら再学習が必要と表示する
- 処理を終了する
この手順を流れ図にすると、点数の入力にはデータ記号、70以上かどうかの判定には判断記号、判定結果の出力には表示記号を使用します。
図3:入力した点数を条件分岐で判定する流れ図

この図から分かること
開始後、最初に点数を入力します。その点数が70以上かどうかを判断記号で判定します。
70以上の場合は、はいの矢印へ進み、合格と表示します。70未満の場合は、いいえの矢印へ進み、再学習が必要と表示します。
どちらか一方の表示処理が終わると、2つの流れが合流して終了へ進みます。
この流れ図を見ると、C言語では点数を入力する処理、条件を判定するif else、結果を表示する処理が必要になることが分かります。
流れ図をC言語のプログラムに置き換える
流れ図で整理した点数判定を、C言語で実行できる形にします。
入力した点数から合否を判定するプログラム
ファイル名:7_3_1.c
#include <stdio.h>
int main(void)
{
int score;
printf("点数を入力してください。\n");
printf("点数 > ");
scanf("%d", &score);
/* 点数が70以上かどうかを判断する */
if (score >= 70) {
printf("判定結果: 合格です。\n");
} else {
printf("判定結果: 再学習が必要です。\n");
}
printf("流れ図で条件分岐の手順を整理しました。\n");
return 0;
}実行結果の例
点数として82を入力した場合は、70以上なので合格と表示されます。
点数を入力してください。
点数 > 82
判定結果: 合格です。
流れ図で条件分岐の手順を整理しました。点数として65を入力した場合は、70未満なので再学習が必要と表示されます。
点数を入力してください。
点数 > 65
判定結果: 再学習が必要です。
流れ図で条件分岐の手順を整理しました。プログラムの詳しい解説
流れ図の記号とC言語の処理は、次のように対応しています。
| 流れ図の内容 | C言語の記述 | 役割 |
|---|---|---|
| 開始 | int main(void) | main関数から処理を開始する |
| 点数を入力 | scanf("%d", &score); | 入力された整数をscoreに保存する |
| 点数は70以上? | if (score >= 70) | scoreが70以上か判定する |
| 合格と表示 | printf("判定結果: 合格です。\n"); | 条件が成立した場合の結果を表示する |
| 再学習が必要と表示 | elseとprintf | 条件が成立しない場合の結果を表示する |
| 終了 | return 0; | プログラムを正常終了する |
int score;では、入力された点数を保存するint型の変数scoreを宣言しています。
scanfでは、変換指定子%dを使って整数を読み取ります。&scoreによって、読み取った整数をscoreの保存場所へ格納します。
ifの条件はscore >= 70です。scoreの値が70以上なら条件が真になり、ifの直後にある処理が実行されます。
scoreが70未満なら条件が偽になり、elseの処理が実行されます。
| scoreの値 | score >= 70の結果 | 実行される処理 |
|---|---|---|
| 82 | 真 | 合格と表示する |
| 70 | 真 | 合格と表示する |
| 69 | 偽 | 再学習が必要と表示する |
| 65 | 偽 | 再学習が必要と表示する |
70は70以上という条件に含まれるため、合格と表示されます。比較演算子が>ではなく>=であることがポイントです。
流れ図の判断記号から出ていた2本の矢印は、ifとelseの2つの処理に対応しています。図とコードを対応させることで、条件分岐の構造を確認しやすくなります。
流れ図を作るときの注意点
開始と終了を明確にする
流れ図には、処理の開始と終了を記述します。
開始と終了がないと、どこから流れを読み始め、どこで処理が完了するのか分かりにくくなります。
特に分岐がある場合は、すべての分岐先が最後に終了へ到達するかを確認します。
基本的に上から下へ流す
流れ図は、上から下へ処理が進むように作成するのが基本です。
左右への分岐は必要ですが、不必要に上下左右へ矢印を伸ばすと、処理の方向が分かりにくくなります。
以前の処理へ戻る必要がある場合は、戻り先が分かるように矢印をはっきり描きます。
判断記号の条件を明確にする
判断記号には、真または偽を判定できる条件を記述します。
次のように、判定結果を明確にできる条件が適しています。
- 点数は70以上?
- 入力値は0?
- 繰り返し回数は5未満?
- 2つの値は等しい?
判断記号から出る矢印には、はいといいえ、または真と偽などを記述します。どちらの矢印がどの結果を表しているのかを明確にします。
同じ役割には同じ記号を使う
入力処理を長方形で表したり、別の場所では平行四辺形で表したりすると、図を読む人が迷ってしまいます。
同じ意味の処理には、同じ種類の記号を使います。
- 開始と終了には端子
- 計算や代入には処理
- 条件判定には判断
- 入力にはデータ
- 画面出力には表示
記号の使い方を統一すると、処理内容を形から判断できるようになります。
1つの記号に処理を詰め込みすぎない
1つの処理記号に多くの内容を書くと、流れ図が読みにくくなります。
たとえば、入力、計算、判定、表示を1つの長方形にまとめると、処理の順番が分かりません。
処理の役割ごとに記号を分けると、流れを追いやすくなります。
一方で、細かい処理をすべて別の記号にすると、流れ図が大きくなりすぎることがあります。その場合は、関連する処理を定義済み処理としてまとめるなど、全体を分割して考えます。
繰り返しの戻り先を明確にする
繰り返しを表す場合は、次の点を確認します。
- どの条件を判定するのか
- 条件が成立した場合に何を実行するのか
- 繰り返しに使用する値をどこで更新するのか
- どの処理へ戻るのか
- どの条件で繰り返しを終了するのか
戻り先が分からない流れ図では、繰り返しの範囲を判断できません。
また、繰り返しを終了する条件がなければ、同じ処理を続ける無限ループになる可能性があります。
流れ図を複雑にしすぎない
流れ図は処理を分かりやすくするためのものです。すべての細かい処理を1枚に詰め込むと、矢印が交差して読みにくくなります。
流れ図が大きくなりすぎる場合は、次のように分割します。
- 全体の流れを表す流れ図を作る
- 詳しい処理は別の流れ図に分ける
- 繰り返し部分を独立させる
- 共通処理を1つにまとめる
最初は、1つの順次、1つの分岐、1つの繰り返しというように、小さなアルゴリズムから練習すると理解しやすくなります。
開発現場と学習での流れ図の使い方
開発規模が大きくなると、すべての処理を1枚の流れ図にするのは難しくなります。図が大きくなり、矢印や分岐を追いにくくなるからです。
実際の開発では、処理の目的に応じて、モジュール構成を示す図やデータの関係を表す図など、ほかの設計方法も使われます。
それでも、流れ図が不要になるわけではありません。小さな処理や複雑な条件分岐を整理する場面では役立ちます。
特にC言語を学び始めた段階では、次の対応を理解するために便利です。
| 流れ図の流れ | C言語で対応するもの |
|---|---|
| 上から下へ進む処理 | 文を記述した順番に実行する |
| 条件による分岐 | if、if else |
| 回数を決めた繰り返し | for |
| 条件による繰り返し | while |
| 入力 | scanf |
| 表示 | printf |
コードを書く前に、最初は短い文章で手順を並べます。次に、その手順を流れ図にして分岐や繰り返しを確認します。最後に、流れ図の各記号をif、for、scanf、printfなどへ置き換えます。
この順番で考える習慣を付けると、いきなりコードを書き始めるよりも、アルゴリズムを落ち着いて組み立てられるようになります。
