【問題2】入力した金額からお札、硬貨の枚数を求める:完全マスター! 組み込みC言語プログラミング(3)(1/2 ページ)
C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回は、入力された金額から、お札と硬貨の枚数を計算して表示するプログラムに挑戦。3つのサンプルプログラムを基に詳しく解説します。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。
毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答を解説していく形式です。
では、前回の問題を振り返ってみましょう。
問題2「入力した金額から必要なお札、硬貨の枚数を計算」
前回の宿題(問題2):
金額を入力し、1万円札、5000円札、1000円札、500円玉、100円玉、50円玉、10円玉、5円玉、1円玉が最少でいくつ必要か表示するプログラムを作成してください。
問題2は、「入力した金額から必要なお札、硬貨の枚数を求める」問題でした。皆さんはどんなプログラムを作りましたか? 以下に、筆者が作ったプログラムを掲示します。
#include <stdio.h> int main(void) { int yen, b10k, b5k, b1k, c500, c100, c50, c10, c5, c1; printf("金額を入力してください->"); scanf("%d", &yen); b10k = yen / 10000; yen = yen % 10000; b5k = yen / 5000; yen = yen % 5000; b1k = yen / 1000; yen = yen % 1000; c500 = yen / 500; yen = yen % 500; c100 = yen / 100; yen = yen % 100; c50 = yen / 50; yen = yen % 50; c10 = yen / 10; yen = yen % 10; c5 = yen / 5; c1 = yen % 5; printf("10000円札は%d枚\n", b10k); printf(" 5000円札は%d枚\n", b5k); printf(" 1000円札は%d枚\n", b1k); printf(" 500円玉は%d枚\n", c500); printf(" 100円玉は%d枚\n", c100); printf(" 50円玉は%d枚\n", c50); printf(" 10円玉は%d枚\n", c10); printf(" 5円玉は%d枚\n", c5); printf(" 1円玉は%d枚\n", c1); return 0; }
money.cを実行すると、次のような結果が得られます。
例えば金額として1万3579円を入力すると、1万円札は1枚、5000円札は0枚、1000円札は3枚、500円玉は1枚、100円玉は0枚、50円玉は1枚、10円玉は2枚、5円玉は1枚、1円玉は4枚と表示されます。
moneyプログラムの解説
問題3で扱う数は金額とお札または硬貨の枚数なので、変数の型はintにします。
int yen, b10k, b5k, b1k, c500, c100, c50, c10, c5, c1;
では、10個のint変数を宣言しました。金額にはyenを、お札の枚数にはb10k、b5k、b1kを、硬貨の枚数にはc500、c100、c50、c10、c5、c1を使用します。
金額yenの入力は、scanf関数を使い、
printf("金額を入力してください->");
scanf("%d", &yen);
と書きます。
最初のprintf関数は入力を催促するためのものです。scanf関数で整数を入力する際には、書式指定に%dを記述してください。
入力された金額yenから、1万円札の枚数b10kを求めるには、
b10k = yen / 10000;
と書きます。C言語の整数同士の割り算では小数部は切り捨てられるため、うまく1万円札の枚数が求められます。
続いて5000円札の枚数b5kを求めるには、最初に、
yen = yen % 10000;
と書きます。%は剰余を求める演算子で、これにより1万円に満たない金額を計算するのです。そして、
b5k = yen / 5000;
と書くことで、5000円札の枚数が求められます。
後は逐次、以上の要領で1000円札、500円玉……と計算を続けていきましょう。最後に、printf関数でお札と硬貨の枚数を表示します。
Copyright © ITmedia, Inc. All Rights Reserved.