平成23年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−1
次のC言語のプログラムは不適切である。その理由として最も適切なものはどれか。
ただし、プログラム中の左端の数字は行番号であり、プログラムには含まれない。
19行目には注釈に示すようなプログラム部分 (そこには不適切な内容は含まれない
とする) があるが、その詳細はここでは省略した。

  1 #include <stdio.h>
  2
  3 struct intpair {
  4  int m, n;
  5 };
  6
  7 struct intpair *f (int m, int n) {
  8  struct intpair t;
  9  t.m = m;
 10  t.n = n;
 11  return &t;
 12 }
 13
 14 int main (void) {
 15  struct intpair *p, *q;
 16  p = f(1, 2);
 17  q = f(3, 4);
 18  printf("%d, %d, %d, %d\n", p->m, p->n, q->m, q->n);
 19  /* ここに p と q を用いた計算を行うプログラム部分がある。*/
 20  return ();
 21 }

 @ 構造体intpairの定義の最後 (5行目) に、余計な ; がついている。
 A 関数 f の仮引数名と構造体intpairのメンバ名が、重複 (ともにm と n) している。
 B 9行目及び10行目の代入の左辺が、それぞれ t->m、t->n になっていない。
 C 関数 f が局所変数へのポインタを返している。
 D 18行目のprintfの書式が誤っている。




【正解】 C
@構造体の定義には ; が必要である。
A仮引数名と構造体のメンバ名が同一でも構わない。
B -> を使用するのは -> の左側の変数がポインtの場合であり、
 intpair t; として定義されているため適切である。
C局所変数(ローカル変数) t のアドレスを関数の値として返すのはおかしく、
 C言語のプログラムは不適切である。
D構造体メンバのm, nは整数型であり、正しい構文である。


EXCELのマクロのご相談なら ファーストマクロ 



目次 W−2
ファーストマクロ TOPページ