C言語の基礎
前へ 目次へ 次へ 

2-5 制御文

 制御文は、文の流れを制御するものである。Quick BASIC同様に次のような制御文がある。(すべて小文字である)
if, for, while, do, switch, break, continue, return, goto

 制御文は文の流れを制御するわけであるが、その文についてまとめておく。

 以降の制御文の説明で「文」、「文1」、「文2」などと示した部分は、上のどれでもが当てはまる。


(1) if文

IF
if(条件式または式)
   文1
else
   文2

 条件式には、Quick BASICと同様に等号、不等号による判定と、計算結果を利用した判定(計算結果が0なら偽、それ以外が真)ができる。さらに論理演算子(&&, ||)による条件の組み合わせもできる。


 Quick BASICとの違いは、次のとおりである。

入力したデータが0であれば"zero"と表示するプログラム

BASIC C言語
INPUT "DATA=",A
IF A=0 THEN
  PRINT "ZERO"
END IF
END
/* sample2.c */
#include <stdio.h>
int main(void)
{
    int a;
    printf("DATA=");
    scanf("%d",&a);
    if(a == 0)
        printf("zero\n");
}


入力したデータが0以外であれば"not zero"と表示するプログラム

BASIC C言語
INPUT "DATA=",A
IF A<>0 THEN
    PRINT "NOT ZERO"
END IF
END
/* sample3.c */
#include <stdio.h>
int main(void)
{
    int a;
    printf("DATA=");
    scanf("%d",&a);
    if(a != 0)
        printf("not zero\n");
}


入力したデータが1から9までであればそのデータの10倍を、それ以外はデータの2乗を表示するプログラム

BASIC C言語
INPUT "DATA=", A
IF A>0 AND A<10 THEN
    B=A*10
    PRINT B
ELSE
    B=A*A
    PRINT B
END IF
END
/* sample4.c */
#include <stdio.h>
int main(void)
{
    int a, b;
    printf("DATA1=");
    scanf("%d",&a);
    if(a > 0 && a < 10){
        b = a * 10;
        printf("%d\n",b);
    }else{
        b = a * a;
        printf("%d\n",b);
    }
}


入力したデータが1であればそのデータの10倍を、2であればそのデータの20倍を、それ以外は0を表示するプログラム(多重分岐)

BASIC C言語
INPUT "DATA=",A
IF A=1 THEN
    B=A*10
ELSEIF A=2 THEN
    B=A*20
ELSE
    B=0
END IF
PRINT B
END
/* sample5.c */
#include <stdio.h>
int main(void)
{
    int a, b;
    printf("DATA=");
    scanf("%d",&a);
    if(a == 1)
        b = a * 10;
    else if(a == 2)
        b = a * 20;
    else
        b = 0;
    printf("%d\n",b);
}


(2) switch文

 上(sample5.c)のような多重分岐を実現する制御文として、Quick BASICにはSELECT CASEがあった。
 Cでは、switchを使う。 SWITCH
switch(式){
  case 値1:
    文1
    break;
  case 値2:
    文2
    break;
  case 値3:
    文3
    break;
  default:
    文4
}

式の値が値1と等しいときは文1が実行され、break文でswitchのブロックを抜け出す。式が値2、値3と等しいときも同じように文2、文3がそれぞれ実行され、break文でswitchのブロックを抜け出す。式がどの値とも等しくない場合は、default以降の文が実行される。


入力したデータが1であればそのデータの10倍を、2であればそのデータの20倍を、それ以外は0を表示するプログラム(多重分岐)

BASIC C言語
INPUT "DATA=",A
SELECT CASE A
    CASE 1
        B=A*10
    CASE 2
        B=A*20
    CASE ELSE
        B=0
    END SELECT
    PRINT B
END
/* sample6.c */
#include <stdio.h>
int main(void)
{
    int a, b;
    printf("data=");
    scanf("%d",&a);
    switch(a){
      case 1:
          b = a * 10;
         break;
      case 2:
          b = a * 20;
          break;
      default:
          b = 0;
    }
    printf("%d\n",b);
}
 switchの式には、整数値を表現するものしか書けない。(変数aを intまたはcharで宣言したもの)したがって、文字列も書けない。同様にcaseの値も整数の定数、文字定数、定数の式しか書けない。

 

(3) for文

FOR FOR2
for(初期設定; 繰り返し条件; 増分式)
  文

 繰り返し条件は、if文と同様で、等号、不等号による判定と、計算結果を利用した判定(計算結果が0なら偽、それ以外が真)ができる。さらに論理演算子(&&, ||)による条件の組み合わせもできる。

1から100までの和を求めるプログラム

BASIC C言語
X=0
FOR I=1 TO 100
    X=X+I
NEXT I
PRINT USING "WA=#####";X
END
/* sample7.c */
#include <stdio.h>
int main(void)
{
    int x = 0, i;
    for(i = 0; i <= 100; ++i)
        x = x + i;
        printf("wa=%d\n",x);
}
 繰り返しの条件は、変数iが100以下の時、と設定する。(変数iが100以下である間、繰り返し実行する)
増分は、++i(インクリメント)を使う。(i=i+1でもよい)


1から100までの偶数と奇数の和を求めるプログラム

BASIC C言語
GU=0
KI=0
FOR I=1 TO 99 STEP 2
    KI=KI+I
    GU=GU+I+1
NEXT I
PRINT USING "GUUSUU=####";GU
PRINT USING "KISUU=####";KI
END
/* sample8.c */
#include <stdio.h>
int main(void)
{
    int gu = 0, ki = 0;
    int i;
    for(i = 1; i < 100; i = i + 2){
        ki = ki + i;
        gu = gu + i + 1;
    }
    printf("guusuu=%d\n",gu);
    printf("kisuu=%d\n",ki);
}


1から100まで順に加算していき、和が300以上になるのはいくらの時かを求めるプログラム 

BASIC C言語
X=0
FOR I=1 TO 100
    X=X+I
    IF X>=300 THEN
        EXIT FOR
    END IF
NEXT I
PRINT USING "ANS=###";I 
END
/* sample9.c */
#include <stdio.h>
int main(void)
{
    int x, i;
    for(i = 1, x = 0; x < 300; ++i)
        x = x + i;
    --i;
    printf("ans=%d\n",i);
}
 初期設定の部分で合計用の変数xも初期化している。","(カンマ)で区切って複数書くこともできる。
 繰り返し条件に変数iではなく、変数xを判定に使っている。BASICのように制御変数を決める必要はない。繰り返しの条件が判定できればいいのである。

 Quick BASICのプログラムと同じようにに書くこともできる。C言語では、forループからの脱出には、breakを使う。

for(i = 1,x = 0; i <= 100; ++i){
    x = x + i
    if(x >= 300)
        break;
}


入力したデータの2倍を計算して表示することを繰り返し行うプログラム
 0を入力すると終了する。

BASIC C言語
DO
    INPUT "DATA=",A
    IF A=0 THEN
        EXIT DO
    END IF
    B=2*A
    PRINT USING "ANS=#####";B
LOOP
END
/* sample10.c */
#include <stdio.h>
int main(void)
{
    int a, b;
    for(;;){
        printf("data=");
        scanf("%d",&a);
        if(a == 0)
            break;
        b = 2 * a;
        printf("ans=%d\n",b);
    }
}
 "for(;;)"のようにすべてを省略することで、永久ループができる。よく使われる手法であるから覚えておこう。


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system