8日目 10日目

9日目

課題 9

文法に関するあれこれ

複文

ここまでのプログラムでは forif の後ろは、実行されるべき文を 必ず '{' と '}' で括りブロックを形成していた。 実は、C では、この '{' と '}' は書かなくてもよい場合が存在する。

実はfor文は、繰り返し処理を行う文を1つだけ取る。 同様に if文で、条件が成立した際に実行されるのも単一の文である。 ところが、実際に行いたい処理が単一文で書くことができるのは滅多にない。 そのような場合には、 '{' と '}' で文を括ることにより、それらの複数の文は 一つの文と同じように扱われる。 これを「複文(compound statement)」と呼ぶ。 単一の文であっても、'{' と '}' でくくって複文としても良いので、これまでは 必ず複文にしていたのである。

繰り返し処理

C で利用できる繰り返し処理の方法には、これまでに出てきた for文、 while文に加えて、do〜while文が存在する。

上記 3種の構造は次のような図で表すことができる。

           

条件分岐

C で利用できる条件分岐としては、今まで学習した if(-else)に加えて switch文がある。

問題 9

次の関数が何をしているかを調べ、このmycat2.cにこの関数を組み合わせたプログラムを作成せよ。

/* rot.c */
int rot(char *ch, int shift)
{
	char base = 0;

	if (*ch >= 0x41 && *ch <= 0x5a) {
		base = 'A';
	} elsif (*ch >= 0x61 && *ch <= 0x7a) {
		base = 'a';
	}

	if (base > 0) {
		*ch = base + ((*ch - base) + shift) % 26;
		return 0;
	}

	return 1;
}

出来上がったプログラムに次の内容のファイル(input.txt)を引数に与えて、何を意味するものか調べよ。

 Pbatenghyngvba, lbh jba !

他にも5日目の問題4、 6日目の問題 5-1, 5-2、 7日目の問題6 についても、解答プログラムができている事も確認する事。


8日目 表紙 10日目

tacha@tack.fukui-med.ac.jp
$Id$