復習テスト1(15分)

 前回の復習です。印刷をせずに、この画面を見ながら、プロクターに口頭で答えてください。

問1

 次の用語をできるだけ詳しく説明してください。

問2

 次の2つのヘッダファイルの取り込み指定が< >と" "のように異なっているのはなぜか。理由を説明してください。

  #include <stdlib.h>
  #include "polar.h"

問3

 次のプログラムは、-1と-2を足して2乗した値9を出力するつもりで作成したものである。 間違いを2箇所指摘し、どうして駄目なのかを説明してください。

  #include <stdio.h>
  #define square(x) (x * x);

  int main()
  {
      double a = -1.0, b = -2.0;
      printf("%f\n",square(a+b));
      return 0;
  }

問4

 次の文は、コンパイルをするために入力したものである。 利用しているライブラリは何か、どうしてそれがわかったのかを説明してください。

  $ cc -o calc calc.c -lm

問5

 ある関数を定義したファイル(A)と、 Aの関数のプロトタイプ宣言を記述したヘッダファイル(B)、 Aの関数を利用したメインプログラムのファイル(C)がある。

  1. このとき、Bのヘッダファイルを取り込むように宣言すべきなのは、3つのうちのどれか?なぜ宣言が必要なのかもあわせて説明しなさい。
  2. このように複数ファイルに分けてコンパイルするのを、何コンパイルと呼びますか?

おまけ(上記の問題を解答して納得した後で)

メインプログラム内でprintf関数を用いるために、 #include<stdio.h>を宣言する必要があるのは知っていると思います。 そしてstdio.hというヘッダファイルの中でプロトタイプ宣言されているprintf関数の本体(定義)が 標準ライブラリにおさめられているとしたとき (標準ライブラリなのでコンパイル時にリンクの記述は省略されている)、 なぜprintf文を用いるのに、#include<stdio.h>の宣言が必要であるのかを、 問5になぞらえて考えてみてください。
これまでprintf関数を使うためになんとなく使ってきた#include<stdio.h>の意味がわかったでしょうか?


作成:市川(ichikawa@soft.iwate-pu.ac.jp) 2005/04/11