計算機基礎実習II 期末試験問題 2020/01/16

試験の実施方法

kiso2 コマンドで 「試験」 表示されたファイルは、試験として実施されます。 「試験」 として出題されたファイルもkiso2 コマンド を用いて提出しますが、これらのファイルは試験実施中のみ提出することができます。

試験の実施方法は、以下の通りです。

  1. 端末(ターミナル)上から、kiso2 コマンドに –start-exam オプションを付けて実行kiso2 –start-exam )することで試験が開始されます。表示フォントの関係で見にくいかもしれませんが、kiso2 の後にスペースを開けて –start-exam (先頭のハイフンは2つ 「マイナス・マイナス・start・マイナス・exam」) です。
  2. 試験が開始されると、試験開始のメッセージと共にウェブブラウザで試験用Webページが自動的に表示されます(本試験でないときは科目ページが表示)。
  3. 試験の実施中は、端末(ターミナル)上で経過時間と残り時間が不定期に更新され、kiso2 コマンドで「試験」表示されたファイルが提出できます。
  4. kiso2 コマンドで「試験」ファイルを提出する場合は、kiso2 –start-exam で試験を開始した端末(ターミナル)とは別の端末(ターミナル)をもう一つ起動し、その端末で kiso2 コマンドによるファイルの提出を行ってください。
  5. 試験実施中は、不定期にデスクトップ画面のスクリーンショットが取得されます。
  6. 試験の残り時間が100秒を切ると1秒毎のカウントダウンが表示され、残り時間が 0 になると kiso2 -start-exam コマンドと共に試験が終了します。
  7. kiso2 –start-exam コマンドが強制終了された後や、すでに起動している場合は kiso2 –start-exam の再実行が行われます。ただし、kiso2 –start-exam コマンドは、再起動される度に残り試験時間が10分ずつ減るので注意して下さい。

解答方法と採点方法

問0と問10は必ず解答・提出してください。

問1から問9は選択問題として自由に解答してください(1つも解答しなくても、全て解答しても構いません)。 ただし、試験時間は限られていますので時間配分には十分注意して解答してください。 kiso2 コマンドで提出されたもののうちcc コマンドでコンパイルが可能なすべてのプログラムについて、それぞれ10点満点で採点されます。 コンパイルができないプログラムソースは、提出しても採点の対象にはならないので注意してください。

プログラムの採点は、各問の実行例で示したものの他に、採点用の入出力例を加えた複数の入出力結果との一致によって評価されます。 関数定義を行う幾つかの問題では、提出されたプログラムソースから関数定義のみを抽出し、評価用の main()関数によって採点が行われます。

提出プログラムが、採点用に用意された入出力結果を満たさなかった場合は、一致した入出力結果の割合やプログラムソースの内容で評価を行います。 その場合、インデント(字下げ)や変数名などのプログラムソースの読みやすさの観点からも評価されます。

この試験の総点は50点を超えるように配点されていますが、科目評価としては50点満点で評価されます。 すなわち、この試験の合計点が50点を超えた場合、超えた点数は切り捨てられ50点分の科目評価として扱われます。

問0:exam15-0.txt (5点)

以下のリンクにあるアンケートフォームに回答して下さい。

C言語についての理解度調査その3 kiso2-2019

「C言語に関する単語や概念について、現在の理解度を自分がどのように感じているかお答え下さい。」

回答が終わったらフォーム画面下の「送信(Submit)」ボタンを忘れずに押して下さい。 アンケートに回答後、「自分の学籍番号のみ」を半角英数字で記載したテキストファイル exam15-0.txt を作成し、kiso2 コマンドを用いて提出しなさい。

これまでのアンケートと同内容です。過去2回の回答との整合性に基づき採点されます。

問1:exam15-1.c (10点)

大きさが10の整数型配列に入力されたデータに対して、その「部分列の和」を求めたい。 キーボードから10個の整数値を順に入力し、その後、部分列のサイズ $n$ を入力すると各部分列に含まれる要素の和(部分列の和)を順に出力するプログラムexam15-1.cを作成し kiso2コマンドを用いて提出しなさい。

ただし、配列の大きさ10が部分列のサイズ$n$で割り切れない場合、最後の部分列は配列の最後の要素を含んだ$n$に満たないサイズをもつ。また、部分列のサイズ $n$ に1未満の値が入力された場合、プログラムは何も出力せずに終了すること。

たとえば、大きさ10の配列の各要素が、

1,2,3,4,5,6,7,8,9,10

であるとき、$n=2$ の各部分列は、

(1,2),(3,4),(5,6),(7,8),(9,10)

となり、それらの和は、

3 7 11 15 19

