このドキュメントは http://icrus.org/c_language_beginers_course/ 上にあります.
10個の整数1次配列を宣言し,それぞれに任意の値を代入し,それぞれを画面に表示しよう.
01: #include <stdio.h>
02: void main(void){
03: int i, x[10];
04:
05: x[0] = 100;
06: x[1] = 11;
07: x[2] = 22;
08: x[3] = 33;
09: x[4] = 44;
10: x[5] = 55;
11: x[6] = 66;
12: x[7] = 77;
13: x[8] = 88;
14: x[9] = 99;
15: for( i=0; i<MAX; i++ )
16: printf( "x[%d]=%d\n", i, x[i] );
17: getchar();
18: }
04行目 →変数iと配列x[10]をint(整数)に宣言します.
コンパイル・実行すると次のように表示されます.
x[0]=100
x[1]=11
x[2]=22
x[3]=33
x[4]=44
x[5]=55
x[6]=66
x[7]=77
x[8]=88
x[9]=99
リターンキーを押すとプログラムは終了します.
整数1次配列を使って小さい順に,100個の素数を求めよう.
01: #include <stdio.h>
02: #define MAX 1000
03: void main(void){
04: int num, i, sim, x[MAX];
05:
06: num = 0;
07: sim = 3;
08: x[0] = 2;
09: while( num<MAX ){
10: for( i=0; i<=num; i++ ){
11: if( sim % x[i]==0 )
12: break;
13: if( i==num ){
14: num++;
15: if( num>=MAX )
16: break;
17: x[num] = sim;
18: }
19: }
20: sim++;
21: }
22: for( i=0; i<MAX; i++ )
23: printf( "x[%d]=%d\n", i, x[i] );
24: }
各行説明
02行目 →求めたい素数の数をMAXとします.(ここでは1000)
04行目 →変数と配列x(素数を格納する)を宣言します.
06~07行目 →変数を初期化します.
08行目 →配列xの0番目に2を代入します.(既知の素数として)
09~21行目 →変数numがMAX未満のとき繰り返すwhileループです.変数numがMAXに達すると(素数がMAX個見つかったとき)whileループから抜け出ます.変数numがMAXに達するまで,変数simをインクリメント(1を加える)していきます.
10~19行目 →変数iが変数num以下のとき繰り返すforループです.そのときに見つかっている素数の個数分繰り返します.
11~12行目 →変数simがx[i]で割り切れればforループから抜け出ます.
13~18行目 →11行目のif文で割り切れることなく,そのときの最大の素数に達したら,変数simを素数とみなし,配列の次に代入します.
コンパイル・実行すると次のように0~999番目の1000個の素数が表示されます.
x[0]=2
x[1]=3
x[2]=5
x[3]=7
x[4]=11
*** x[4]~x[994] 省略 ***
x[995]=7879
x[996]=7883
x[997]=7901
x[998]=7907
x[999]=7919
リターンキーを押すとプログラムは終了します.
これで,1000個の素数を求めることがでました.短いプログラムですので,ここまでの知識を総動員すれば,プログラムが何をしているのか理解できると思います.アルゴリズムの詳しい説明は省きますので,もし理解できなくても「今までの知識と1次配列を使うとこのようなこともできるのか!」と思っておいて,先に進んで下さい.理解できた方は,10000個の素数を求めるプログラム,または,さらに素早く素数を求められるアルゴリズムなどを考えてみてください.
3×2の整数2次配列を宣言すると同時に任意の値に初期化しそれぞれの要素の値を画面に表示してみましょう.
01: #include <stdio.h>
02: void main(void){
03: int i, j;
04: int x[3][2]={{2,5},{6,8},{9,2}};
05:
06: for( i=0; i<3; i++ )
07: for( j=0; j<2; j++ )
08: printf( "x[%d][%d]=%d\n",i, j, x[i][j] );
09: }
各行説明
4行目→3×2の2次行列を宣言し,要素の値を初期化します.
7~9行目→変数i,jで2重のforループになっています.変数i,jそれぞれにインクリメント(1を加える)しながら,関数printf()を実行していきます.
コンパイル・実行すると次のよう表示されます.
x[0][0]=2
x[0][1]=5
x[1][0]=6
x[1][1]=8
x[2][0]=9
x[2][1]=2
リターンキーを押すとプログラムは終了します.
意図通りに2次元の配列が宣言され,初期化されていることがわかります.
10×10の整数2次配列を利用してかけ算九九の表を完成させよう.
01: #include <stdio.h>
02:
03: void main(void){
04: int i, j;
05: int x[10][10];
06:
07: for( i=0; i<10; i++ )
08: for( j=0; j<10; j++ )
09: x[i][j] = i*j;
10:
11: for( i=0; i<10; i++ ){
12: for( j=0; j<10; j++ )
13: printf( "%2d ", x[i][j]
);
14: printf( "\n" );
15: }
16: getchar();
17: }
行説明
05行目→10×10の2次配列を宣言します.
07~09行目→変数i,jの2重のforループで,変数i,jそれぞれにインクリメント(1を加える)しながら,配列x[i][j]にかけ算九九の値を代入しながら,
11~15行目→変数i,jで2重のforループで,変数i,jそれぞれにインクリメント(1を加える)しながら,関数printf()を実行していきます.
"%2d "→2桁を使って整数を表示します.その後,空白を1つ空けます.桁をそろえてきれいに出力する工夫です.
14行目→1行(x[i][0]~x[i][9])を表示し終わるとprintf("\n");で復改します.
コンパイル・実行すると次のよう表示されます.
0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 3 6 9 12 15 18 21 24 27
0 4 8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81
リターンキーを押すとプログラムは終了します.
2次配列を使ってかけ算九九の表がきれいにできました.0の段~九の段まで表示してあります.
このドキュメントは http://icrus.org/c_language_beginers_course/ 上にあります.
2017,1 ssatoh@
足立工科大学 工学部 情報通信工学科