問1
(1) 情報量の単位で、1bit は0または1などの2者択一情報の量を表す。
(2) 現在は、8bitで1byteを意味する。 (昔は、次の1wordの意味でも使われていたが特に解答する必要はない。)
(3) コンピュータが1度に扱う情報の量。 (マイクロソフトのワードプロセッサではだめ。 1文字のデータ量はOK。(文字でないとだめ、昔はコンピュータの 1文字のデータ量といっていた。))
(4) コンピュータがするべき仕事を記述する言語。
(5) プログラムを直接にコンピュータが実行することができる機械語に翻訳するもの。
(6) プログラムを1つずつ翻訳しながら実行することができるもの。 (実際には、中間言語に変換してから、1つずつ実行する。)
(7) 記憶クラスのひとつで、 宣言されたブロックの実行の開始でその都度領域が確保され、 ブロックの終了によって領域が開放されるもの。 スコープはそのブロック内で、初期値もブロックの実行の開始で設定され、 初期値を指定しないとき、はじめの変数値は未定である。
(8) 記憶クラスのひとつで、全体のプログラムの実行の開始で領域が確保され、 プログラムの終了によって領域が開放されるもの。 スコープはそのブロック内で、初期値はプログラムの開始で設定され、 初期値を指定しないとき、はじめの変数値は0(整数の場合)。
(9) プログラムをコンパイルをする時の前処理で、 ファイルの取り込み、マクロの展開などを行う。
(10) データが存在するアドレスを格納する変数。
(11) if文, while文, for文などでプログラムの流れを指示するもの。
(12) 関数の使用の前に、関数の型やその引数の型を宣言するもの。
(13) 問題を間違えていましたので全員○です。 (正しくは、「関数の定義」と書くべきでした。) 関数の型やその仮引数の型を宣言し、その内容を記述するもの。
(14) 関数を呼び出すときに、データを関数に渡す変数や定数。
(15) 関数が呼び出されたときに、データを受け取る変数。
(16) データ型が異なるものの演算。昇格されて演算が行われる。


問2
(1) -32768から32767まで。
(2) 0から655535まで。
(3) 変数iのアドレスが指している値であるから、iと同じものになる。
(4) aが3、bが1になる。


問3
auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, while

間違ったものを書いても減点はなし。スペルミスは2個以上で1点減点。
(今回の問3の最高点は30点でした。)

注:printf, main, include 等はキーワードではない。 実際次のプログラムは動作する。
void func1(int i, int j, int k);

main()
{
  int printf, main, include;
  
  printf = main = include = 2;
  func1(printf, main, include);
}

void func1(int i, int j, int k)
{
  printf("%d %d %d \n", i, j, k);
}
ただし、
main()
{
  int printf, main, include;
  
  printf = main = include = 2;
  printf("%d %d %d \n", printf, main, include);
}
とすると、printfが関数ではなく、整数になってしまうのでコンパイルエラーとなる。

問4
素数を小さい順番に100個求め、表示するプログラム。

1: 関数main()の宣言の開始。
2: 関数main()の内容の記述の開始すること示す。
3: 素数を格納する配列a[]を宣言。
4: 今まで求めた素数の個数を入れる整数bの宣言。
5: 素数の候補の変数cと、ループのカウンタの変数dを宣言して、cを2に初期化する。
6: 求めた素数の数が100より少なければをループ続ける。
7: 6のループする範囲のはじまりを示す。
8: いままで求めた素数で調べるためのループカウンタdを初期化する。
9: 調べた素数の数が求めた素数の数よりも少なければループを続ける。
10: 8のループする範囲のはじまりを示す。
11: もし、cが今まで求めた素数で割り切れる場合は素数ではないので、 このループから出る。
12: 次の素数で調べるためにdをインクリメントする。
13: 8のループの範囲の終りを示す。
14: もし、調べた素数の数がいままで求めた素数の数と同じならば、 cは新たに見つかった素数であるので、配列aに格納して、 求めた素数の数bをインクリメントする。
15: cをインクリメントして、次に調べる数にする。
16: 6のループの範囲の終りを示す。
17: 求めた素数をプリントするためのループカウンタdを初期化する。
18: 出力した素数の数が100より小さければをループ続ける。
19: 18のループする範囲のはじまりを示す。
20: 素数をその順番と共に出力する。
21: 18のループの範囲の終りを示す。
22: 関数main()の内容の記述の終了すること示す。

Yukihiko Yamashita (yamasita@ide.titech.ac.jp)