switch 文の中の case 文は定数式でなければならない。
従って、
case year % 5 == 0:
などという書き方はできない。
if 文で判定するなら、
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 )
printf("閏年です\n");
else
printf("平年です\n");
となる。しかし無理する必要は無い。
for文
for 文は、所定回の繰り返しをさせる文であり、以下のような形をしている。
for (初期文; 条件; 反復文)
本文;
hello10.csummation.csum_square.cを作れsum_odd.c を作れfactorail.c を作れ。<limits.h> で定義されている INT_MAX を越えてしまう。演算結果が INT_MAXを越えた時、計算を中止するようにプログラムを書き改めよ。また、階乗の計算を long long int 型の変数で行わせるとどのくらいの桁数まで計算できるようになるか。int 型変数を入力し、和と平均値を出力するプログラム average1.cwhile文
while 文は前判定反復であるので、繰り返しの前に条件式による判定がくる。
従って、条件式が真でなければ、反復は一度も実行されない。
for (初期文; 条件; 反復文)
本文;
という for 文は、while 文を用いて以下のように書き換えることができる。
初期文;
while(条件) {
本文;
反復文;
}
for 文の方が反復条件を一カ所にまとめて記述できるので、C プログラマは for 文を好む傾向にある。
while.cdrill.c を作れwhile 文を用いて作れdo文
do 文は後判定反復であるので、繰り返しの判定条件が処理の後ろにくる。
従って、最低一回は処理が実行される。
do {
文;
...
} while(条件式);
do-while.ccountdown.c を do 文を用いて作れsummation2.cgoto文
構造化プログラミングを用いると goto 文は使わないでプログラムを書くことができる。goto 文を用いる場面は滅多にない。構文は
goto ラベル;
のように用いる。ここで「ラベル」は変数名と同じ規則に従って名前をつけることができる。文にラベルをつけるには、
ラベル: 文;
とする。例えば以下のような使い方をする。
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
if ( data == 0 )
goto found;
....
....
}
}
printf("Not found\n");
return 0;
found :
printf("Found\n");
return 0;
continue文
continue 文は、ループ本体の中にあって、処理が continue 文に出会うと、ループの先頭から処理が実行されることになる。
continue.cbreak文
break 文はループを終了させる。switch 文においては switch 文を終了させる。
break 文を用いて書き直すbreak.c
? は条件式 if 文と代入が組み合わさったものである。書式は
条件式 ? 値1 : 値2
である。条件式が真ならば値1が代入され、偽ならば値2が代入される。
max.c