このドキュメントは http://icrus.org/c_language_beginers_course/ 上にあります.
1: #include <stdio.h>
2: void main(void){
3: int i, sum;
4:
5: sum=0;
6: i=1;
7: while( i<=10 ){
8: sum+=i;
9: printf( "i=%d sum=%d\n", i, sum );
10: i++;
11: }
12: getchar();
13: }
コンパイル・実行すると,画面に次のように出力されます.
i=1 sum=1
i=2 sum=3
i=3 sum=6
i=4 sum=10
i=5 sum=15
i=6 sum=21
i=7 sum=28
i=8 sum=36
i=9 sum=45
i=10 sum=55
その後,リターンキーを押すとプログラムは終了します.
あなたの予想通り,7行目の条件式(i<=10)(意味:変数iが10以下のとき)を条件式(i<=100)に変更したら1~100までの合計を表示する事ができます.8行目を
sum *= i;( sum = sum * i; と同じ)に変更したらどうなるでしょうか?ためしに実行してみて下さい.
while文の構成は次のようになります.
while(条件式){
条件式が真(正しい)のあいだ繰り返し実行するブロック 単文(1つの文)または複文(複数の文)で構成 条件式中の変数を変化させる文
} while文の構成
条件式中の変数を変化させる文が10行目のi++;にあたります.
これであなたは,C言語を使って繰り返しの計算ができるようになりました.いくら繰り返しても条件式が真のままのプログラムを作ると,無限にwhileブロックの実行を繰り返すプログラム(無限ループのプログラム)になってしまいますから注意して下さい.
1: #include <stdio.h>
2: void main(void){
3: int i, sum;
4:
5: sum=0;
6: for( i=1; i<=10; i++ ){
7: sum+=i;
8: printf( "i=%d sum=%d\n", i, sum );
9: }
10: getchar();
11: }
コンパイル・実行すると,[結果5-1]と全く同じ結果が得られます
つまり[課題5-1]と[課題5-2]のプログラムは全く等価であるといえます.for文は次のような構成になります.
for( 初期化式; 継続条件式; 再初期化式 ){
継続条件式が真(正しい)のあいだ繰り返し実行するブロック
単文(1つの文)または複文(複数の文)で構成
}
初期化式は最初の1回だけ実行されます. 再初期化式はブロックの最後に到達するごと,その都度実行されます. for文の構成
また,「+=」の種類の演算子には,他に次のような種類があります.
演算子 | 使い方 | 意味 | 同じ意味の書き方 |
---|---|---|---|
+= | a+=b; | 変数aに変数bだけを加える | a=a+b; |
-= | a-=b; | 変数aから変数bだけ減ずる | a=a-b; |
*= | a*=b; | 変数aに変数bを掛ける | a=a*b; |
/= | a/=b; | 変数aを変数bで割る | a=a/b; |
%= | a%=b | 変数aにaを変数bで割った余りを代入 | a=a%b; |
注意:このときaが整数なら小数点下は切り捨てられます.
また,「++」の種類の演算子には,他に次のような種類があります.
演算子 | 使い方 | 意味 | 同じ意味の書き方 |
---|---|---|---|
++ | a++; | 変数aに1加える | a=a+1; |
-- | a--; | 変数aから1減じる | a=a-1; |
for文の方は再初期化式を明示する必要があるときに好んで使われます.しかし,これまで示してきたようにwhile文,for文は全く同じ用途に使うことができます.
1: #include <stdio.h>
2: void main(void){
3: int i, sum;
4:
5: sum=0;
6: i=1;
7: while( 1 ){
8: if( i>10 )
9: break;
10: sum+=i;
11: printf( "i=%d sum=%d\n", i, sum );
12: i++;
13: }
14: getchar();
15: }
コンパイル・実行すると,[結果5-2]と全く同じ結果が得られます.通常,break文は例外的処理が必要なときなどに実行しループから抜け出します.
1: #include <stdio.h>
2: #define MAX 10
3: void main(void){
4: int i, sum;
5:
6: sum=0;
7: for( i=1; i<=MAX; i++ ){
8: sum+=i;
9: printf( "i=%d sum=%d\n", i, sum );
10: }
11: getchar();
12:}
2行目を追加し,7行目を10をMAXに変更しただけですから,コンパイル・実行すると,[結果5-2]と全く同じ結果が得られます.
このように#define文を使うとおなじ最大値という意味の10という数値をプログラム中で何度も使用するとき,#define文の書換1回で済むので大変便利です.また,10という全く意味のない数値を使うより意味のあるMAXという文字列を使うと大変読みやすいプログラムになります.できるたで,#define文を使って意味のない数値を意味のある文字列に置き換え,読みやすいC言語プログラムを作りましょう.
while( 条件式 ){
文;
}
for( 初期化式; 継続条件式; 再初期化式 ){
文
}
break;
#define 文字列1 文字列2
おつかれさまでした.以上,第5回はwhile文,for文でした.
このドキュメントは http://icrus.org/c_language_beginers_course/ 上にあります.
2016,12
ssatoh@
足立工科大学 工学部 情報通信工学科