人間とコンピューターの大きな違いの一つを挙げるとすれば、コンピューターは同じことを何度も繰り返すことができる、でしょうか。
1から10までの和を求めるためには、「1+2+3+・・・+9+10」と計算することができますね。
とても簡単に計算できます。
でも、1から100,000,000までの和を求めよ、と言われたらどうでしょうか。
「1+2+3+・・・+9+10+・・・99,999+100,000+100,001+100,002+・・・+999,999+1,000,000+1,000,001+1,000,002+・・・99,999,999+100,000,000」
足し算するだけです。
決して難しい計算ではありませんが、実際にこの方法で計算ができる人間は、そうはいないと思います。
とても面倒ですからね。
でも、コンピューターなら一瞬で計算してしまいます。

繰り返し処理はプログラムで多用される

コンピューターを使うメリットは、人間であれば面倒な繰り返し処理であっても、何万回、何億回と、苦もなく一瞬で処理することにあると言えるでしょう。
実際、繰り返し処理はプログラムで多用されます。
これから本格的にプログラミングをしていくにあたって、しっかりと身に付けていただきたい処理の一つです。
それでは、1から10までの和を求めるプログラムを作成して、繰り返し処理の基本形を学んでいきましょう。
※プログラム1

main() {
int i,n=10,x=0;
for(i=1; i<=n; i++) x=x+i;
printf("答えは %d です。\n",x);
}

※プログラム1の実行結果

答えは 55 です。

ルール1.for文を使って繰り返し処理ができる

C言語で繰り返し処理をさせたいときは、for文を使用します。
実は他にも繰り返し処理の方法がありますが、まずはfor文で繰り返しができると覚えてくださいね。
「※プログラム1」は、変数iの値が1から10まで1刻みで繰り返し、繰り返している間、変数xに変数iの値を加えて、最後に変数xの値を出力しています。
ところで「※プログラム1」では、ちょっと見慣れない記述がありますね。
はい、そうです。
「i++」という記述方法を初めて使いました。
C言語では、i=i+1という記述を i++ と省略して記述することができます。
この記述方法は、for文で頻繁に使いますので、必ず覚えるようにしてくださいね。
他に目新しいことはありませんね。
プログラムを見れば、何となくiが1から10まで変化していくんだな、ということが分かっていただけると思います。
今のところは、何となく分かれば十分です。
あれこれ頭で考えるよりも、実際に自分自身でプログラミングをして「身体で覚える」方が、何倍も早くC言語をマスターできますよ。
いろいろと変数の値を変えたりしながら、プログラミングしてみましょう。

ルール2.for文に「;」だけを書くと空ループ(時間稼ぎ)になる

さて、「※プログラム1」では、for文に x=x+1 という式がありますね。
この式がなくても、for文は成り立ちます。(※プログラム2)
※プログラム2

main() {
int i, n=10;
for(i=1;i<=n;i++) ;
}

このように、式のないfor文も記述することもできます。
文法的に何ら問題ありません。
実は、数十年前の組み込みプログラミングの世界においては、処理の時間稼ぎのためにfor文を使って空ループをさせることもありました。
ですが、for文を使った空ループによる時間稼ぎは、あまり好ましい記述とは言えません。
時間稼ぎを目的として使用することは控えた方がよいでしょう。
では、なぜ紹介したのか。
これから本格的にプログラミングをするようになりますと、他人の書いた古いプログラムを見る機会が多くなります。
そのときに、このような記述をしているプログラムに出会うかも知れません。
for文の空ループには、時間稼ぎの意味があることを知っておくことは、他人のプログラミングを読むときの手助けになることでしょう。
(でも、繰り返しますが、何らかの事情で時間稼ぎが必要になったとしても、for文の空ループで対処するのは控えた方がよいです)

C言語超入門の第5回まとめ

さて、C言語超入門(第5回)では、1から10までの和を求めるプログラムを参考にしながら、繰り返し処理について学びました。
でもちょっと気になったことがありませんか。
それは、複数の実行文を繰り返すにはどうしたらよいのか、ですね。
次回のC言語超入門(第6回)では、複数の実行文を繰り返す「ブロック文」について、ご説明いたします。
どうぞお楽しみに。
ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。
<追伸>
1からnまでの和を求めるためには、ループ処理を使わずとも、「n × (n+1) / 2」という公式で求めることができます。
気が付きましたか。
例えば1から10までの和を求めるのでしたら、「※プログラム3」のように記述できます。
※プログラム3

main() {
int x,n=10;
x=n*(n+1)/2;
printf("答えは %d です。\n", x);
}

「※プログラム1」と比較してみてください。
とてもシンプルになりましたね。
このようにプログラムを最適化する考え方は今後のプログラミングにおいて、とても大切になってきます。