試験の実施方法

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 コマンドが実行できるようにします。ただし、再起動された kiso2 –start-exam コマンドは、再起動される度に残り試験時間が10分ずつ減るので注意して下さい。

解答方法と採点方法

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

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

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

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

この試験全体は50点満点で評価されます。ただし、全ての問題の総点は50点を超えるように配点されています。 試験結果の合計点が50点を超えた場合、超えた点数は切り捨てられ50点として扱われます。

問0:exam16-0.txt (10点)

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

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

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

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

第2回、および第8回実施の中間試験とほぼ同内容です。これまでの回答との整合性に基づき採点されます。

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

次のプログラムソースは、キーボードから入力された1文字をそのまま出力することを繰り返すプログラムである。

exam16-1.c
#include <stdio.h>
 
int lower(char);
char crypt[] = {'u', 'h', 'k', 't', 'z', 'w', 'n', 'm', 'p', 'c', 'v', 'y', 'l',
		'b', 'x', 'o', 'q', 'e', 'f', 'g', 'i', 'r', 's', 'a', 'd', 'j'};
 
int main(void) {
  char c;
 
  while (1) {
    scanf(" %c", &c);       // 入力時に改行文字を読み飛ばすために %c の前に空白がある
    printf(" %c\n", c);     // 出力された文字であることを示すために先頭に空白を挿入
  }
 
  return 0;
}
 
int lower(char c) {
  if ('a' <= c && c <= 'z')
    return 1;
  else
    return 0;
}

このプログラムソースを利用し、キーボードから入力された文字が英小文字であれば、その英小文字がアルファベット順で先頭から何番目の文字かに応じて、グローバル変数 crypt[] の i番目出力するプログラム exam16-1.c を作成し、kiso2 コマンドを用いて提出しなさい。

このとき、たとえば入力された文字が 'a' のときは crypt[] の最初の要素 'u' が出力され、同様に 'b' のときは 'h'が、'z' のとき 'j' が出力される。 また、入力された文字が英小文字以外のときは、プログラムは何も出力せずに実行を終了するものとする。また、定義されている関数 lower() を利用しても利用しなくてもどちらでもよい。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-1
1
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-1
A
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-1
a
 u
b
 h
c
 k
s
 f
x
 a
y
 d
z
 j
Z
このプログラムの採点では、ここで与えられたものとは異なる crypt[] 要素の値でチェックが行われます。

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

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

実行例:

t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-2
0
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-2
1
*
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-2
2
*
***
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-2
3
*
***
******
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-2
9
*
***
******
**********
***************
*********************
****************************
************************************
*********************************************

問4:exam16-3.c (15点)

要素の値が 2 から20 の範囲にある大きさ50の整数型の配列変数 data[] が以下のように与えられている。 2から20の範囲で、その値を約数にもつ値が配列 data[] の要素にそれぞれいくつ含まれているかを出力するプログラム exam16-3.c を作成してkiso2コマンドを用いて提出しなさい。

int data[] = {2, 19, 11, 6, 13, 19, 8, 14, 14, 19, 9, 4, 4, 14, 3, 10, 17, 17, 8, 20, 8, 10, 8, 6, 11,
             13, 14, 16, 5, 6, 5, 3, 14, 9, 6, 18, 12, 3, 12, 8, 14, 2, 16, 20, 15, 5, 17, 16, 20, 10};

実行例:

t180900@s01cd0542-160:~/kiso2-2018/exam16-3$ ./exam16-3
2: 31
3: 13
4: 15
5: 10
6: 7
7: 6
8: 8
9: 3
10: 6
11: 2
12: 2
13: 2
14: 6
15: 1
16: 3
17: 3
18: 1
19: 3
20: 3
このプログラムの採点では、ここで与えられたものとは異なる data[] 要素の値でチェックが行われます。

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

関数 nextwd() は、1〜12の月を表す整数と、その月の1日の曜日を表す 0〜6の整数をそれぞれ int型の引数として受け取り、次の月の(1日の)最初の曜日を0〜6の int型の返り値として返す関数である。 ただし、曜日を表す整数は 0を日曜日、1を月曜日として、曜日順に表現され 6が土曜日を表すものとする。

以下のプログラムソースには、グローバル変数として各月の日数が格納されている int型の配列変数 mdays[] が定義されており、 キーボードから月と曜日を表す整数値を入力すると、関数 nextwd() を用いて次の月の最初の曜日を表す 0〜6の整数を出力することが期待されている。

グローバル変数 mdyas[] を利用し次の月の最初の曜日を計算する関数 nextwd() を定義すると共に、このプログラム exam16-4.c を完成させkiso2 コマンドを用いて提出しなさい。 ただし、月として入力された値 m が 1〜12(月)ではない場合、または、曜日として入力された値 wd が 0〜6の範囲外である場合は、再度、月と曜日の入力を行うものとする。

exam16-4.c
#include <stdio.h>
 
// nextwd() のプロトタイプ宣言
 
int mdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
int main(void) {
  int m, wd;
 
  scanf("%d%d", &m, &wd);
  printf("%d\n", nextwd(m, wd));
 
return 0;
}
 
// nextwd() の定義

実行例:

t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-4
0 0
13 0
1 -1
1 7
1 0
3
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-4
1 2
5
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-4
2 5
5
t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-4
12 6
2
この問題は main() 関数を変更する必要があります。

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

関数 trsqsum() は、3つの int型の引数 $a, b, t$ を受け取ると、 $$a \cos^2\theta + b \sin^2\theta$$ の値を double型の返り値として返す関数である。 ただし、引数 $t$ はラジアン角 $\theta$ を度数表記した値とする。

このような関数 trsqsum() を定義し、$a, b, t$ の値を整数として入力すると、上式の値を出力するプログラム exam16-5.c を作成し、kiso2 コマンドを用いて提出しなさい。

以下の実行例では、main() 関数によって値の入力と出力が繰り返し行われているが、提出するプログラムでは必ずしもこれらを実現する必要はない。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/exam16$ ./exam16-5
1 1 0
1.000000
1 1 90
1.000000
1 2 -90
2.000000
2 1 180
2.000000
1 1 45
1.000000
2 3 30
2.250000
3 4 110
3.883022
-2 -3 -120
-2.750000
^C
このプログラムの採点では、提出されたファイルから関数 trsqsum() を抽出し、採点用のソースファイルの実行結果によって評価されます。

問6:exam16-6.txt (10点)

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

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