ページ 11

お金の計算のプログラム

Posted: 2010年4月19日(月) 18:01
by koose
環境はOS:unix コンパイラ:gccです。
最近、プログラムを始めたところです。

大学の課題でお金の計算をするプログラムを作っています。
完成型としては、
19867円
10000円1枚
5000円1枚
2000円2枚
1000円0枚
500円1枚
100円3枚
50円1枚
10円1枚
5円1枚
1円2枚

という形にしたいのですが、下のプログラムだと何故か計算がおかしくなります。

#include<stdio.h>
main()
{
int x;
int a,b,c,d,e,f,g,h,i,j;

a=x/10000;
b=(x-a*10000)/5000;
c=(x-a*10000-b*5000)/2000;
d=(x-a*10000-b*5000-c*2000)/1000;
e=(x-a*10000-b*5000-c*2000-d*1000)/500;
f=(x-a*10000-b*5000-c*2000-d*1000-e*500)/100;
g=(x-a*10000-b*5000-c*2000-d*1000-e*500-f*100)/50;
h=(x-a*10000-b*5000-c*2000-d*1000-e*500-f*100-g*50)/10;
i=(x-a*10000-b*5000-c*2000-d*1000-e*500-f*100-g*50-h*10)/5;
j=(x-a*10000-b*5000-c*2000-d*1000-e*500-f*100-g*50-h*10-i*5)/1;

scanf("%d円",&x);

printf("10000円%d枚\n",a);
printf("5000円%d枚\n",b);
printf("2000円%d枚\n",c);
printf("1000円%d枚\n",d);
printf("500円%d枚\n",e);
printf("100円%d枚\n",f);
printf("50円%d枚\n",g);
printf("10円%d枚\n",h);
printf("5円%d枚\n",i);
printf("1円%d枚\n",j);

}

どうすればいいのでしょうか?教えてください。

Re:お金の計算のプログラム

Posted: 2010年4月19日(月) 18:07
by hoge
scanf を6行目に移動する。

Re:お金の計算のプログラム

Posted: 2010年4月19日(月) 18:21
by koose
hogeさん、本当にありがとうございます。
ちゃんと計算出来ました。
でも、何故scanfが下にあるとだめなのでしょうか?

Re:お金の計算のプログラム

Posted: 2010年4月19日(月) 18:38
by softya
代わりに答えますね。
C言語の命令は常に上から逐次実行(順番に実行)です。
なので、kooseさんのプログラムでは、xの値が入力される前にxを使って計算していた事になります。
この場合xは不定ですので、計算結果も不定です。

Re:お金の計算のプログラム

Posted: 2010年4月19日(月) 21:55
by koose
なるほど。softyaさん、わかりやすい説明ありがとうございます。
勉強になりました。

Re:お金の計算のプログラム

Posted: 2010年4月19日(月) 22:10
by 初級者
変数には意味のある名前を付けましょう。


#include <stdio.h>

int main(void)
{
int kingaku;
int yen10000, yen5000, yen2000, yen1000, yen500;
int yen100, yen50, yen10, yen5, yen1;

printf("何円ですか? "), scanf("%d", &kingaku);

yen5000 = kingaku % 10000, yen10000 = kingaku / 10000;
yen2000 = yen5000 % 5000, yen5000 /= 5000;
yen1000 = yen2000 % 2000, yen2000 /= 2000;
yen500 = yen1000 % 1000, yen1000 /= 1000;
yen100 = yen500 % 500, yen500 /= 500;
yen50 = yen100 % 100, yen100 /= 100;
yen10 = yen50 % 50, yen50 /= 50;
yen5 = yen10 % 10, yen10 /= 10;
yen1 = yen5 % 5, yen5 /= 5;

printf("%d円\n", kingaku);
printf("10000円%d枚\n", yen10000);
printf("5000円%d枚\n", yen5000);
printf("2000円%d枚\n", yen2000);
printf("1000円%d枚\n", yen1000);
printf("500円%d枚\n", yen500);
printf("100円%d枚\n", yen100);
printf("50円%d枚\n", yen50);
printf("10円%d枚\n", yen10);
printf("5円%d枚\n", yen5);
printf("1円%d枚\n", yen1);
return 0;
}