平成17年8月22日
繰り返し処理 (for) |
for(i=0; i<20; i++){ /*
20回繰り返す。(iは0から19まで) */
printf("Repeat !\n");
}
}
[A]================================
まず、for(i=0; i<20; i++)を見てみましょう.
この文は「iを0から1つずつ増やしな
がら,以下を繰り返す.ただし,i<20の間に限る」と読みます.
見慣れぬ表現 i++ がありますが,これは i = i + 1, すなわち i の値を一
つ増やすことを意味します。
ですので,この文は「iを0から19まで順に1つずつ
増やしながら繰り返す」ことを表現しています.
[B]================================
for文で繰り返したい部分は,直後の"{}"で括られた中に書かれます.
この例では,printf("Repeat !\n");がその繰り返したい内容で
す.
[で,結局どう動くの?]================================
[A]と[B]をまとめると,このプログラムは
「iを0から19まで順に1つずつ増やしながら,計20回分printf("Repeat
!\n");を繰り返す」という意味になります.
実際にこのプログラムを実行すると、"Repeat !"と書いた行が20行分画面
に出力されるわけです。
[なんでfor文なんて要るの?]================================
これを聞いた太郎君が文句を言いました.
「なんだそれなら printf("Repeat !\n");を
20回プログラムに書いておけばいいじゃん.forなんて要らないよ」
この太郎君の意見,あなたはどう思いますか?
ぼくならこう言います.「じゃぁ,10000行表示してみてよ」
太郎君式だと,一生懸命,間違えないように10000行分printfを書か
ないといけません.
でもfor文を使うと上の20のところを10000にするだけでよいのです!
楽だし,ずっと正確ですよね.
#include <stdio.h>
main()
{
int i;
for(i=0; i<20; i++){ /*
20回繰り返す。(iは0から19まで) */
printf("i = %d\n", i);
/* ここには、繰り返したい文をいくつも書くことができる
*/
}
}
どうです? むずかしいですかね? 繰り返しの部分はさっきと同じですから、
やっぱり何かを20回繰り返すわけです。
で,今回繰り返すのは、printf("i = %d\n", i); です。
さぁ、これは何だ、というわけですが、みなさん printfの使い方
はもう知ってますよね?
そう、なんのことはない、このprintf("i = %d\n", i);だと、変
数iが5だったら、"i = 5"と画面出力して改行するだけです。
じゃぁ、残るは変数iの正体ですが、 これは繰り返しのカウンタ
ですね。
そう、0から19まで、一つづつ増えていくというアレです。
さぁ、このプログラムがどう動くかわかりましたでしょうか?
最初はi=0の状態でループに突入します。で,printf("i =
%d\n", i);によって,"i = 0"が画面出力されます.
これで第0ループ終了.
次にi=1になって再びループに突入します。で,printf("i =
%d\n", i);によって,今度は"i = 1"が画面出力されます.
これで第1ループ終了.
次にi=2になって....
結局"i = 0"から "i = 19" までが順に表示されることになります.
#include <stdio.h>
main()
{
int i;
int shoko, kosa, atai ;
shoko = 10;
kosa = 3 ;
atai = shoko ;
for(i=0; i<20; i++){
printf("%d-th value=
%d\n", i, atai);
atai = atai + kosa;
}
}
わかりますか? 今度は繰り返している部分"{}"の中に,printfだけじゃな
くて,式"atai = atai + kosa;"も入っていますね.
このプログラムを理解するには,ループを1回繰り返すたびに,変数 atai
の中身がどう変化するのかを実際にチェックしてみるとよいでしょう.
問題4 |
数列 An = 10*n + 1 を n=0から10まで画面出力するプログラムを書け。
配列変数 |
C言語での配列は、ほかの言語でよく使われる小カッコ(())による表現ではなく、大カッコ([])によって表現されます。
[ちょっとした注意] ================================
ちょっとややこしいのですが、A[5]と定義した場合,使っていいのはh[0]か
らh[4]までです.
すなわち,5号室はありません。
#include <stdio.h>
main()
{
int i;
int h[5];
for(i=0; i<5; i++){
h[i] = i * 2;
}
}
問題5 |
数列 An = 2*n + 5 を n=0から10まで配列 A[n] に格納するプログラムを書いてみよう。
main()
{
int i;
int day[12] = /* 配列の初期化は中カッコでくくる
*/
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for(i = 0 ; i < 12 ; i ++) {
printf("%d gatsu ha
%d nichi aru.\n", i+1, day[i]);
}
}
多次元配列 |
#include <stdio.h>
main()
{
int i, j;
int kuku[9][9]; /* 2次元配列 */
for(i=0; i<9; i++) {
for(j=0; j<9; j++){
kuku[i][j] = (i + 1) * (j + 1);
}
}
}
このように2次元配列はkuku[i][j]のように扱い、kuku[i,j]ではありません。
main()
{
int i;
int a[3][3] = {{0,1,2},{-1,2,10},{1,5,1}};
printf("a[2][1]=%d\n",a[2][1]); /* 5と表示されるはず
*/
}
おわりに |