先週は教科書 [
1]の4章 制御の流れのp.102-117を学
習した.そこでは,関係演算子や論理演算子,
if〜else文の学習を行った.先週の
学習内容は以下の通りで,絶対に理解し,憶えなくてはならない.
- 正しいあるいは誤りを整数の0と1で表す.正しい場合が整数の1で,誤
りの場合が整数の0である.コンピューターは,なんでもかんでも数字で表
すのである.C言語では特別に,0を誤り,それ以外--大体の場合1--
を正しいとして取り扱う.
- 関係演算子は大小関係や等しいか否かについて,計算を行う.これは四則演算子
(+,-,*,/)と同じ演算子なので,計算結果がある.それは,正しい場合(真)
に1,誤り(偽)の場合0 となる.
- 大小関係を表す演算子は4つ(<,<=,>,>=)ある.それぞれ,数学の記号の,,,
に対応する.キーボードにの記号がないので,<=で
代用しているのである.ただし,=<と書いてはならない.
- 例えば,演算3>5の結果は0となる.なぜならば,この式が示して
いる大小関係は誤りだからである.
- 一方,演算3<5の結果は1となる.なぜならば,この式が示して
いる大小関係は正しいからである.
- 大小関係を示す関係演算子とともに,等しいか否かを表す演算子も重要な
役割を果たす.それには,等しいことを表す==と等しくないことを
表す!=がある.これらは,それぞれ,数学記号のとに対応
する.イコールひとつだと代入演算子になるので,イコールをふたつ続け
て等しいことを表す演算子として使用している.はキーボードに記
号がないので,!=を使っている.
- 例えば,演算3==5の結果は0となる.なぜならば,この式が示して
いる等価関係は誤りであるからである.
- 一方,演算3!=5の結果は1となる.なぜならば,この式が示して
いる等価関係は正しいからである.
- 論理演算子は論理が正しいか否かについて,演算を行う.演算結果は,論理が正
しければ1,誤りであれば0となる.論理演算子には,論理和||と
論理積&&,論理否定!の3つがある.
- 論理和は,日本語では「または」英語では「or」と表現される.論理和演
算子をはさむ2つの論理のどちらか一方が正しい,あるいは両方が正しい
場合,演算結果が1となる.両方の演算が誤りの場合のみ0とな
る.
- 例えば,演算 9<7 || 5<3 の結果は0となる.なぜなら
ば,演算子||の両側の式は誤りであるからである.
- 次に,演算 9<7 || 3<5 の結果は1となる.なぜなら
ば,論理和演算子をはさむ片方の式が正しいからである.
- 言うまでもないが,演算 7<9 || 3<5 のように,両方の式が
正しい場合も,演算の結果は1となる.
- 論理積は,日本語では「かつ」英語では「AND」と表現される.論理積演
算子をはさむ2つの論理の両方の演算が正しい場合のみ1とな
る.どちらか一方が誤り,あるいは両方が誤りの場合,演算結果が0となる.
- 例えば,演算 3<5 && 7<9 の結果は1となる.なぜなら
ば,演算子||の両側の2つの式は正しいからである.
- 次に,演算 3<5 || 9<7 の結果は0となる.なぜなら
ば,論理和演算子をはさむ片方の式が誤りだからである.
- 言うまでもないが,演算 5<3 || 9<7 のように,両方の式が
誤り場合も,演算の結果は0となる.
- 論理否定は,論理を反転させる.英語では,「NOT」と表現される.
- 例えば,演算!(3<5)の結果は0となる.なぜなら
ば,3<5の演算の結果は1,そして否定演算子!でそ
れを反転させているので,!(3<5)の演算結果は0となる.
- 一方,演算 !(5<3) の結果は1となる.なぜなら
ば,5<3の演算の結果は0,そして否定演算子!でそ
れを反転させているので,!(5<3)の演算結果は1となる.
- これまで,学習してきた演算子には,算術演算子(+,-,*,/,%)と関係演算子
(<,<=,>,>=),論理演算子(||,&&,!)がある.これらの演算子
(オペレーター)と被演算子(オペランド)2を組み合わせて式ができあがる.数学同様,演算子には優先順位があり,
先に計算する演算子が決まっている.表1の上の演
算子から計算を行う.
表 1:
演算子の優先順位(上のほうが優先順位が高い)
種類 |
演算子 |
|
括弧 |
() |
|
論理否定 |
! |
|
乗除 |
* / |
|
加減 |
+ - |
|
比較 |
< <= > >= |
|
等価 |
== != |
|
論理積 |
&& |
|
論理和 |
|| |
|
- 「もし○○ならば,△△する」という構文--とくに△△の部分が1つの文--は次
のように書く.
if(a<=10) printf("aは,10以下です\n");
- 「もし○○ならば,△△し,□□し,」のように複数の文を実行する場
合は,次のように書く.
if(0<=a && a<=10){
printf("aは,0以上\n");
printf("かつ\n");
printf("aは,10以下です\n");
}
実行させたい複数の文は,括弧{ }でくくり,ブロック化するのがこつで
ある.教科書ではこれを複文と言っている.
- 「もし○○ならば△△し,さもなければ□□する」というように,条件により二者択一の
選択処理は,次のように書く.
if(0<=a && a<=10){
printf("aは,0以上\n");
printf("かつ\n");
printf("aは,10以下です\n");
}else{
printf("aは,0未満\n");
printf("または\n");
printf("aは,10より大きい\n");
}
先週は,条件式(制御式)により,プログラムが2つに分岐する構文を学習した.本日は,
さらに進んで,条件により,3つ以上に分岐する構文を学習する.教科書 [
1]の4章のp.117-131の学習を行う.そこで,諸君が身に付けるべきことを以下に示す.
- switchを使った多分岐のプログラムが書ける.条件式の値が整数の場合,
switch文を使う.
- if〜else if〜elseを使った多分岐のプログラムが書ける.条件式の値が整
数でない場合,この構文をつかう.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年7月19日