電子書籍の厳選無料作品が豊富!

以下のプログラミングで質問です。
以下のプログラミングはscanfで入力した値に消費税(1.05)して、10万円-出力結果(消費税含み)
の合計金額のお釣りの枚数を表示してます。この処理に以下のプログラムを追加したいのですが分かりません。どなたか教えて頂けますか?
五百円玉=1or0 入力 五十円玉=1or0 入力
1=有り 0=無し
1&1のとき500円玉、50円玉を使ってお釣りを支払う。
1&0のとき50円玉は使わない 0&1のとき500円玉は使わない
0&0のときどちらも使わない。
#include <stdio.h>
int main(void)
{
int i;
int buy;
int turi, maisu;
intcoin_500;
intcoin_50;

printf("購入金 = ");
scanf("%d",&i);
buy=i*1.05;
printf("支払額 = %.d\n",buy);
turi = (100000-buy);
printf("おつり = %.d\n",turi);

printf("五百円玉 = ");
scanf("%d",&coin_500);
printf("五十円玉 = ");
scanf("%d",&coin_50);

// 一万円札の枚数を求める //
maisu = turi / 10000;//おつりの金額に10000円で割った値
printf( "一万円 = %d\n",maisu );

// 千円札の枚数を求める //
turi = turi % 10000;//おつりの金額を10000円で割った余りの値
maisu = turi / 1000;//余りの値を1000で割った数
printf( " 千円 = %d\n",maisu );

// 五百円玉の枚数を求める //
turi = turi % 1000;
maisu = turi / 500;
printf( "五百円 = %d\n",maisu );

// 百円玉の枚数を求める //
turi = turi % 500;
maisu = turi / 100;
printf( " 百円 = %d\n",maisu );

// 五十円玉の枚数を求める //
turi = turi % 100;
maisu = turi / 50;
printf( "五十円 = %d\n",maisu );

// 十円玉の枚数を求める //
turi = turi % 50;
maisu = turi / 10;
printf( " 十円 = %d\n",maisu );

// 一円玉の枚数を求める //
maisu = turi % 10;
printf( " 一円 = %d\n",maisu );
}

A 回答 (3件)

まず、それぞれの処理を独立させましょう。


今の書き方だと、


// 五十円玉の枚数を求める //
turi = turi % 100;
maisu = turi / 50;
printf( "五十円 = %d\n",maisu );

の最初の行は、実は、100円玉の処理です。
これに対して、

// 五十円玉の枚数を求める //
maisu = turi / 50;
printf( "五十円 = %d\n",maisu );
turi = turi % 50;

とすると、この3行は完全に50円玉の処理になります。

それぞれの処理が独立しましたから、

if (coin_50 == 1)
{
// 50円玉の処理
}

のようにすれば、どの金種でも事由に禁止・許可できます。
    • good
    • 0

どの質問も同じようなタイトルを付けられていますが、


何となくもう一工夫あってもいいのではないか、などと思っています。

小学生が作文を書いたとき、「これは作文です」なんていうタイトルを付けるでしょうか?
「中身をぜひ読んでみたい!」と思わせるようなタイトルを付ける方が
得策ではないかなぁ、なんて思います。
    • good
    • 0

ループを使わないで処理されている分、かなり力技な感じもしますが、それがかえってシンプルで分かり易いですね。



難しく考えずに、500円玉、50円玉で支払うかどうかのフラグをそれぞれ用意しておいて、

500円玉、50円玉の枚数をカウントする処理をスキップしてあげる、と共に、
そのすぐ下の100円玉、10円玉をカウントする処理もそのフラグによって
turi = turi % 500 か turi = turi % 1000 にするかの条件文を入れてあげれば、良いかと思います。

もし、500円玉フラグが1ならば、
    1000円の枚数計算後のお釣りから、500円玉の枚数を計算
    500円玉の枚数計算後のお釣りから、100円玉の枚数を計算
そうでなければ、
    1000円の枚数計算後のお釣りから、100円玉の枚数を計算

50円玉も同様ですね。



もう少しだけすっきりさせるなら、枚数計算した時にお釣りも計算させて、その次の処理に渡してあげる方がすっきりします。

1000円の枚数計算
お釣りの更新


もし、500円玉フラグが1ならば、
   500円玉の枚数計算 と お釣りの更新

100円玉の枚数計算
お釣りの更新




もし、余力があれば、1000円、500円、100円…などお釣りの種類を配列化して、ループで計算する方法にも挑戦してみると、かなりすっきりすると思います。

ご参考に。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!