小テストの問題


田村先生の小テスト(pdf)を html 化しました。 ということで、頑張って解きましょう。

その前に、fgets の解説。

char * fgets(char * s, int n, FILE*stream)
は、stream から入力を受取り、文字数が n に達するか、改行を読み込むか、EOF(File の終わり)に達するまで 文字を s で指される配列に取り込むというものです。
返り値は、何も読み込めなかったか、読み込み中にエラーがあった場合は null を返します。 これ以外の場合は、s を返します。

問 1

以下のプログラムの出力は?
void swap(int i, int j) {
  int t;
  t = i; i = j; j = t;
}

int main(int argc, char *argv[]) {
  int i = 10;
  int j = 20;
  swap(i, j);
  printf("%d %d\n", i, j);
}

問 2

以下のプログラムの出力は?
int i = 10;

void f(int i) {
  i = i + 10;
  printf("%d\n", i);
}

int main(int argc, char *argv[]) {
  f(i);
  printf("%d\n", i);
}

問3

以下のプログラムの出力は?
int i = 10;

void f(void) {
  i = i + 10;
  printf("%d\n", i);
}

int main(int argc, char *argv[]) {
  f();
  printf("%d\n", i);
}

問4

以下のプログラムの出力は?
int f(int n) {
  if (n <= 0)
    return 0;
  else
    return f(n-1)+n*n;
}

int main(int argc, char *argv[]) {
  printf("%d\n", f(3));
}

問5

以下の関数のプロトタイプ宣言は?

double f(double x) {
  return x*x;
}

問6

どこが間違っているか,簡単に説明せよ.
char *s;
char *t = "Kobe";
strcpy(s, t);

問7

どこが間違っているか,簡単に説明せよ.
char *readline() {
  char buffer[1000];
  if (fgets(buffer, 1000, stdin) == NULL)
    return NULL;
  return buffer;
}

問 8

以下のプログラムの出力は?
int main(int argc, char *argv[]) {
  char *line1, *line2;
  char buffer[1000];
  line1 = fgets(buffer, 1000, stdin);
  line2 = fgets(buffer, 1000, stdin);
  fputs(line1, stdout);
  fputs(line2, stdout);
}
ただし入力は以下の2行で,エラーは起らないとする.
abcd
efg

問 9

以下のプログラムの出力は?
int main(int argc, char *argv[]) {
  char *line1, *line2;
  line1 = malloc(1000);
  line2 = malloc(1000);
  fgets(line1, 1000, stdin);
  fgets(line2, 1000, stdin);
  fputs(line1, stdout);
  fputs(line2, stdout);
}
ただし入力は以下の2行で,エラーは起らないとする.
abcd
efg

問 10

以下のプログラムの出力は?

typedef struct person PERSON;
struct person {
  char *name;
  int age;
};

PERSON *g(PERSON *p) {
  p->age += 10;
  return p;
}

int main(int argc, char *argv[]) {
  PERSON me, *p;
  me.name = "Taro";
  me.age = 20;
  p = g(&me);
  printf("%d %d\n", me.age, p->age);
}

2002.10.22/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp