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

平成25年 春期 基本情報技術者 午後 問09
問09   C言語

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

〔プログラムの説明〕

 ケーブルテレビ局を運営するU社では,有線テレビ視聴サービスと インターネット接続サービスを提供している。

(1) 有線テレビ視聴サービスでは,有線テレビ基本視聴契約(以下,基本視聴契約という)を 結ぶと視聴できる基本放送チャンネル,及び基本視聴契約に加えて有料放送視聴契約を 結ぶと視聴できる有料放送チャンネルを提供している。

(2) 基本視聴契約にはプラン1,プラン2の2種類があり,プラン2を選ぶと毎月の 基本視聴料金はプラン1よりも高くなるが,有料放送視聴料金は割安になる。 毎月の基本視聴料金は,表1のとおりである。

    表1 基本視聴料金表(月額)
  基本視聴契約   基本視聴料金 
 プラン1    3,000円
 プラン2    5,000円

(3) 毎月の有料放送視聴料金は,基本視聴契約のプランと視聴契約する有料放送の チャンネル数によって決まる。

(4) 基本視聴料金と有料放送視聴料金の合計を,有線テレビ視聴料金という。

(5) インターネット接続サービスは,インターネット接続契約を結ぶと利用できる。 インターネット接続サービスでは,低速回線と高速回線の2種類を提供している。 毎月のインターネット接続サービス利用料金は,基本視聴契約の有無, プランの種類によって変わってくる。毎月のインターネット接続サービス利用料金は, 表2のとおりである。

   表2 インターネット接続サービス利用料金表(月額)
   インターネット接続契約 
 低速回線   高速回線  
 基本視聴契約     なし   3,000円   6,000円 
 プラン1   2,500円   6,000円 
 プラン2   2,500円   5,000円 

(6) 毎月の利用料金は,有線テレビ視聴料金とインターネット接続サービス利用料金の合計である。

(7) 関数 calc_service_fee は,毎月の利用料金を求めるプログラムである。 引数及び返却値は,次のとおりである。引数に誤りはないものとする。

 引数: basic_plan 基本視聴契約
( 0 :なし,1 :プラン1,2 :プラン2)
  channel_num
inet_plan
視聴契約する有料放送のチャンネル数
インターネット接続契約
( 0 :なし,1 :低速回線,2 :高速回線)
 返却値: 毎月の利用料金 

〔プログラム〕

(行番号)

 1 #define BLKNUM 4

 2           /* 基本視聴料金,0 は契約なしの場合 */
 3 const int basic_charge[] = {0, 3000, 5000},
 4           channel_block[BLKNUM] = {1, 3, 6, 10},
 5           channel_charge[2][BLKNUM] = {{1500, 1000, 700, 500},
 6                                        {1000,  800, 600, 400}};
 7           /* インターネット接続サービス利用料金,
 8              0 は契約なしの場合 */
 9 const int inet_charge[] = {0,2500,3000,5000,6000}

10 int calc_service_fee(int, int, int);

11 int calc_service_fee(int basic_plan, int channel_num,
12                      int inet_plan) {
13     int tv_fee, inet_fee;
14     int cnum, i;
15     /* 有線テレビ視聴料金 tv_fee を求める */
16     tv_fee = basic_charge[basic_plan];
17     if (basic_plan > 0) {
18         for (i = BLKNUM - 1; i >= 0; i--) {
19              cnum = channel_num - channel_block[i] + 1;
20              if (cnum < 0) {
21                  cnum = 0;
22              }
23              channel_num -= cnum;
24              tv_fee += cnum * channel_charge[basic_plan - 1][i];
25         }
26     }

27     /* インターネット接続サービス利用料金 inet_fee を求める */
28     if (inet_plan ==  ) {
29         inet_fee = inet_charge[0];
30     } else if (inet_plan ==  ) {
31         if (basic_plan != 0) {
32             inet_fee = inet_charge[1];
33         } else {
34             inet_fee = inet_charge[2];
35         }
36     } else {
37         if (basic_plan  ) {
38             inet_fee = inet_charge[3];
39         } else {
40             inet_fee = inet_charge[4];
41         }
42     }

43     return tv_fee + inet_fee;
44 }

設問1 有線テレビ視聴料金に関する次の記述中の に 入れる正しい答えを,解答群の中から選べ。

(1) calc_service_fee(1,6, 0) を実行した場合,行番号 23 が2回目に実行 されるときの変数 cnum の値 となり,3回目に実行されるときの 変数 cnum の値は となる。また,行番号 43 が実行されるときの 変数 tv_fee の値は となる。

(2) 基本視聴契約がプラン1で有料放送6チャンネル分の視聴契約をする場合の有線テレビ視聴料金と, 基本視聴契約がプラン2で有料放送6チャンネル分の視聴契約をする場合の有線テレビ視聴料金を 比較した場合,

a,b に関する解答群

ア 0       イ 1      ウ 2        エ 3

オ 4       カ 5       キ 6       ク 10

c に関する解答群

ア 6600       イ 7200       ウ 8000       エ 9700

d に関する解答群

ア どちらのプランでも有線テレビ視聴料金は等しい

イ プラン1での有線テレビ視聴料金の方が高い

ウ プラン2での有線テレビ視聴料金の方が高い

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

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

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

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

基本情報技術者試験


設問2 プログラム中の に入れる正しい答えを, 解答群の中から選べ。ただし,e1 と e2 に入れる答えは,e に関する解答群の中から 組合せとして正しいものを選ぶものとする。

e に関する解答群

  e1  e2 
 ア   0   1 
 イ   0   2 
 ウ   1   0 
 エ   1   2 
 オ   2   0 
 カ   2   1 

f に関する解答群

ア == 0       イ == 1       ウ == 2

エ != 0       オ != 1       カ != 2

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

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


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