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