[更新日]1998.11.06
問7 次のCプログラムの説明及びプログラムを読んで、設問に答えよ。
〔プログラムの説明〕
自動販売機に投入された金額と商品の価格の差額から,釣銭として返却する各貨幣の枚数を計算するプログラムである。
(1) 商品の価格は,引数 price に格納されている。 なお,商品の価格には,10 円未満の端数はない。
(2) 投入された各貨幣の枚数は,配列 input に格納されている。 なお,投入された金額が,商品の価格を下回ることはない。
input[0]
1000円貨幣の枚数
[1]
500円貨幣の枚数
[2]
100円貨幣の枚数
[3]
50円貨幣の枚数
[4]
10円貨幣の枚数
(3) 釣銭として返却する各貨幣の枚数を,配列 output に格納する。このとき,返却する貨幣の合計枚数をできるだけ少なくする。
output[0]
(4) 自動販売機が保持している釣銭用の貨幣の枚数は,貨幣の種類別に,大域変数である配列 stock に格納される。stock[0] の初期値は 0,それ以外の stock の要素の初期値は 10 とする。
stock[0]
(5) 投入された貨幣は,次回以降の釣銭として用いるために,配列 stock に加える。
(6) 戻り値として次の値を返す。
−1:釣銭切れの場合
0:釣銭不要の場合
1:釣銭を返却する場合
(7) 釣銭切れの場合,投入された各貨幣の枚数を配列 output に格納する。
〔プログラム〕
#define TBLSIZE 5 static int money[] = {1000, 500, 100, 50, 10}, stock[] = {0, 10, 10, 10, 10}; int VendingMachine(int price, int input[], int output[]) { int change, k, paid, retval; paid = 0; for(k = 0; k < TBLSIZE; k++) { paid += input[k] * money[k]; } change = paid - price; if (change != 0) { for() { output[k] = ; if (output[k] > stock[k]) output[k] = stock[k]; change -= output[k] * money[k]; } if () { for(k = 0; k < TBLSIZE; k++) output[k] = input[k]; retval = -1; } else { for(k = 0; k < TBLSIZE; k++) stock[k] = ; retval = 1; } } else { for(k = 0; k < TBLSIZE; k++) { output[k] = 0; stock[k] += input[k]; } retval = 0; } return retval; }
設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
ア k = 0; k < TBLSIZE; k++ イ k = 1; k <= TBLSIZE; k++
ウ k = TBLSIZE - 1; k >= 0; k-- エ k = TBLSIZE; k > 0; k--
b に関する解答群
ア change イ change / input[k]
ウ change / money[k] エ change / stock[k]
オ input[k] カ money[k]
キ stock[k]
c に関する解答群
ア change < 0 イ change <= 0
ウ change == 0 エ change >= 0
オ change > 0
d に関する解答群
ア stock[k] + input[k]
イ stock[k] + output[k]
ウ stock[k] - input[k]
エ stock[k] - output[k]
オ stock[k] + input[k] + output[k]
カ stock[k] + input[k] - output[k]
キ stock[k] - input[k] + output[k]
ク stock[k] - input[k] - output[k]