制御構文など

○if

…と、ここで説明する前に既にサンプルで使いまくってますが。
そこはまぁ、何と言うか。
HSPびとの直感力に賭けたというか、まぁ、わかるか。みたいな。ねぇ
「ねぇ」とか言われても困ります。

if(式){
	(ブロック内の処理)
}
式が真であれば、ブロック内の処理が行われます。

if(式){
	(初めのブロックの処理)
}
else{
	(elseのブロックの処理)
}
式が真であれば、初めのブロックの処理が行われます。
真でなければ、elseのブロックの処理が行われます。

if(式1){
	(初めのブロックの処理)
}
else if(式2){
	(2番目のブロックの処理)
}
else if(式3){
	(3番目のブロックの処理)
}
else{
	(最後のブロックの処理)
}
式1が真であれば、初めのブロックの処理が行われます。
そうでなくて、でも式2が真であれば、2番目のブロックの処理が行われます。
それでもなくて、式2が真であれば、2番目のブロックの処理が行われます。
どれにも引っかからなかったら、最後のブロックの処理が行われます。

うん、簡単だね。

ちなみに、「もし」の処理が1文だけなら、こういう書き方もできます。
if(siki == TRUE)	printf("真でした");
else		printf("偽でした");
このまま覚えてしまってもいいですが、
理屈も知っていると、人に教える時に尊敬されるかもしれないので、御拝聴なさるがよい。

中カッコのブロック:
	{
		…
	}
これは、複数の文を1文として読みかえる作用があります。
うん、意味がようわからんな。

そもそもif文
  if(式) 文
とは、式の内容が真であれば、次の文を実行するというものです。
しかし、多くの場合は、「もしアレだったらナニをする」のナニの部分は、
1文ですむような処理ではないわけです。
だから、中カッコのブロックで一つにまとめる、中カッコのブロックは1文として解釈される。

たしか、そんな話だったはずです。たぶん。

さらに言うと、
	if(式) 文
	else   文
if文の原理はこれだけです。else ifというキーワードが用意されているワケでわなく。
	if(式) 文
	else	if(式) 文
		else	if(式) 文
			else	if(式) 文
				else ...
実は、ばれないようにネストを掘っている構文なんですね。


○break

HSPにもありますが、強制的にブロックから抜ける事を指定する文です。
for,while,switch内で有効です。
これ以上の説明はかんべんして著。


○continue

ほとんど使わん。検索すれ。


○for

繰り返し文です。
#include <stdio.h>
int main(){
	int i;

	for(i=0;i<5;i++){
		printf("\nうまい");
	}
	printf("どんぶり");

	return 0;
}
(出力)

うまい
うまい
うまい
うまい
うまいどんぶり

for(式1;式2;式3) 文
の構文で、
1.ループに入る前に式1を評価する。
2.式2を評価し、真ならば「文」の処理を行う、偽ならばfor文を終了する。
3.式3を評価する。
4.2にもどる
原理的にはそうなのですが、
for(i=0;i<繰り返し回数;i++) 文

の構文を丸暗記で、まずは問題無いでせう。


○while

繰り返し文ですが。

while(式) 文
と書くと、かなり違和感がありますね。
while(式){
	…
}
1.式を評価し、真ならば「…」の処理を行う、偽ならばwhileを終了する。
2.1にもどる。
感覚的には無限ループで、「式が真になっている間はループを続ける」というものです。

で、もうひとつdo-whileという書き方があります。
do{
	…
}while(式)
1.「…」の処理を行う
2.式を評価し、真ならば1にもどる。偽ならばwhileを終了する。
チャートをよく睨んでみると判ると思いますが、前者との違いは、
ループの中身が必ず1度は処理される、ということです。


○switch

処理の振り分けです。

switch(式){
	case 値1:
		(処理)
		break;
	case 値2:
		(処理)
		break;
	case 値3:
		(処理)
		break;
	case 値4:
		(処理)
		break;

	default:
		(処理)
		break;
}
式の値によって、それと等しい値を持つcaseラベルにgotoします。
該当caseが無い場合はdefaultラベルにgotoしますが、
defaultが定義されていない場合はswitch処理を抜けます。
breakがうるさいですが、breakを挿入しなかった場合、
そのまま処理が次のcaseまで流れて行ってしまいます。


○goto

一般に、C言語ではgotoをむやみに使わないことが良いとされています。
その理由は、
「不用意にgotoを使うと処理の入りくんだプログラムになりやすいこと。」
で、主に可読性に問題があるため、でしょう。

絶対に使ってはいけないという訳ではなく、むしろ可読性安全性が向上するのであれば
積極的に使うべきでしょうが、
普通の人間はgoto使いまくりの処理を読むのに慣れていない。
ので、まぁ、使いどころはかなり難しいです。

goto ラベル名;
で、
ラベル名:
というラベルにジャンプします。