c言語のプログラミングのしかたを教えてください。
実は、学校の授業でプログラミングの課題が出たのですがどうしてもわかりません。なので、教えてください。問題・キーボードから日本円を入力し、ドルに変換した後、ドルを100ドルなどの紙幣とコインに割り振りなさい。
ただし1ドル115円とする。また、日本円が0円の時にプログラムを終了する。
こういう問題です。また、このプログラムは、1次元配列、for文、if文、while文、do~while文、printf、scanfしか使えず、main()で()の中は空欄です。
もしわかる方がいたら教えてください。
回答(1)
1.

惜しいところまでいってます。改善点を書きます。
1.紙幣と硬貨は同時に計算できない
ここが一番の問題です。1ドルを下回ってから小銭を計算しないとロジックがおかしくなります。ちょろまかしちゃダメw方法ですが、紙幣と硬貨は分けないで、統一的に扱う方が、いいと思います。最小単位はセントなので、予めセントにしておきます。
money = (int)( (double)money *100 / 120.48 ) ;(現在のレートはこのくらいのようです。実はキャストはなしでも結果は同じなのですが、型に気をつけてほしいのでくどく書きました。)
従って、金種は次のようになります。
kinshu[]={10000,5000,2000,1000,500,200,100,50,25,10,5,1};
こうすれば、floatを回避できますし、同じ繰り返しだけで、セントまで計算できます。表示だけ分けてやればOK。2.「0」が入力されたときに終了
読み込んだ後で、
if(money==0)return 0;とすれば、終了できます。Cでは、mainも関数ですので、returnすればmain関数から抜けて、呼び出したシステムに0が返されます。0は正常終了の意味ですが、もし、int mainではなく、void mainまたは単にmainで始めた場合、return;だけになります。なお、exitでも構いません。
3.生の数字は、defineして使う
これはプログラムマナーです。レートは外から与えられるべき定数ですので、プログラム冒頭で、
#define CURRENCY 120.48としておいて、
money = (int)( (double)money *100 / CURRENCY ) ;のように使いましょう。
わからなければコメントして頂ければ答えます。がんばって下さい^^
とてもわかりやすく、勉強になりました。
おかげでちゃんとプログラムすることができました。
とにかく自分で考えることが大切だと学びました。
本当にたすけていただいてありがとうございました。
コメント(5)
C苦手・・・
ポインタは分かるんですが・・・
どこがわからないですか?できたところまでコードを提示して頂ければ完成のお手伝いはします。自分で組まないとできるようにはならないですよ。
処理の流れは、次のようになります。
1.標準入力から整数を読み込む
2.ドルに換算する
3.紙幣・貨幣に振り分ける
→例えば、$120なら、100で割った商1が$100の枚数で、余り20はさらに振り分けにかけることになります。
4.結果を表示して終了
ドルにわけることはできました。ただ、セントにもわけたのですが、なぜか10セント足りないように振りわけられています。
私の作ったものは、
printf("kingaku ");
scanf("%d, &money);
money = money / 115;
for(i=0; i<=6; i++)
{
n[i] = money / kinshu[i];
money= money % kinshu[i];
k[i] = money / kin[i];
}
for(printf("\n"), i=0; i<=6; i++)
printf("\\%-3d%3d Mai \n",kinshu[i],n[i]);
for(printf("\n"), i=0; i<=4; i++)
printf("\\%1.0f%3d Mai \n",kin[i],k[i]);
}
です。
ちなみに、kinshu[ ]は、ドルの値が、kin[ ]はセントの値が入ってfloatにしてあり、intはn[7],
i,money,k[5]で作ってあります。
どうしたら、セントにわり振れますか?
また、円で、0をいれたときにプログラムを終了させるにはどうしたらいいのでしょう。
教えてください。でも、自分でもいろいろとがんばって取り組んでみます。
ベストありがとうございます。
すばやい解決、すばらしいです。