である。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-1
1 2 3 4 5 6 7 8 9 10
0
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-1
1 2 3 4 5 6 7 8 9 10
1
1 2 3 4 5 6 7 8 9 10
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-1
1 2 3 4 5 6 7 8 9 10
2
3 7 11 15 19
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-1
1 2 3 4 5 6 7 8 9 10
3
6 15 24 10
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-1
1 3 5 7 9 10 12 14 16 18
3
9 26 42 18

問2:exam15-2.c (10点)

関数 hours() は、時間単位を表す int型の引数 h と、分単位を表す int型の引数 m をそれぞれこの順に受け取り、h時間m分を時間単位で表した double型の数値として返す関数である。ただし、いずれかの引数が負の値であるとき、または、分を表す m の値が 60以上であるときには、エラーを表す適当な負の値を返り値として返す。

このような関数 hours() を定義し、キーボードから時間単位と分単位の整数値を入力すると、それらの時間単位表記を出力するプログラムexam15-2.c を作成し kiso2コマンドを用いて提出しなさい。

このプログラムの採点では、提出されたファイルから関数 hours() を抽出し、採点用のソースファイルの実行結果によって評価されます。したがって、以下の実行例では値の入力と出力が繰り返し行われ、エラー表示も行われているが、提出するプログラムでは必ずしもこれらを実現する必要はない。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-2
0 -1
エラーです
-1 0
エラーです
0 0
0.000000
1 60
エラーです
1 30
1.500000
1 59
1.983333
0 59
0.983333
2 22
2.366667
^C

問3:exam15-3.c (10点)

1つの正の整数 $N$ の値を順に入力すると、$1\le i\le N$ の範囲で、$i$行目にそれぞれ $$\sum_{k=1}^{i} k^2$$ 個の '*'(半角のアスタリスク)を出力するプログラム exam15-3.c を作成し、kiso2 コマンドを用いて提出しなさい。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-3
0
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-3
1
*
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-3
2
*
*****
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-3
3
*
*****
**************
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-3
6
*
*****
**************
******************************
*******************************************************
*******************************************************************************************

問4:exam15-4.c (10点)

関数 quadrant() は、度数表現された一般角の角度 $a$ を int型の引数として受け取ると、座標平面上の点 $(\cos a, \sin a)$ が第1〜4象限のどの象限に存在するかを int型の返り値として返す関数である。ただし、点 $(\cos a, \sin a)$ が $x$軸上、または $y$軸上にあるとき quadrant() の返り値は 0 である。

このような関数 quadrant()を定義し、キーボードから度数を整数値として入力すると、座標平面上の点 $(\cos a, \sin a)$ がどの象限に存在するかを出力するプログラムexam15-4.cを作成し kiso2コマンドを用いて提出しなさい。

このプログラムの採点では、提出されたファイルから関数 quadrant() を抽出し、採点用のソースファイルの実行結果によって評価されます。したがって、以下の実行例では値の入力と出力が繰り返し行われているが、提出するプログラムでは必ずしもこれらを実現する必要はない。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-4
0
軸上
90
軸上
180
軸上
-360
軸上
-450
軸上
1
第1象限
89
第1象限
181
第3象限
359
第4象限
-1
第4象限
-91
第3象限
-271
第1象限
^C

問5:exam15-5.c (10点)

キーボードから入力された1つの文字をchar型の変数として受け取り、その文字が小文字アルファベットであれば、そのアルファベット文字から ’z’ までを昇順に出力するプログラムexam15-5.cを作成し kiso2 コマンドを用いて提出しなさい。

ただし、入力された文字が小文字のアルファベットでない場合は、何も出力せずに再度キーボードからの入力を行なうものとする。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-5
A
Z
-
a
abcdefghijklmnopqrstuvwxyz
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-5
s
stuvwxyz
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-5
z
z

問6:exam15-6.c (10点)

入力データの個数$N$に続いて、$N$個のデータ要素の値を整数値としてキーボードから入力すると、$N$個全てのデータの平均値 $avg$ と、$k<avg$ であるようなデータ集合$\{k\}$の平均値、および $\ell\geqq avg$ であるようなデータ集合$\{\ell\}$の平均値をそれぞれ出力するプログラムexam15-6.cを作成し kiso2コマンドを用いて提出しなさい。

ただし、データの個数$N$の値が1未満の場合、プログラムは何も出力せずに終了するものとする。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-6
0
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-6
10
1 2 3 4 5 6 7 8 9 10
5.500000 3.000000 8.000000
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-6
11
1 2 3 4 5 6 7 8 9 10 11
6.000000 3.000000 8.500000
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-6
11
1 1 2 2 3 4 5 6 7 8 8
4.272727 2.166667 6.800000

問7:exam15-7.c (10点)

