はじめに
このページと次のページでC言語でよくつかわれる制御文について説明します。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
※以下の情報は2007年11月現在のものです。ご注意ください。
※このページではC言語の用語が沢山出てきますが、ビギナーの方は各自C言語の初級本なども参照しながら読み進めてください。
制御文
C言語というだけでなにやら難しいと思われる方が多いようです。特に、昔BASICをやっていたという方はC言語に対してカベを作ってしまうことが多いようです。しかし、プログラムというものは基本的な部分は大体同じで、C言語の制御文も主要なものは5つ程度しかありません。
制御文は、C言語で決められている、プログラムの流れを制御するものです。これにより”ある条件”で違う流れのプログラムに切り替えたり、同じ処理をある回数だけ実行したり、ということを指示します。
関係演算子
制御文の説明を始める前に、制御文での条件の表し方について説明します。ある条件を表す場合の1つで、値の大小を表現する「関係演算子」があります。
>
演算子 |
例 |
関係 |
> |
A > B |
AがBより大きい場合true |
>= |
A >= B |
AがB以上の場合true |
< |
A < B |
AがBより小さい場合true |
<= |
A <= B |
AがB以下の場合true |
== |
A == B |
AとBの値が等しい場合true |
!= |
A != B |
AとBの値が等しくない場合true |
たとえば、AとBが変数だったとします。
A = 2;
B = 5;
とすると、
A < B はture
A > B はfalse
という具合になります。制御文ではtrueの時にxxをする、という動きにになります。
論理演算子
値ではなく、論理の条件を表すものに「論理演算子」があります。これは、前のページで説明した論理演算と似ていますが、前ページ論理演算は論理の演算をするものであって、こちらは「条件を表す」もので、制御文の中で使われます。間違いやすいので注意して下さい。
>
演算子 |
例 |
関係 |
&& |
P && Q |
PかつQのAND(論理積) |
|| |
P || Q |
PまたはQのOR(論理和) |
! |
!P |
Pの逆 |
この表の場合、PとQは変数だけではなく、関係演算子をも含みます。論理を判定するのでtrueかfalseの判定条件を表します。
tureとfalseの関係は次の通りです。
A |
B |
A && B |
A || B |
!A |
false |
false |
false |
false |
true |
false |
true |
false |
true |
- |
true |
false |
false |
true |
false |
true |
true |
true |
true |
- |
たとえば、
A = 1;
B = 2;
C = 3;
D = 4;
だったとします。
(A < B) && (C < D) はture
(A < B) && (C > D) はfalse
(A < B) || (C > D) はture
!(C > D) はture
となります。
制御文 if
<if>
「もし??ならxxする」という制御を行う場合はif文を使います。ifは英語で習ったように「もし??」という意味です。
構文は
if ( 条件文 ) { ... }
のようになります。カッコでかこまれた条件文は上の節で説明したような関係演算子や論理演算子が入ります。 カッコの中が true
になると、大カッコ { } で囲まれた部分のプログラムが実行されます。大カッコ内のプログラムは何行でもかまいません。C言語の場合は、プログラムのどこで改行してもかまわないので、if文の場合、基本的な書き方は
if (条件文) {
処理1;
処理2;
・・・
}
という感じで書かれます。
<else>
条件文以外の条件の場合に別な処理をしたい場合はelseを使います。elseは”それ以外”という意味です。
if (条件文) {
処理1;
処理2;
・・・
} else {
処理3;
・・・
}
この場合、条件文がtrueだったら処理1、処理2...が実行されますがfalseの場合は処理3...が実行されます。
<else if>
条件文が複数あり、それに応じた処理も複数ある場合は else if を使います。これは、else if より前に書かれたif文以外の場合、別な条件を判定します。例えば、
if (条件文1) {
処理1;
}else if (条件文2){
処理2;
}else if (条件文3){
処理3;
}
のように書きます。この場合、条件文1がtrueなら処理1が実行され、条件文2がtrueなら処理2が実行され...となります。
{ } について
制御文の{ }ですが、これは複数行のプログラムをまとめる記号になります。処理内容が複数行ではなく、1行以下の場合は、
制御文 (条件文) 処理;
のように一行で書くこともできます。上のif文の場合、
if (条件文1) 処理1;
else if (条件文2) 処理2;
のように書くこともできます。1行以下ですから処理が無い場合もありえます。この場合は
制御文 (条件文) ;
となります。つまり、条件文がtrueだった場合はなにもしないということになります。(これは次のページで説明するwhile文などでよく使われる形態です。
制御文 for
おなじ処理を条件が合うまで何回もつづける、という制御をする場合は for を使います。
for文の構文は次のようになります。
for (変数初期設定; 条件文; 変数増減設定) {...}
for文では変数を1つ用意し、その値を変化させて、条件文の条件がtrueになるまで{ }の中の処理を繰り返します。
例えば、
int a;
for (a = 0; a < 3; a++){
処理1;
処理2;
}
とすると、処理1と処理2が3回繰り返されます。処理の内容を回数ごとに説明しますと、
1)まず、aに0を代入し、条件文を判定します。0<3はtureなので{ }の中を実行します。
2)もう一度for文の行にもどり、a++が実行されます。aは1になるので1<3はtureで{ }が実行されます。
3)もう一度for文の行にもどり、a++が実行されます。aは2になるので2<3はtureで{ }が実行されます。
4)もう一度for文の行にもどり、a++が実行されます。aは3になるので3<3はfalseでfor文が終了します。
1)2)3)では{ }内が実行されますが、4)では判定後は{ }を実行しないでfor文が終了するので{ }内は3回実行されることになります。
このパターンは繰り返し処理の基本形になるので覚えておいて下さい。
では実際に制御文を使った実験をしてみましょう。
準備
<接続>
A33Fの電源を入れるため、USBケーブルをPCへつないで下さい。
A33Fにプログラムを転送するので、ICD2経由でPCへつないで下さい。
<COMポートの確認、ハイパーターミナルの起動>
前のページのようにCOM番号を確認して、ハイパーターミナルを起動して設定してください。
<プロジェクトの作成>
今回も、プログラムは前回作ったソースプログラムを流用してみます。今度は、前回作ったArithmetic.cの環境をそのまま開いてみましょう。
Project->Open を選択します。
「ファイルの場所」で、前回作ったフォルダを指定すると、プロジェクト名に.mcpが付いているファイルがありますのでそれを指定して「開く」を押しますと、前回のプロジェクトが開かれます。
前と同じ状態でMPLABの環境が設定されています。
プログラムの変更
では、ソースプログラムを下のように書き換えてください。
プログラム部分は半角にすることを忘れないで下さい。
変更点は行80と行101〜114の部分です。
以前から、起動時にLEDを3回点滅させていますが、今回のfor文で行97〜99の意味がわかったかと思います。brink( )はLEDを一回光らせる関数です。main部分の上の方で記述しています。
行108〜行112の部分がif文の例です。この例ではif文の説明の説であげた例を使っており、条件文がtrueだったらtrueを表示し、falseだったらfalseを表示させています。
結果は次のようになりました。
おわりに
極端な話、このif文とfor文があればほとんどの制御は記述することができます。しかし、次のページで説明する制御文を使えば、プログラムが書きやすく、もしくは読みやすくなります。
2007年11月30日
|