190 likes | 379 Views
第 6 章 この 辺りからややこしくなる!? ~ 配列 ~. 変数を一度にたくさん宣言するよ! これ がどこで生かせるか、わかるかな?. 前回やったこと. 反復処理を やるもう一つの方法 for 文 for 文の中に for 文を書くことで 2 重ループ を作れる 2 重ループは for-for 、 for-while 、 while-while 、 while-for でもできる. 今日 の予定. 配列とは 宣言 、初期化の仕方 繰り返しを使った上手い初期化の仕方 2 次元配列とは 宣言、初期化の仕方. 配列とは (1).
E N D
第6章この辺りからややこしくなる!?~配列~第6章この辺りからややこしくなる!?~配列~ 変数を一度にたくさん宣言するよ! これがどこで生かせるか、わかるかな? 第6章 配列
前回やったこと • 反復処理をやるもう一つの方法 for文 • for 文の中に for 文を書くことで2重ループを作れる • 2重ループは for-for、for-while、while-while、while-for でもできる 第6章 配列
今日の予定 • 配列とは • 宣言、初期化の仕方 • 繰り返しを使った上手い初期化の仕方 • 2次元配列とは • 宣言、初期化の仕方 第6章 配列
配列とは(1) • 変数の後ろに『[5]』などをつけ、宣言をすることで、同じ大きさの変数を複数一気に宣言することができる • 例: • こうしてできた変数の集まりを 配列 という • 配列でできる変数の個数は『[]』内の数値分と同じ! intnum[5]; 第6章 配列
配列とは(2) num[0] num[1] num[2] num[3] num[4] • さっきの『 intnum[5]; 』だと、 変数『num[0]~[4]』が作られる • 一つひとつが立派な変数だから、 ちゃんと数値の代入や、初期化( 最初の値を決めること)ができる • 数値の代入はこんな感じにやるよ↓ ↑ 0 から始まる のに注意 num[0] = 1; num[1] = 2; 第6章 配列
配列とは(3) • 配列の初期化はちょっとややこしい • これで→と同じことができた • ただ『{}』内の数値は配列の 個数より多くてはエラーが出る し、この方法は宣言と同時でないとできない仕 様なんだ intnum[5] = { 1, 2, 345, 67, 890}; 『,』で区切ってね num[0] = 1; num[1] = 2; num[2] = 345; num[3] = 67; num[4] = 890; だからただの代入で初期化することも多い 第6章 配列
配列とは(4) • 説明が長くなっちゃったけど、ひとまず下のプログラムを実行してみよう #inlude <stdio.h> void main(){ intnum[4] = { 1, 9, 3, 6 }; int a; a = num[0] * num[2]; printf(“%d\n”, a ); num[0] = num[1] + a ; printf(“%d\n”, num[0] + num[3]);} 第6章 配列
配列とは(5) • 実行結果はこんな感じ • また『[]』内の数値を変数に置き換えることもできるよ • 例: intnum[10] inti = 7; num[i] = 3; これで『num[7] = 3;』 と同じことになった 第6章 配列
配列とは(6) • 実は変数は宣言すると、PC内のメモリ上に領域を確保するようになっている • 普通の変数では、宣言の度に領域の場所がバラバラだったけど、配列はつながって確保するようになっているよ 変数として、これだけ使わせてください、という感じ つながってるのが重要!! 只の宣言 配列 第6章 配列
練習問題1 • 以下のように、入力した数値を出力(表示)するプログラムを書いてみよう • 繰り返し for 文を使い、上手いこと記述を少なくできるかな? ヒント: printf(“num[%d}”, i ); 第6章 配列
練習問題1 回答例 • このように繰り返しを利用し、配列の初期化をすることはよくあるから覚えて損無し! #include <stdio.h> void main(){ int num[4]; for(int i = 0; i < 4; i++){ printf(“num[%d] > ”,i ); scanf("%d", &num[i] ); } printf("num[0] + num[2] = %d\n", num[0]+num[2]); printf("num[3] - num[1] = %d\n", num[3]-num[1]);} 第6章 配列
2次元配列とは(1) • さっきやった配列はタテにつながっていたけど、それをヨコにもつなげることができる • これを2次元配列といい、それに対応して、普通の配列を1次元配列ということもある • 書き方はこんな感じ • 左の『[]』がタテ軸、右がヨコ軸にあたるよ 次頁図で説明 intnum[4][3]; 第6章 配列
2次元配列とは(2) • 視覚的にわかりやすくすると、こんな感じ • 勿論これら一つひとつが変数だから、代入・初期化ができるし、必要になるよ 2次元配列 1次元配列 第6章 配列
2次元配列とは(3) • 代入は • 初期化は • それぞれ下のように数値が格納されているのでチェックしてね num[0][2] = 5; int a[2][2] = { {1, 23}, {456, 7} }; 第6章 配列
練習問題2 • 以下と同じような実行結果になるよう行列(数学C)の和計算を行うプログラムを作ってみよう • ちなみに『%d』の代わ りに『%3d』を使うを 間が3スペース分空かせて 数字を表示できる 第6章 配列
練習問題2 回答例その1 #include <stdio.h> void main(){ int a[2][2]; int b[2][2]; inti,j; for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("a[%d][%d] > ",i,j); scanf("%d",&a[i][j]); } } for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("b[%d][%d] > ",i,j); scanf("%d",&b[i][j]); } } • あまりに 長いので、 2ページ使 います 第6章 配列
練習問題2 回答例その2 printf("a + b:\n"); for(i=0;i<2;i++){ for(j=0;j<2;j++) printf("%3d",a[i][j] + b[i][j]); printf("\n"); } } • それぞれの for 文がどこまで続いているのか、printf内でどんな処理をしているのかに注目! • 行列のあのカタチと、この味気ないコード(記述)がうまく頭で合わさるといいですね 私は文系で行列 計算なんて習って ないので、簡単な ことしか知りません。 あしからず 第6章 配列
次回予告 • 『int型』以外の変数のこと データ型、double 型(など)の登場!! intnum = 3; 第6章 配列
テンプレ • テンプレ 第6章 配列