サイトマップ / C言語講座出入り口総目次目次:再帰>10進数を16進表示

青い直線

10進数を16進表示

青い直線

[関数の再帰呼び出し]←このソース→[フィボナッチ数列 ( 再帰版 )]

/* ソースプログラムの説明

今日は、再帰呼び出しを使って10進数を 16進表示します。

関数ShowHex( )は10進整数を引数にとり、その16進数を表示します。引数は unsigned short型なので、変換結果が4桁の16進数の範囲に入れば、正常に変換します。関数ShowHex( )は、まず、xを16で割った余りをrに保存します。この操作で、xの値は変化しません。

次いで、xを16で割った結果をxに保存します。この操作で、xの値は1/16になります。xの値が16より小さいと、整数同志の除算では余りは捨てられるので、xは0になります。xが0でなければ、1/16小さい自分を再帰的に呼び出し、上記操作を繰り返します。ここで重要なのは、ソースコードの中でこの行以降はxが0になるまで実行されないということです。xが0になると、再帰的呼び出しが終わり、上の桁から画面に表示しながら戻ります。 */

/* ここからソースプログラム */

#include <stdio.h>

void ShowHex(unsigned short x);
void main(void);

void ShowHex(unsigned short x)
{
    int  r;
    r = x % 16;            /* 16で割った余りをrに保存 */
    x = x / 16;            /* x < 16 なら0になる */

    if (x > 0)             /* x が0でない限り */
        ShowHex(x);        /* 1/16小さい自分を再帰的に呼び出す */

  /* この行以降はxが0になり、再帰から戻る時実行される */

    if (r >= 0 && r <= 9)        /* rが0から9なら */
        printf("%d", r);         /* そのまま表示 */
    else if (r > 9)              /* rが9以上なら */
        putchar('A' + r - 10);   /* アルファベットに変換して表示(注) */
}

/* (注):アスキーコード表を見て下さい。 */

void main(void) { unsigned short x = 64206; /* この値を16進数表示する */ printf("x = %u\n", x); printf("x = 0X"); ShowHex(x); printf("\n"); }

/* ここまでソースプログラム */

/* 実行結果はいかがでしたか。二つの英単語(実は16進数)が表示されたはずです。 */

[関数の再帰呼び出し]←このソース→[フィボナッチ数列 ( 再帰版 )]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:再帰>10進数を16進表示