C言語の基礎 |
if, for, while, do, switch, break, continue, return, goto
制御文は文の流れを制御するわけであるが、その文についてまとめておく。
以降の制御文の説明で「文」、「文1」、「文2」などと示した部分は、上のどれでもが当てはまる。
(1) 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があった。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);
}
|
(3) for文
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);
}
|
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);
}
|
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);
}
}
|
Copyright © 2001 Hiroshi Masuda |