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

完全マスター! 組み込みC言語プログラミング(16):【問題15】変数を制する者は関数を制する (1/3)

C言語において変数とはある値を記録して出力する機能を指しますが、「外部変数」と「再帰」の理解を深めることで、関数をより自在に扱えるようになります。

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

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

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

問題15の解答

問題15:

基数変換する関数を作ってください。引数には基数変換する整数と基数、基数変換された結果を受け取る文字列の3つを使います。


 10進数を2進数に変換するプログラムは、既に「問題7(10進数を2進数に変換するプログラム)」で登場しました。今回はその機能を拡張して、コンピュータでよく使う16進数や8進数であっても基数変換できるプログラムを紹介します。さらに基数変換をする部分を関数にしておくと、後で簡単に使い回しができます。では解答を発表します

#include <stdio.h>
 
int base;
char *p;
 
void convert(char *str, int num, int base);
void _convert(int num);
 
void main(void)
{
    int n, b;
    char str[33];
 
    printf("数値を入力してください->");
    scanf("%d", &n);
    printf("基数を入力してください->");
    scanf("%d", &b);
    convert(str, n, b);
    printf("%d進数では%sです¥n", b, str);
}
 
void convert(char *s, int num, int b)
{
    base = b;
    p = s;
    if (num == 0)
        *p++ = '0';
    else
        _convert(num);
    *p = '¥0';
}
 
void _convert(int num)
{
    static char NUM[] = "0123456789abcdef";
 
    if (num >= base) _convert(num / base);
    *p++ = NUM[num % base];
}
convert.c

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

photo
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.