#include<stdio.h>
void sub0(int, int);//林檎の合計
void sub1(int, int);//全体の合計
void sub2(int, int);//蜜柑の合計
void sub3(int, int);//割引
void sub4(int);//お買い上げ
void sub5(int, int);//割り勘システム
int kan;//-お買い上げ
int zin;//-------------割り勘
int zen;//-------------割り勘
int wari;//-----割引
int goukei;//-------蜜柑
int soukei;//-----------林檎
int wa;//-------------------全体の金額
int main(void)
{
int ringo;
int mikan;
int kazu;
int kazu02;
ringo = 100;
mikan = 60;
//入力
printf("林檎は一つ、100円です。\n");
printf("林檎はいくつ必要ですか → ");
scanf("%d", &kazu);
rewind(stdin);
//入力
printf("\n蜜柑は一つ、60円です。\n");
printf("蜜柑はいくつ必要ですか → ");
scanf("%d", &kazu02);
rewind(stdin);
//林檎の合計
sub0(kazu, ringo);
printf("\n林檎が%d個で%d円\n", kazu, soukei);
//蜜柑の合計
sub2(kazu02, mikan);
printf("蜜柑は%d個で%d円\n", kazu02, goukei);
//全体の金額
sub1(soukei, goukei);
printf("合計は%d円\n", wa);
//一割引き
sub3(soukei, goukei);
//割り勘
sub5(zen, zin);
//買い上げ
sub4(kan);
rewind(stdin);
getchar();
return 0;
}
//林檎の合計金額
void sub0(int a, int b)
{
soukei = a * b;
}
//全体の金額
void sub1(int x, int y)
{
wa = x + y;
}
//蜜柑の合計金額
void sub2(int i, int j)
{
goukei = i * j;
}
//一割引き
void sub3(int t, int o)
{
if (t + o > 2000)
{
wari = (t + o) *0.9;
printf("\n2000円を超えたので一割引き致します。\n%d円は%d円となります。\n", wa,wari);
}
}
//お買い上げ
void sub4(int kai)
{
while (1)
{
printf("\n\nお買い上げでしょうか?はい:1、いいえ:0 - ");
scanf("%d", &kai);
if (kai == 0)
{
printf("\n\n喰らえっ、神殺しの剣!");
break;
}
else if (kai == 1)
{
printf("\n\nお客様は神様です!!\n"); break;
}
}
}
//割り勘
void sub5(int mm,int x)
{
printf("\n割り勘しましょう");
printf("\n割り勘する人数 > ");
scanf("%d", &x);
if (wari > 1800)
{
printf("\n総額 %d円\n",wari);
zen = wari / x;
printf("\n1人辺り %d円\n", zen);
zen = wari % x;
if (zen > 0)
{
printf("\n残念なことに、%d円余りました。美喰色君が%d円払ってくれます。\n",zen, zen);
printf("ありがとう!\n");
}
}
else
{
printf("\n総額 %d円\n", wa);
zin = wa / x;
printf("\n1人辺り %d円\n", zin);
zin = wari % x;
if (zin > 0)
{
printf("\n%d円余りました。繭銃木ちゃんが%d円払ってくれます\n", zin, zin);
}
}
}
コンパクトに!
コンパクトに!
もっとコンパクトにしたいのですが、どのようにすればいいですか?
(管理人がcodeタグを修正しました)
Re: コンパクトに!
ショートコーディング攻略wikiミヤマエ さんが書きました:もっとコンパクトにしたいのですが、どのようにすればいいですか?
とりあえず、
- rewindの呼び出しは全て削除する
- main以外の関数の内容を全てmain関数内に展開し、main以外の関数の定義とプロトタイプ宣言を削除する
- 変数名は全て1文字にする
- コメントを全て削除する
- 無駄な空白と改行を全て削除する
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: コンパクトに!
とりあえず1箇所ですが、
下記2関数は同様の処理をしていますので、汎用的な1つの関数にするのはいかがでしょうか?
その場合、soukeiとgoukeiをグローバル変数として宣言すると、
上記2関数を1関数にまとめることができないので、main内でローカル変数として宣言し、
returnで合計金額を受け取ればよいかと思います。
e.g.
下記2関数は同様の処理をしていますので、汎用的な1つの関数にするのはいかがでしょうか?
その場合、soukeiとgoukeiをグローバル変数として宣言すると、
上記2関数を1関数にまとめることができないので、main内でローカル変数として宣言し、
returnで合計金額を受け取ればよいかと思います。
e.g.
Re: コンパクトに!
似たような場所を関数化してみてはいかがでしょうか。
//商品の個数を設定する
// item_name: 商品名
// price: 値段
// 戻り値:個数
// 使用例 kazu = input_item_count("林檎", 100);
int input_item_count(const char* item_name, int price)
{
int count;
printf("%sは一つ、%d円です。\n", item_name, price);
printf("%sはいくつ必要ですか → ", item_name);
scanf("%d", &count);
rewind(stdin);
return count;
}
オフトピック
グローバル変数を使いたくなる気持ちは分かるのですが、プログラムが大きくなるとどの場所でグローバル変数を変えているのか分かりにくくなるので最低限で使うようにしましょう。