試験時間は 90 分(16:20 〜 17:50)とする。
教科書・プリント・参考書などは持ち込み可能である。
(量に特に制限はないが、プリントは 1 冊に綴じてあること。隣の人の領域を侵犯しないようすること。
また、テスト中の物品の貸し借りは禁止する。)
使用できるソフトは、ブラウザー(Firefox 推奨・Internet Explorer 非推奨)、 エディター(メモ帳・MkEditor・サクラエディターなど)、 コマンドプロンプト (およびその中での cl, cd, dir などの C 言語のコンパイルと実行に必要なコマンド)である。
私語や携帯電話の使用などペーパーテストで禁止されていることは、オンラインテストでも禁止である。
以下のプログラムは動作はする(はずだ)がインデンテーションが滅茶苦茶である。 「プログラミング」のインデンテーションの約束事に厳密に従ってブレースを追加し、意味を変えずにインデントしなおせ。 ブレース({〜})内の字下げは 4 文字分とせよ。 特に 5 番目のルール:
if や for などでは、選択されたり、 繰り返したりされる文が一つだけの場合も、ブレース({〜})に囲む。に注意すること。 もちろんプログラムの動作は変えないこと。
#include <stdio.h> int main(void) { int i, j; for (i = 0; i < 10; i++) for (j = 0; j < i; j++) if (j % 3 == 0) printf("*"); else printf("&"); for (j = 0; j< i; j++) printf("#"); return 0; }
下に示すように、段数を受け取って、数字、空白、* と # を繰返し表示して、与えられた段数の三角形を描くプログラムを作成せよ。 1 列目に行番号の下一桁の数字を表示し、2 列目の空白のあと、 上から 1 行目は * が 1 つ、2 行目は # が 2 つ、3 行目は * が 3 つ、… というように、奇数行目は *、偶数行目は # が行番号と同じ数だけ繰り返すようにせよ。
実行例 1:何段ですか:4 1 * 2 ## 3 *** 4 ####実行例 2:
何段ですか:7 1 * 2 ## 3 *** 4 #### 5 ***** 6 ###### 7 *******実行例 3:
何段ですか:12 1 * 2 ## 3 *** 4 #### 5 ***** 6 ###### 7 ******* 8 ######## 9 ********* 0 ########## 1 *********** 2 ############実行例 4:
何段ですか:0
参考にするプログラム: List 4-18
秘密のルールを知っていなければ、整数を入力できない関数 foo を定義する。 つまり、2 つの整数の入力を読込み、2 つの数の和が 9999 のときは、 1 つめに入力された整数を返し、2 つの数の和が 9999 以外のときは、 2 つの整数の入力の読込みを繰り返す関数 int foo(void) を定義せよ。
なお、main関数は、以下のコードを使用して、確認せよ。
/* … 略 … */ int main(void) { int m = foo(); printf("あなたが入力した整数は %d です。\n", m); return 0; }
出力例は、以下のようになる。
実行例 1:整数1を入力してください: 1234 整数2を入力してください: 8765 あなたが入力した整数は 1234 です。実行例 2:
整数1を入力してください: 1111 整数2を入力してください: 7777 整数1を入力してください: 2222 整数2を入力してください: 7777 あなたが入力した整数は 2222 です。実行例 3:
整数1を入力してください: 0 整数2を入力してください: 9999 あなたが入力した整数は 0 です。実行例 4:
整数1を入力してください: 10000 整数2を入力してください: 0 整数1を入力してください: 10000 整数2を入力してください: -1 あなたが入力した整数は 10000 です。
int 型の配列 vc を受け取り vc の中の、vc の正の要素の最大値を返す関数 maxArr(const int vc[]) を作成せよ。 ただし、この関数は引数として配列の要素数を受け取らず、 0 または負の要素が現れたら、その直前の要素を配列の最後の要素と見なす。
なお、vc 中に正の要素がない場合は戻り値として 0 を返すようにせよ。
なお、テストデータは以下のコードの断片を使用して、結果を確認せよ。
#include <stdio.h> int maxArr(const int vc[]) { /* … ここを考える … */ } int vc1[] = {1, 6, 3, 4, 2, 5, -1}; int vc2[] = {8, 5, 6, 2, 3, 7, 3, 2, -1}; int vc3[] = {3, 7, 4, 12, 19, 2, 29, 31, -1}; int vc4[] = {-1}; int main(void) { printf("vc1 中の最大値は %d です。\n", maxArr(vc1)); printf("vc2 中の最大値は %d です。\n", maxArr(vc2)); printf("vc3 中の最大値は %d です。\n", maxArr(vc3)); printf("vc4 中の最大値は %d です。\n", maxArr(vc4)); return 0; }
この出力結果は、以下のようになる。
vc1 中 の最大値は 6 です。 vc2 中 の最大値は 8 です。 vc3 中 の最大値は 31 です。 vc4 中 の最大値は 0 です。
参考にするプログラム(あえて言えば): List 6-11,