前述のプログラムの実行例を示します。
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"); }
実はこのプログラムは、もっと簡単に記述できます。
ようは、それに気が付くかです。
それには、すぐにプログラムのキー入力をせずに、
目標となるものが、なにが、どの順番に行われているかを十分に調べて検討することです。
オセロなどのゲームを行う時、安易にコマを置くと失敗すると同じです。十分に考えましょう。
何のことはなく、このプログラムは万があれば万の表示を行って、次に千があれば千の表示を行って、
次に端数があれば端数の表示を行っているのです。
説明がしやすいので、下のプログラムから作っていきます。