連載
» 2014年11月18日 11時00分 UPDATE

完全マスター! 組み込みC言語プログラミング(13):【問題12】Cプログラムの見通しが良くなる「関数」を習得しよう! (1/2)

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。いよいよ関数に話題が移ります。関数を有効に利用できるとプログラムの見通しが良くなるので、ぜひ習得してください。

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

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

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

 今回はいよいよ関数に話題が移ります。C言語の関数(function)は、他のプログラム言語でサブルーチン(subroutine)や手続き(procedure)と呼ばれるものと同様に、「一連の処理をひとつにまとめる」機能があります。

 大きく複雑なプログラムを作るとき、処理を分割して、小さいプログラムの集まりとして作成します。その小さいプログラムの1つ1つが、C言語では関数です。関数を使うことに慣れてくると、「こんな関数があったら便利だ」と思えるものを先に書いてしまい、その関数で実行される具体的な処理の記述を後回しにして、コーディングを進めます。

 例えば問題12では、最大公約数を求める処理を関数化してgcd(Greatest Common Divisor)とすると、たとえ最大公約数を求める方法が分からなくても、

void main(void)
{
    int a, b, c;
 
    printf("数を入力してください->");
    scanf("%d", &a);
    printf("数を入力してください->");
    scanf("%d", &b);
    c = gcd(a, b);
    printf("最大公約数は%dです¥n", c);
}

 とプログラムが書けてしまいます。

 これは関数「gcd」が最大公約数を求める処理をブラックボックス化してくれるからで、関数を有効に使うとプログラムの見通しが良くなります。

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

問題12:

2つの引数の最大公約数を返す関数 gcd(Greatest Common Divisor)を作り、それを使ってキーボードから入力した2数の最大公約数を表示します。



問題12の解答

 前置きが長くなりましたが、問題12のプログラム例を以下に示します。

#include <stdio.h>
 
int gcd(int, int);
 
void main(void)
{
    int a, b, c;
 
    printf("数を入力してください->");
    scanf("%d", &a);
    printf("数を入力してください->");
    scanf("%d", &b);
    c = gcd(a, b);
    printf("最大公約数は%dです¥n", c);
}
 
int gcd(int a, int b)
{
    int w;
 
    if (a < b) {
        w = a;
        a = b;
        b = w;
    }
    while (b != 0) {
        w = a % b;
        a = b;
        b = w;
    }
    return a;
}
gcd.c

 gcd.cを実行すると、次のような結果になります。

photo
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.