あるオンラインショッピングサイトでは、1周年記念のキャンペーンを実施することとなった。このキャンペーンは、キャンペーンが開始されてから$i$番目の支払いに対して、以下のような優遇を実施するものである。

  1. $i$が10の倍数であるとき、支払い額を元の金額の50%OFFとする
  2. $i$が100の倍数であるとき、支払い額を元の金額の90%OFFとする
  3. $i$が1000の倍数であるとき、支払い額を元の金額の100%OFFとし、さらに、元の支払いと同額をキャッシュバックする
  4. キャンペーン対象となる支払いは、最大で10000番目までとする

ただし、$i$が上記の条件の複数に当てはまる場合は、もっとも優遇の大きい(1〜3のうちもっとも番号が大きい)もののみを適用する。

支払いがキャンペーンの何番目のものであるかと、その支払金額をそれぞれ正の整数値としてキーボードから入力すると、キャンペーン適用後の支払額を出力するプログラムexam15-7.cを作成し kiso2 コマンドを用いて提出しなさい。 ただし、いずれかの入力数が正の整数値ではない場合は、再度、何番目であるかとその支払金額を入力するものとする。 また、キャッシュバックにより受取金額が発生した場合は、支払金額を負数として表現し、キャンペーン適用により小数点以下の端数が発生した場合は、小数点以下の金額は切り捨てることとする。

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
0 100
1 0
1 100
100
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
2 100
100
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
10 100
50
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
100 1000
100
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
101 1000
1000
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
1000 1000
-1000
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
10000 1000
-1000
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
900 999
99
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-7
11000 1000
1000

問8:exam15-8.c (10点)

一辺が $i$ 個からなる正三角形に並べられた等間隔な点の総数を$i$番目の三角数と呼ぶ。

たとえば、1番目$(i=1)$から6番目$(i=6)$までの三角数はそれぞれ、1, 3, 6, 10, 15, 21 である。

 1      3       6       10         15          21
 ●      ●       ●        ●          ●           ●
       ● ●     ● ●      ● ●        ● ●         ● ●
              ● ● ●    ● ● ●      ● ● ●       ● ● ●		
                      ● ● ● ●    ● ● ● ●     ● ● ● ●
                                ● ● ● ● ●   ● ● ● ● ●
                                           ● ● ● ● ● ●

自然数 $n$ の値をキーボードから入力すると、$n$ が三角数であれば「三角数である」と表示し、三角数でなければ「三角数ではない」と表示するプログラムexam15-8.cを作成し kiso2 コマンドを用いて提出しなさい。

ただし、入力された値が0以下の場合は何も出力せずにプログラムを終了するものとする。また、int型で表現できないような大きな値が入力された場合の処理は考えなくてもよい。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
-1
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
0
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
1
三角数である
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
2
三角数ではない
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
3
三角数である
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
10
三角数である
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
11
三角数ではない
t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-8
666
三角数である

問9:exam15-9.c (10点)

関数 apexp() は、1つのdouble型の引数 $x$ と1つのint型の引数 $i$ を受け取ると、$e^x$ のマクローリン展開 $$ e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \cdots$$ の第$i$項($i=1,2,\cdots$)までの和をdouble型の返り値として返す関数である。 ただし、引数 $i$の値が 1未満のときはエラーとして適当な負の値を返す。

このような関数 apexp()を定義し、キーボードから実数 $x$の値と項数 $i$ を入力すると、$e^x$ の第$i$項までの近似値を出力するプログラムexam15-9.cを作成し kiso2コマンドを用いて提出しなさい。

このプログラムの採点では、提出されたファイルから関数 apexp() を抽出し、採点用のソースファイルの実行結果によって評価されます。したがって、以下の実行例では値の入力と出力が繰り返し行われ、エラー表示も行われているが、提出するプログラムでは必ずしもこれらを実現する必要はない。

実行例:

t190900@s01cd0542-160:~/kiso2-2019/exam15$ ./exam15-9
1 -1
エラー
1 0
エラー
1 1
1.000000
1 2
2.000000
1 9
2.718279
1.2 10
3.320115
-1 10
0.367879
^C

問10:exam15-10.txt (5点)

この試験の問0から問9までで自身が得られる合計点(0〜95点)を自己採点しなさい。自己採点した合計点のみを半角数字で入力したテキストファイル exam15-10.txt を作成し、kiso2 コマンドを用いて提出しなさい。

実際に得られた得点を x、自己採点で予測した得点を y とすると、問10の点数は $\frac{10-|x-y|}{2}$ (小数点以下切り上げ)で計算されます。ただし、計算された点数が 0未満の場合、問10は 0点として採点されます。
  • lecture/kiso2/2019/exam15-2019.txt
  • 最終更新: 2020/01/16 15:49
  • by sano