C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はfor文(繰り返し)とif文(分岐)を使い、整数を入力し、その値を2進数で表示するプログラムを作成します。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。
毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。
整数を入力し、その値を2進数で表示するプログラムを作成してください。
問題7は「整数を入力し2進数で表示する」でした。
それでは解答を発表します。
- #include <stdio.h>
- int main(void)
- {
- int n, i, b[32];
- printf("数を入力してください->");
- scanf("%d", &n);
- for (i = 0; n > 0; i++) {
- b[i] = n % 2;
- n = n / 2;
- }
- while (i > 0) printf("%1d", b[--i]);
- putchar('\n');
- }
dec2bin.cを実行すると、次のような結果になります。
C言語の「printf」の書式指定には、整数を10進数で表記する%d、16進数で表記する%x(または%X)、8進数で表記する%oがあります。ですから「整数を入力し16進数で表示する」プログラムは、
- #include <stdio.h>
- int main(void)
- {
- int n;
- printf("数を入力してください->");
- scanf("%d", &n);
- printf("%x\n", n);
- }
でいいのですが、2進数となると自分で処理を考えなくてはなりません。
10進数を2進数に変換するには、2で割って余りを求めていく方法が一般的ではないでしょうか(詳細はこちら)。問題では、人間が行うその計算をCプログラムに置き換えればよいのです。
以下にdec2bin.cのフローチャートを示します。
このプログラムには、2つの「繰返し(ループ)」があります。
最初の「繰返し」では、nを2で割りつつ2進数を求めています。結果は配列bに格納されますが、2進数の1(20)の位はb[0]に、2(21)の位はb[1]に、4(22)の位はb[2]に……のように格納されます。
C言語ではfor文を使って、次のように書かれます。
- for (i = 0; n > 0; i++) {
- b[i] = n % 2;
- n = n / 2;
- }
次の「繰返し」は、求めた2進数を表示するものです。数値は上位の桁を左に(先に)表示しなければなりません。そこでb[i]のiを1ずつ減じていき、2[0]まで表示します。
C言語ではwhile文を使って、次のように1行で書くことができます。
- while (i > 0) printf("%1d", b[--i]);
Copyright © ITmedia, Inc. All Rights Reserved.