連載
» 2014年05月21日 10時00分 UPDATE

完全マスター! 組み込みC言語プログラミング(4):【問題3】「選択処理」とif文を理解しよう (1/2)

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はif文を用いて、入力された複数の値の中から最大値を求めるプログラムに挑戦。フローチャートも書きながら、プログラムの処理の流れをしっかり理解しましょう。

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
alt

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答を解説していく形式です。

 では、前回の問題を振り返ってみましょう。



問題3「入力された値の中から最大値を表示」

前回の宿題(問題3):

3つの整数を入力し、最も大きい数を表示するプログラムを作成しましょう。


 問題3は、「入力された3つの整数の最大値を求める」問題でした。皆さんはどんなプログラムを作りましたか? 以下に、筆者がif文を使って作成したプログラム例を掲示します。


#include <stdio.h>
int main(void)
{
    int a, b, c, max;
    printf("3つの整数を入力してください->");
    scanf("%d%d%d", &a, &b, &c);
    if (a > b) {
        max = a;
    }
    else {
        max = b;
    }
    if (c > max) {
        max = c;
    }
    printf("最大値は%dです。\n", max);
}
 
プログラム1 「max3.c」

 max3.cをコンパイル、実行すると、次のような結果が得られます。

図1 図1 「max3.c」を実行

 3つの整数のうち最大値を求めるプログラムですから、正しくプログラムが動作するかを確認するために、少なくとも3回は実行してみましょう。図1の例では、入力した10、20、30の中から最大値に当たる30を求め、表示しています。

フローチャートでプログラムを考えよう

 プログラムを設計するには、処理の流れに着目することが大切です。その際に役立つのが、プログラムの処理の流れを図式表現する「フローチャート」。問題3では次のようなフローチャートが考えられます。

図2 図2 「max3.c」のフローチャート(※赤字はフローチャート記号の意味を示す)

 赤字で書かれた最初の「手操作入力」の部分は、キーボードから変数a、b、cに数値を入力することを表しています。続く判断で、「a>b」の条件を満たすときにはYESの処理を実行し、満たさないときはNOの処理を実行していきます。ここは「条件によって異なる処理を実行する」いわゆる選択処理であって、C言語ではif文で記述します。

 そしてaがbよりも大きい場合はさらにcとaとを比較し、それ以外ではcとbとを比較することで、a、b、cの最大値を見つけるわけです。

比較対象の変数が4つ以上の場合はどうする?

 以上の考え方でフローチャートを作成すると、比較の対象となる変数が4つ、5つと増えていった場合を考えるとぞっとしますね。そもそも3つの数値から最大のものを選ぶには2回の比較判断を行えばいいわけで、判断が3つあるこのフローチャートは少しばかり冗長なのです。

 そこで今度は、判断記号を2個しか使わない場合のフローチャートを考えてみます。

図3 図3 判断記号を2個しか使わないフローチャート

 最初のフローチャートとの違いは、変数maxを使うことで比較の対象をmax1つに特定していることです。最大値を求めるアルゴリズムの場合は、こちらの方法が望ましいでしょう。

 このようにプログラムをフローチャートで考えると、思考を「どんな方法で問題を解くか」に集中できるので、より効率のよいプログラムを設計できるわけです。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.