基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成19年 秋期 基本情報技術者 午後 問10
問10   C言語

次の C プログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

 関数 calc_carriage は,直方体の配送物の配送種別及び配送料金を求めるプログラムである。

(1) 関数 calc_carriage の引数は,次のとおりである。
 weight: 配送物の重量(単位はグラム)
 size: 配送物の大きさ(縦,横,高さの合計,単位は cm )
 dist_mode: 配送先までの距離区分(0: 近距離,1: 中距離,2: 遠距離)
 class: 配送種別
 price: 配送料金(単位は円)

(2) 配送種別は,配送物の重量及び大きさから,1, 2, 3, -1, -2 のいずれか一つの値に定まる。 配送種別が -1 又は -2 の配送物は,受け付けない。

(3) 配送料金は,配送種別ごとに用意された計算式によって求められる。

〔プログラム〕

#define NUM1 3
#define NUM2 4
#define NUM3 3

                         /* 各重量範囲での上限重量(規定サイズ内) */
const int Weight_tbl1[NUM1] = {25, 60, 100},
          Price_tbl[NUM1]   = {50, 80, 150};

                         /* 各重量範囲での上限重量(規定サイズ外) */
const int Weight_tbl2[NUM2] = {50, 100, 500, 1000};

const int Size_tbl [NUM3]   = {60, 100, 150},
          Mag_tbl [NUM3]    = {1, 3, 4};

const int Min_size = 20, Max_size = 40, Max_weight = 10000;
const int Unit_price = 2, Base_price = 600, Ext_price = 100;

void calc_carriage(int, int, int, int *, int *);

void calc_carriage(int weight, int size, int dist_mode, 
                   int *class, int *price){
   int i;

   if(weight <= Weight_tbl2[NUM2 - 1]){
      if((size >= Min_size) && (size <= Max_size) &&
                (weight <= Weight_tbl1[NUM1 - 1])){
          *class = 1;
          for(i = 0; weight > Weight_tbl1[i]; i++);
          *price = Price_tbl[i];
      }else{
          *class = 2;
          for(i = 0; weight > Weight_tbl2[i]; i++);
          *price = Weight_tbl2[i] * Unit_price;
      }
   }else if(weight <= Max_weight){
      if(size <= Size_tbl[NUM3 - 1]){
          *class = 3;
          for(i = 0; size > Size_tbl[i]; i++);
          *price = (Base_price + dist_mode * Ext_price) * Mag_tbl[i];
      }else{
          *class = -1;
          *price = 0; 
      }
   }else{
      *class = -2;
      *price = 0;
   }
}

設問1 重量が 1,000 グラム( Weight_tbl2[NUM2 - 1] )を超えて 10,000 グラム ( Max_weight )以下の配送物の配送料金は表のとおりになる。表中の に 入れる正しい答えを,解答群の中から選べ。

表 重量が 1,000 グラムを超えて 10,000 グラム以下の配送物の配送料金

  注 網掛けの部分は,表示していない。
解答群 ア 1,600       イ 1,750       ウ 1,900       エ 2,100       オ 2,300
解答 a ←クリックすると正解が表示されます

基本情報技術者試験


設問2 配送種別及び配送料金に関する次の記述中の に入れる正しい答えを, 解答群の中から選べ。

(1) 重量 600 グラム,大きさ 180cm の配送物を送る場合, 配送種別は となる。

(2) 重量 3,000 グラム,大きさ 180cm の配送物を送る場合, 配送種別は となる。

(3) 重量 12,000 グラム,大きさ 180cm の配送物を送る場合, 配送種別は となる。

(4) 重量 80 グラム,大きさ 30cm の配送物を中距離の場所に送る場合, 配送料金は 円となる。

(5) 重量 400 グラム,大きさ 30cm の配送物を中距離の場所に送る場合, 配送料金は 円となる。

b〜d に関する解答群

ア −2      イ −1       ウ 1       エ 2       オ 3

e,f に関する解答群

ア 80       イ 150       ウ 250
エ 500       オ 1,000       カ 2,000
解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]