C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はif文を用いて、入力された複数の値の中から最大値を求めるプログラムに挑戦。フローチャートも書きながら、プログラムの処理の流れをしっかり理解しましょう。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。
毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答を解説していく形式です。
では、前回の問題を振り返ってみましょう。
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); }
max3.cをコンパイル、実行すると、次のような結果が得られます。
3つの整数のうち最大値を求めるプログラムですから、正しくプログラムが動作するかを確認するために、少なくとも3回は実行してみましょう。図1の例では、入力した10、20、30の中から最大値に当たる30を求め、表示しています。
プログラムを設計するには、処理の流れに着目することが大切です。その際に役立つのが、プログラムの処理の流れを図式表現する「フローチャート」。問題3では次のようなフローチャートが考えられます。
赤字で書かれた最初の「手操作入力」の部分は、キーボードから変数a、b、cに数値を入力することを表しています。続く判断で、「a>b」の条件を満たすときにはYESの処理を実行し、満たさないときはNOの処理を実行していきます。ここは「条件によって異なる処理を実行する」いわゆる選択処理であって、C言語ではif文で記述します。
そしてaがbよりも大きい場合はさらにcとaとを比較し、それ以外ではcとbとを比較することで、a、b、cの最大値を見つけるわけです。
以上の考え方でフローチャートを作成すると、比較の対象となる変数が4つ、5つと増えていった場合を考えるとぞっとしますね。そもそも3つの数値から最大のものを選ぶには2回の比較判断を行えばいいわけで、判断が3つあるこのフローチャートは少しばかり冗長なのです。
そこで今度は、判断記号を2個しか使わない場合のフローチャートを考えてみます。
最初のフローチャートとの違いは、変数maxを使うことで比較の対象をmax1つに特定していることです。最大値を求めるアルゴリズムの場合は、こちらの方法が望ましいでしょう。
このようにプログラムをフローチャートで考えると、思考を「どんな方法で問題を解くか」に集中できるので、より効率のよいプログラムを設計できるわけです。
Copyright © ITmedia, Inc. All Rights Reserved.