前述のプログラムの実行例を示します。
1回目の貯金入力>500 500円貯まりました。 2回目の貯金入力>1300 1千と800円貯まりました。 3回目の貯金入力>200 2千円貯まりました。 4回目の貯金入力>10000 1万と2千円貯まりました。 5回目の貯金入力>8200 2万と200円貯まりました。 6回目の貯金入力>1000 2万と1千円と200円貯まりました。 7回目の貯金入力>8800 3万円貯まりました。 8回目の貯金入力>0 3万円貯まりました。
このプログラムは、少し複雑に見えますが、実は次の太字にあるように
if() { } else if () { } else { }、のパターンに当てはめると容易に作れます。
大事なことは、始めに判定に使いそうな情報を、計算しておくことです。
ここでは、万の数、千の数、端数を記憶変数を用意して、計算して記憶しておいてから判定を行っています。
#include <stdio.h>
main()
{
int goukei = 0; /* 合計 */
int chokin; /* 貯金 */
int n = 0; /* 回数 */
int sen; /* 千円の貯金 */
int man; /* 万円の貯金 */
int hasuu; /* 端数 */
do {
n = n + 1;
printf("%d回目の貯金入力>", n);
scanf("%d", &chokin);
goukei = goukei + chokin;
man = goukei / 10000; //万の数
hasuu = goukei % 10000; //万の端数
sen = hasuu / 1000; // 千の数
hasuu = hasuu % 1000; //千の端数
if(man > 0){
if(sen > 0){
if(hasuu != 0){
printf("%d万と%d千と%d円貯まりました。\n", man, sen , hasuu);
} else {
printf("%d万と%d千円貯まりました。\n", man, sen );
}
} else {/* 千がない */
if(hasuu != 0){
printf("%d万と%d円貯まりました。\n", man, hasuu);
} else {
printf("%d万円貯まりました。\n", man);
}
}
} else if(sen > 0){
if(hasuu != 0){
printf("%d千と%d円貯まりました。\n", sen , hasuu);
} else {
printf("%d千円貯まりました。\n", sen );
}
} else {
printf("%d円貯まりました。\n", hasuu );
}
} while( chokin != 0) ;
printf("終了\n");
}
実はこのプログラムは、もっと簡単に記述できます。
ようは、それに気が付くかです。
それには、すぐにプログラムのキー入力をせずに、
目標となるものが、なにが、どの順番に行われているかを十分に調べて検討することです。
オセロなどのゲームを行う時、安易にコマを置くと失敗すると同じです。十分に考えましょう。
何のことはなく、このプログラムは万があれば万の表示を行って、次に千があれば千の表示を行って、
次に端数があれば端数の表示を行っているのです。
説明がしやすいので、下のプログラムから作っていきます。