「まず覚える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 式:」の式は相異なる整数値の定数式です.
式の値からジャンプテーブル内の相対アドレスを計算
します.
|
最新の画像[もっと見る]
- g++による演習 (5) 11年前
- g++による演習(4) 11年前
- g++による演習 (3) 11年前
- g++による演習 (2) 11年前
- g++による演習 (1) 11年前
- 構造化チャート 11年前
- gccによる演習 (7) 11年前
- 離散コサイン変換 (5) 11年前
- L8プログラミング (0) 11年前
- 離散コサイン変換 (4) 11年前
※コメント投稿者のブログIDはブログ作成者のみに通知されます