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.