C,C++分科会テキスト03

目的

条件文や繰り返しをやります。これで、いろいろな面白い操作が可能です。

目次

while
条件が続く間繰り返します。
for
繰り返した回数をカウントしながら繰り返せます。
if
条件により文を行うか行わないかを決定します。
switch-case
ifと似たようなものです。

while

while文は繰り返しです。
メイン関数の中で、

while(1){
  …
}
			
とやると、…のところに書いてある命令を無限に繰り返してくれます。
このままではぜんぜん便利ではありませんね。

1というのは「眞」であって、0というのが「僞」です。本当は値の意味を示してくれる型があるべきですが、無いことになっています。 眞ならば繰り返して僞ならばwhileの中の文を実行しないという意味です。

さて、まともに使うときは変数を使ってこんなことをします。

int i=0;
while(i<5){
  printf("%d\n",i);
  i++;
}
			
これを実行するとまず、i=0だから、i<3なので、0を表示します。 i++を実行すると、iが1になって、また、whileの判定を行います。 …とやってiが4のときにi++をすると次の繰り返しではwhileの()内の条件を満たさなくなります。 するとやっとここのwhile(){…}という全体が終わります。

<に関する補足をします。i<jとかi>jとかi<=jとかi>=jとかあります。 それぞれ<、>、≦、≧に対応して、この不等号が成り立てば眞(1)成り立たなければ僞(0)となります。
等号もあります。==です。 =に対応し成り立てば眞(1)成り立たなければ僞(0)です。
!=というのもあります。これは≠に対応して以下同文です。
あと&&と||と!にも触れておきますと、

1 && 1 : 1
1 && 0 : 0
0 && 1 : 0
0 && 0 : 0

1 || 1 : 1
1 || 0 : 1
0 || 1 : 1
0 || 0 : 0

!1   : 0
!0   : 1
			
という規則です。つまりandとorとnotです。
1と0以外の整数に関してこういう演算子を用いるのはお勧めできません。(0以外は1と同じものとして扱われます。)

for

whileをもっと使いやすくしたものです。たとえばさっきのwhile文は、

int i;
for(i=0;i<5;i++){
  printf("%d\n",i);
}
		
とかけます。これだけなので、単純です。
for(変数のリセット;繰り返す条件;一回実行後に行う動作)
		
ということです。forはこのような使いかた以外の使い方はあまりしないです。

if

ifは実行するかしないかを決定させます。 if(){}の{}の間に囲まれた部分が()のなかが1であるときには実行され、0であるときには実行されません。 if(){}の直後にelse {}と書けばif{}ガ実行されなかった場合の動作がかけます。 これらの組み合わせとして、else if(){}なるものがあります。 この直前のifが実行されなかったとき初めて()のなかを確認して0なら不実行1なら実行となります。
#include<stdio.h>

int main(int argc, char** argv)  //main関数の引数というのはコマンドラインで入力されます。
{
  int i;
  for(i=0;i<10;i++){
    if(i<3){
      printf("%d",i);
    }
    else if(i>6){
      printf("%d",i);
    }
    else{
      printf("*");
    }
  }
}
		
とすれば、このように表示されます。
012*****789
		

switch-case

ifよりも限定されるが結構使いやすい方法です。 ifが「上から順に実行して範囲を絞っていく」という雰囲気をもつのに対し
switch-caseは一つの変数について何のときはこっち何のときはこっちとスイッチする雰囲気です。

あるint型やchar型の変数(または値)に対して対してその数が指定した値をとるかどうかを調べます

#include<stdio.h>

int main(int argc, char** argv)
{
  int i;
  for(i=0;i<10;i++){
    switch(i){
      case 3:
        printf("*");
        break;
        printf("$");
      case 4:
        printf("\\");  //\\は\そのものをあらわしています。
        break;
      case 5:
        printf("%");
        break;
      case 6:
        printf("#");
        break;
      default:
        printf("%d",i);
        break;
    }
  }
}
		
とすればこうなります。
012*\%#789