if応用問題 続き

前述のプログラムの実行例を示します。

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");
}

実はこのプログラムは、もっと簡単に記述できます。
ようは、それに気が付くかです。
それには、すぐにプログラムのキー入力をせずに、
目標となるものが、なにが、どの順番に行われているかを十分に調べて検討することです。
オセロなどのゲームを行う時、安易にコマを置くと失敗すると同じです。十分に考えましょう。

何のことはなく、このプログラムは万があれば万の表示を行って、次に千があれば千の表示を行って、 次に端数があれば端数の表示を行っているのです。
説明がしやすいので、下のプログラムから作っていきます。