間違っていても責任は負いません。
デバッグに協力してください。(笑い)
#include
void calcbunkatu();
void calcribo();
int main(void) {
int mode;
int onemore;
puts("クレジットカードの支払額を計算します。");
puts("実際の支払額と違っていても責任は負いません。");
start:
puts("モードを選んでください。");
puts("0:分割払い");
puts("1:リボルビング");
puts("2:終了");
printf(">");
scanf("%d",&mode);
calc:
if(mode==0)calcbunkatu();
else if(mode==1)calcribo();
else if(mode==2)return 0;
else {
puts("まじめに入力してください。");
goto start;
}
calcato:
puts("もう一度やりますか?");
puts("0:同じモードでもう一回");
puts("1:モードを選びなおす");
puts("2:終了");
printf(">");
scanf("%d",&onemore);
if(onemore==0)goto calc;
else if(onemore==1)goto start;
else if(onemore==2)return 0;
else {
puts("まじめに入力してください。");
goto calcato;
}
return 0;
}
void calcbunkatu() {
double tesuuryou;
int daikin;
int sougaku;
int kaisuu;
int ikkaiatari;
int harautesuuryou;
printf("商品の価格(円)を入力してください。\n>");
scanf("%d",&daikin);
printf("100円あたりの手数料(円)を入力してください。\n>");
scanf("%lf",&tesuuryou);
printf("何回払いですか?\n>");
scanf("%d",&kaisuu);
harautesuuryou=daikin*tesuuryou/100;
sougaku=daikin+harautesuuryou;
ikkaiatari=sougaku/kaisuu;
ikkaiatari-=ikkaiatari%100;
printf("手数料:%d円\n",harautesuuryou);
printf("支払う総額:%d円\n",sougaku);
printf("1回目に払う金額:%d円\n",sougaku-ikkaiatari*(kaisuu-1));
printf("2回目以降に払う金額:%d円\n",ikkaiatari);
}
void calcribo() {
int nokori;
double nenritu;
int tesuuryou;
int ikkaiatari;
int nankai;
int kaesu;
int sougaku;
int displog;
printf("商品の価格(円)を入力して下さい。\n>");
scanf("%d",&nokori);
printf("1回に払う金額(円)を入力して下さい。\n>");
scanf("%d",&ikkaiatari);
printf("実質年率(%)を入力して下さい。\n>");
scanf("%lf",&nenritu);
printf("詳細なログを出力しますか?\n");
printf("0:出力しない 0以外の整数:出力する\n>");
scanf("%d",&displog);
nankai=0;
sougaku=0;
while(nokori>=0) {
nankai++;
tesuuryou=nokori*nenritu/100/12;
kaesu=ikkaiatari-tesuuryou;
sougaku+=ikkaiatari;
nokori-=kaesu;
if(displog)
printf("%d回目 手数料:%d円 返済額:%d円 残額:%d円\n",
nankai,tesuuryou,kaesu,nokori);
if(kaesu<=0) {
puts("返済額が0かマイナスです。");
puts("無限ループの可能性があるため処理を中止します。");
return;
}
}
printf("%d回目で返し終わりました。\n",nankai);
printf("支払い総額:%d円\n",sougaku);
}