「まず覚えるCの文法」
P25: for文
//-------------------------------------
#include <stdio.h>
int main(void){
int i, k=1;
for(i=1; i<10; i++){k=k*i;}
printf("k=%d\n", k);
return 0;
}
//-------------------------------------
P26: break文
//-------------------------------------
#include <stdio.h>
int main(void){
int k,a,b,c,d,m,n;
a=b=c=d=m=n=0;
while(1){
printf("k="); scanf("%d", &k);
if(k<0){break;}
if(k>=80){
a++; if(k==m){n++;}
if(k>m){m=k; n=1;}
}
else if(k>=70){b++;}
else if(k>=60){c++;}
else{d++;}
}
printf("%d,%d,%d,%d;", a, b, c, d);
printf("%d,%d\n", m, n);
return 0;
}
//-------------------------------------
P27: switch文
//-------------------------------------
#include <stdio.h>
int main(void){
int k,a,b,c,d,m,n;
a=b=c=d=m=n=0;
while(1){
printf("k="); scanf("%d", &k);
if(k<0){break;}
switch(k/10){
case 10:
case 9:
case 8: a++; if(k==m){n++;}
if(k>m){m=k; n=1;}
break;
case 7: b++; break;
case 6: c++; break;
default: d++;
}
}
printf("%d,%d,%d,%d;", a, b, c, d);
printf("%d,%d\n", m, n);
return 0;
}
//-------------------------------------
|
P25 のプログラムの
for(i=1; i<10; i++){k=k*i;}
の部分は
i=1; while(i<10){k=k*i; i++;}
と同じ処理を行います.一般に
式1; while(式2){文 式3;}
は,つねに
for(式1; 式2; 式3){文}
と書き換えることができます.ただし「文」は実行文
を意味します(宣言文は不可)(#11&).
・プログラムを実行すると,1 から 9 までの積が
k=362880
と表示されます.
・「i=1」は式,「i=1;」は文です(#15).
・「i=1,k=1」も式で,「k=i=1」と等価です.また,
文「i=1,k=1;」は「i=1; k=1;」と等価です(@37).
・単純な while 文「while(k>0){k--;}」でも for 文
で「for(; k>0;){k--;}」と表現できます.
P26 のプログラムでは break文を使って P24 のプロ
グラム中の
printf("k="); scanf("%d", &k);
の重複を避けています.
・break文は(最も内側の)while文,for文,switch文
の直後にジャンプします(#26).
・break文ほど使用頻度は高くありませんが,continue
文で(最も内側の)while文の直前にジャンプさせる
ことができます.
for(式1; 式2; 式3){文}
の{文}中で continue 文を実行したときは等価な
while 文の先頭の処理である 式2 の真偽の判定に
戻ります(#26).
P27 のプログラムでは 0≦k≦100 を前提に P24 のプロ
グラム中の if-else 文による分岐を switch文を使って
書き換えています.
・k/10 の値は小数部を切り捨てます(#12).
.switch文の部分での処理内容は
if(k/10==10 || k/10==9 || k/10==8){
a++; if(k==m){n++;} if(k>m){m=k; n=1;}
}else if(k/10==7){
b++;
}else if(k/10==6){
c++;
}else{
d++;
}
と等価です.
・k/10==7 のときはジャンプテーブルによって goto文
と同様に,直接「case 7:」の位置にジャンプします.
したがって,先頭から条件式の真偽を調べる if-else
文に比べて高速に分岐できます.
・「case 式:」の式は相異なる整数値の定数式です.
式の値からジャンプテーブル内の相対アドレスを計算
します.
|