計算機実習 I

第四回 (2005年 5月12日)

制御文: 条件、枝分かれ、繰り返し

AGU

© 2005 Martin J. Dürst 青山学院大学

先週の補習

皆さん利用する処理系で int は何バイト?
4 バイト (32ビット、long も 4バイト; Java は int 4バイト; long 8バイト
int で表現できる最大の値?
231-1 (3.2 p. 51)
int a = 3.5, b = 5.5;
printf("%d", a * b);
の出力は?
15 (int は整数)

良くある間違い、解決策

文の種類

文と; (semicolon)

ifelse の組み合わせ

else は可能な限り一番近い if との組み合わせになる。

次のプログラムは字下げ通りには動かない:

if (a > b)
    if (a != 0)
        z /= a;
else
    z += b;

if 文の代わりになる式 (1)

良くある一句:

if (m > n)
    r = m;
else
    r = n;

特に r がもう少し複雑な場合には次が有効:

r = (m > n) ? m : n;

if 文の代わりになる式 (2)

||&& で if 文のような物が作れる:

if (i >= 0)
    print ("%d は正である。\n");
else
    print ("%d は負である。\n");

の代わりに

i>=0 && printf("%d は正である。\n",i) || printf ("%d は負である。\n", i);

switch 文の fallthrough

switch (c) {
  case '\n':
    line++;
    /* fallthrough */
  case ' ': case '\t':
    ...
    break;
  ...
}

goto 文

プリプロセッサの枝分かれ

環境変数やプリプロセッサ変数の設定によってプログラムの一部になるかどうかを決める。

典型例: #include ファイルの複数読み込みへの対応:

#ifndef _INC_STDIO
#define _INC_STDIO
    /* stdio.h の内容 */
#endif

#ifndef _INC_STDIO
#if !defined(_INC_STDIO) でも書ける。

今週の演習の補足

A1: 必ずやる。制御方法と判断方法それそれ三つあるので三つの組み合わせを使う。

A2: 自信があればやらなくても良い。

C2: 補足資料を参照のこと。

次回の準備