for文

for文

プログラムの基本的な構造にループ(繰り返し処理)という概念があります。ループ処理の一つにfor文という命令があります。ここでは、for文を使って1から10までの和を計算するプログラムをつくりfor文の使い方を解説します。

 1から10までの和を計算

1から10までの和をC言語プログラムで計算します。そこで以下のようにコードを組んで実行してみてください。

#include <stdio.h>
int main(){
	int S=0;
	printf("0");
	int i;
	for(i=1;i<=10;i++){
		S=S+i;
		printf("+%d",i);
	}
	printf("=%d\n",S);
	return 0;
}

コンパイルして実行すると

0+1+2+3+4+5+6+7+8+9+10=55

と表示されます。

解説

このプログラムのポイントはfor文です。

for文

for(初期条件;継続条件;ループのたびに実行される命令){
    命令;
}

今回の場合、初期条件が

i=1;

なので、iが1からはじまります。そして、命令

S=S+i;
printf("+%d",i);

により、Sに1が追加され、+1が表示されます。このループのあと再び先頭に戻り、

i++;

が実行されます。これによりiがインクリメントされて2になります(MEMO参照)。

i<=10

を満たすので、再びループ内が実行されます。図でまとめると以下の様な流れです。

loop

最終的にi=10まで繰り返されるので

 S=0+1+2+\cdots+10

が変数Sに値となり55が表示されることになります。

 「++」はインクリメント演算子と呼ばれ、変数の値を1繰り上げます。例えば

int a=0;
a++;

ならaの値は1になります。基本的に

a=a+1;

と同じ意味です。わかりにくかったら、このかき方でも構いません。

 インクリメント演算子とは逆のデクリメント演算子--」というものもあります。この場合、変数の値を1繰り下げます。

int a=2;
a--;

なら、aの値は1になります。「++」の位置は、変数の前につける場合と後ろにつける場合とで実行のタイミングが変わります。

int a=0;
int b=++a;

なら「aがインクリメントされて、bに代入される」ので、bは1となります。一方

int a=0;
int b=a++;

なら「bに代入されて、aがインクリメントされる」ので、bは0となります。まあ、わたしはめったに使いませんが。

インクリメントと足し算では演算の仕方がことなります。つまり、

int a=0;
a++;

int a=0;
a=a+1;

では、コンピュータの演算法が違います。インクリメントの方がコンピュータは速く演算できます(アセンブラを勉強するとよくわかる)。プログラムを速く動かせるようにするのに、このことは知っておくといいでしょう。(ただし、コンパイラがa=a+1をインクリメント処理として扱うと思うので、どちらも処理速度は変わらないと思いますが)

著者:安井 真人(やすい まさと)