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