C言語入門::制御構造
制御構造とは,プログラムの流れを決めるものです.これが分かると,やっとプログラムらしいプログラムがかけるようになります.
ユーザからの入力を受け付けても,毎回同じことをしても面白くないですね.そこで条件によって処理の内容を変えたりすることが必要になります.
if~else~
条件によってプログラムの動作を変えるときは,if文を使います.使い方は,
if (条件式) 条件が成り立ったとき実行される処理
です.
#include <stdio.h> int main() { char c; printf("文字を入力してください:"); c = getchar(); if (c=='A') { printf("「A」が入力されました\n"); } return 0; }
大文字と小文字は区別されますので,大文字で入れないと条件は成り立ちません.
「{,}」は複数の文をまとめる働きがあったのを覚えていますか?すなわち,ここでは,「{,}」を省略して書いても構いません.
#include <stdio.h> int main() { printf("文字を入力してください:"); if (getchar()=='A') printf("「A」が入力されました\n"); return 0; }
getchar()もifの中に書いて,こんな風に書いても同じです.
さて,「A」以外が入力されたときに別のメッセージを出したい時はどうしたら良いでしょうか.elseを使います.
#include <stdio.h> int main() { char c; printf("文字を入力してください:"); c = getchar(); if (c=='A') { printf("「A」が入力されました\n"); } else { printf("「A」以外が入力されたようです\n"); } return 0; }
elseの後にさらにif文を書くことも出来ます.
#include <stdio.h> int main() { char c; printf("文字を入力してください:"); c = getchar(); if (c=='A') { printf("「A」が入力されました\n"); } else if (c=='B') { printf("「B」が入力されました\n"); } else { printf("AでもBでもありません\n"); } return 0; }
switch
ifをたくさん並べても良いですが.
#include <stdio.h> int main() { char c; printf("文字を入力してください:"); c = getchar(); switch (c) { case 'A': printf("おはよう\n"); break; case 'B': printf("こんにちは\n"); break; case 'C': printf("こんばんは\n"); break; default: printf("その文字に対する言葉は知りません\n"); } return 0; }
for (処理を繰り返す)
for (初期化;繰り返す条件;値を変化させる式) 繰り返す処理
1~nまでの和を求めるプログラムを書いてみます.
#include <stdio.h> int main() { int n,sum,i; printf(" n= "); scanf("%d",&n); sum = 0; for(i=1;i<=n;i++) { sum = sum+i; } printf(" 1+2+3+...+n = %d\n",sum); return 0; }
だれですか,「n*(n+1)/2」と書けばいいと思った人は.そういう人は,階乗を求めるプログラムに変えてみてください.(最近のC言語のライブラリにはΓ(ガンマ)関数があるかもしれませんが,ここでは使わないで)
breakを使うと繰り返しを途中で中断できます.また,continueで今回の繰り返しの最初に戻ることができます.
例:
underconstruction...
while (条件が成り立つ間,繰り返す)
while (繰り返す条件) 繰り返す処理
whileがあればforと同じこともできます.
#include <stdio.h> int main() { int n,sum,i; printf(" n= "); scanf("%d",&n); sum = 0; i=1; while(i<=n) { sum = sum+i; i++; } printf(" 1+2+3+...+n = %d\n",sum); return 0; }
whileでもbreakとcontinueは使えます.
do~while
whileの条件のチェックを後に持ってくることが出来ます.そのためには do を使います.
goto
なれないうちは使わない方が良いです.
まとめ
- 条件で処理を分けたい:if
- ある回数だけ繰り返したい:for
- 条件が満たされている間繰り返したい:while
- 値ごとに処理を分けたい:switch
残り
説明していない単語の残りは以下の通りです.
auto,const, enum,extern, register,return,sizeof,static, struct,typedef,union,volatile
かなり減ってきました.普段からC言語でプログラムを書いている人でも,知らないものがあるかもしれません.
ちょっとした小話
幾つかの構文が出てきましたが,これらは楽をするためのものです.極端な話,ifとgotoがあれば,forやwhileは必要ありません.繰り返しをしたいとき,forかwhileかで迷ったら,「この場合どちらが楽か」を良く考えてください.
この文書の履歴
- 2006-04-XX まだ未公開