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

問11 次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 [プログラムの説明] 湯沸かしポットの湯温変化のシミュレーションを行うプログラムである。このプ ログラムでは,保温温度の基準値(KEEPTEMP の値)をもとにシミュレートし,秒単位 で湯温を計算して,経過時間,湯温及び湯量を印字する。 プログラムの前提条件は,次のとおりである。 1. ポットが置かれている室内の温度は,常に20℃(一定)とする。 2. ポット内の最初の湯温及びポットへ追加する場合の湯温は,20〜100℃の 範囲にあるものとする。 3. ポット内の湯温は,時間の経過と共に自然に下がっていくが,20℃よりも 下がることはない。 4. ポット内の湯温は,100℃(沸騰温度)を超えることはない。 5. プログラムに対する操作指示(強制的な湯沸かし,湯の取出し,湯の注入, シミュレーションの終了)は,ファイルinput.datから読み込む。このファイ ル中には,シミュレーションを終了するための操作指示が必ず含まれている ものとし,操作指示の記述は誤りがないものとする。また,同一時刻の操作 指示は一つに限る。 6. プログラム中のFUTTENは沸騰温度(℃)を,CAPACITYはポットの容量(ml) を示している。 7. プログラム中で使用している関数の仕様は,次のとおりである。 (1) 湯沸かし関数 temp_up 《形式》 double temp_up( int vol, double curtemp ); 《機能》 ポット内の湯沸かし機能をシミュレートする。 ポット内の湯量と湯温をもとにして,1秒後の湯温の値を返す。 《引数》 int vol ポット内の現在の湯量(ml) double curtemp ポット内の現在の湯温(℃) 《返却値》1秒後の湯温(℃)。100℃を超えることはない。湯量が0mlのとき にはcurtempの値を返す。 (2) 湯温の自然低下シミュレート関数 temp_down 《形式》 double temp_down( int vol, double curtemp ); 《機能》 ポット内で湯温が自然に低下する過程をシミュレートする。 ポット内の湯量と湯温をもとにして,1秒後の湯温の値を返す。 《引数》 int vol ポット内の現在の湯量(ml) double curtemp ポット内の現在の湯温(℃) 《返却値》1秒後の湯温(℃)。20℃よりも下がることはない。湯量が0mlの ときにはcurtempの値を返す。 [プログラム] #include <stdio.h> #include <stdlib.h> #define KEEPTEMP 95.0 #define FUTTEN 100.0 #define CAPACITY 2000 #define errexit(p1) \ {printf("指示誤りのため処理を中止します。\n"); \ exit(p1); } double temp_up( int, double ); double temp_down( int, double ); main() { int dest, opecd, status = 0; double wtrtemp; long evtime = 0; /* 操作指示を実行する時刻 */ long curtime = 0; /* 現在の時刻 */ double curtemp = 90.0; /* 現在の湯温 */ int vol = 2000; /* 現在の湯量 */ FILE *fp; printf( "\n 温度変化状況\n\n 経過時間 湯量 温度\n" ); fp = fopen( "input.dat", "r" ); fscanf( fp, "%d %ld", &opecd, &evtime ); if( evtime < curtime ) errexit(1); while( 1 ) { if( evtime == curtime ) { switch( opecd ){ case 1: fscanf( fp, "%d", &dest ); vol -= dest; if ( vol < 0 ) vol = 0; break; case 2: status = 1; break; case 3: fscanf( fp, "%lf", &wtrtemp ); curtemp = ( curtemp * (double)vol + wtrtemp * (double)(CAPACITY - vol)) / (double)CAPACITY; vol = CAPACITY; break; case 4; fclose(fp); printf( "%5ld %4d %6.2f\n", curtime, vol, curtemp ); exit(0); default; errexit(1); } printf( "%5ld %4d %6.2f\n", curtime, vol, curtemp ); fscanf( fp, "%d %ld", &opecd, &evtime ); if( evtime <= curtime ) errexit(1); } else printf( "%5ld %4d %6.2f\n", curtime, vol, curtemp ); if( curtemp < KEEPTEMP ) status = 1; else if( curtemp == FUTTEN ) status = 0; if( status == 1 ) curtemp = temp_up( vol, curtemp ); else curtemp = temp_down( vol, curtemp ); curtime++; } } 設問1 ポットへ最初に入れたときの湯温が90℃で湯量が2000mlの場合,その後の ポット内の湯温変化として最も適切なものを,解答群の中から選ベ。 なお,プログラムに対する操作指示はシミュレーションの終了指示だけとする。 解答群のグラフは,プログラムが出力する経過時間と湯温の値を可視化したもの である。 解答群
設問2 次の記述中の[ ]に入れる正しい答えを,解答群の中から選ベ。 (1) プログラムに対する操作指示として,次の4行からなるデータをファイル input.datから与えたとする。
(行番号)
11  300  150
2
a
32  660
4
b
       行番号1の数値の組“1 300 150”では,時刻300秒に150mlの湯をポットか
     ら取り出す操作を指示している。次に,行番号2の数値の組“[  a  ]”では,
     時刻600秒に25℃の湯をポットいっぱいに注入する操作を指示している。そして,
     行番号3の数値の組“2 660”では,時刻660秒に強制的な湯沸かしを開始する
     操作を指示している。最後に,行番号4の数値の組“[  b  ]”では,時刻900
     秒にシミュレーションを終了する操作を指示している。

  (2)  プログラム中のKEEPTEMPの値を95.0から20.0に,curtempの初期値を90.0から
     20.0に変えて,ファイルinput.datから数値の組“4 60”を与えたとする。この
     とき関数temp_downは[  c  ]回,関数temp_upは[  d  ]回呼ばれる。

aに関する解答群

  ア  3 600 25          イ  3 600 25 150       ウ  3  600 25 2000

  エ  3 600 150 25      オ  3 600 2000 25
bに関する解答群 ア 1 900 100 イ 2 900 ウ 3 900 30 エ 4 900
c,dに関する解答群 ア 0 イ 1 ウ 58 エ 59 オ 60 カ 61