東京理科大学 infoserv[更新日]1999.04.30


次の問11から問14までの4問については,この中から1問を選択し,
答案用紙の選択欄のを マークして解答してください。
 なお,2問以上選択した場合には,はじめの1問について採点します。

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

〔プログラムの説明〕

乗車駅から降車駅までの運賃を計算し,結果を返却値として返すプログラムである。

(1) 乗車駅,降車駅の名前は,引数 from,to に入れてプログラムに渡す。

(2) 運賃の計算には,運賃距離を用いる。運賃距離は,駅間ごとに決まっている重みを 用いて,実距離×重みで計算する。

(3) 乗車駅から降車駅までの運賃距離は,関数 ceil を用いて,小数点以下を切り上げる。

(4) 距離運賃表(構造体 FARE の配列)及び重み表は,それぞれグローバル変数
dist_fare,weight に格納されている。

(5) 構造体 FARE の構造は,次のとおりである。

      typedef struct {
          int      dist;      /*運賃距離を適用する上限(km)*/
          int      cost;      /*1km 単位の運賃*/
      } FARE;

 cost は,最初の要素を除いて,直前の要素の dist の値を超える距離に対して 適用される。

(6) 駅間の実距離及び重みは,駅名表(構造体 STATION の配列)として引数 line に 入れてプログラムに渡す。

(7) 構造体 STATION の構造は,次のとおりである。

      typedef struct {
          char     *name;      /*駅名*/
          int      dist;       /*隣駅との実距離(km)*/
          int      rank;       /*重み表の添え字の値*/
      } STATION;

 dist には,最後の要素を除いて,直後の要素(駅)との距離が格納される。最後の 要素には,0 が格納される。

(8) from と to は一致しない。また,駅名表の並びで,from は to より前にある。

(9) 運賃距離は,100km を超えることはない。

〔プログラム〕
 
(行番号)
01 #include <math.h>
02 #include <string.h>
03 #define MAX_DIST 100
 
04 typedef struct { char *name; int dist; int rank; } STATION;
05 typedef struct { int dist; int cost; } FARE;
 
06 static FARE dist_fare[] = {{0, 100}, {5, 50}, {20, 40},
07                            {40, 30}, {70, 20}, {MAX_DIST, 10}};
08 static double weight[] = {1.0, 1.1, 1.2, 1.5, 2.0};
 
09 int CalculateFare(char *from, char *to, STATION line[])
10 {
11     int dif, distx, farex, i;
12     double distf;
 
13     i = 0; 
14     while(strcmp(from, line[i].name) != 0)
15         i++;
16     distf = line[i].dist * weight[line[i].rank];
17     i++;
18     while(strcmp(to, line[i].name) != 0){
19         distf += line[i].dist * weight[line[i].rank];
20         i++;
21     }
22     distx = ceil(distf);
 
23     farex = dist_fare[0].cost;
24     for(i = 1; distx > dist_fare[i - 1].dist; i++) {
25         if(distx <= dist_fare[i].dist)
26             dif = distx;
27         else
28             dif = dist_fare[i].dist;
29         farex += (dif - dist_fare[i - 1].dist) * dist_fare[i].cost;
30     }
 
31     return farex;
32 }

設問 次の記述中の に入れる正しい答えを,解答群の中から選べ。

  static STATION linea[] = {{"a", 5, 0}, {"b", 6, 2}, {"c", 11, 1},
                            {"d", 8, 4}, {"e", 7, 3}, {"f",  0, 0}};
  main() {
      int fare;
      fare = CalculateFare("a", "f", linea);
  }

このプログラムを実行した場合, 19 行目は 回実行される。そして, 22 行目で求められた distx の値は になり,25 行目は 回実行される。その結果, 運賃 fare は になる。

a,c に関する解答群

ア 0    イ 1    ウ 2    エ 3    オ 4

カ 5    キ 6

b に関する解答群

ア 25    イ 29    ウ 37    エ 48    オ 51

d に関する解答群

ア 1,120    イ 1,630    ウ 1,770    エ 2,140    オ 2,650


東京理科大学 infoserv 戻る 次頁:問12