20060615

第4回 【配列】
配列の使い方
配列 = 変数のかたまり
配列の話です。
配列ってなんだろう?と思うかもしれません
が
簡単です。同じ型の変数のかたまりです。
たとえば今までデータを入れてきた箱(変数)
を
1階建ての普通の一軒家だと考えると…
配列のイメージ
配列は1階建てのア
パートを想像すると良
いと思います。
アパートなので当然部
屋番号がつきます。
が、部屋番号はなんと
0から始まります。
配列の宣言のしかた
int型が5つある配列を
準備したければ
int a[5];
と宣言します。
すると右
のような配列が準備
されます。
初期化
int
a[5]={1,2,3,4,5};
と初期化することで
最初から右図のよう
なデータが入った状
態で配列を準備でき
ます。
配列も1つなら変数だ
配列も変数のあつまり
なのでひとつになると
他の変数に代入するこ
とができます。
練習問題で~す!
10進数の整数で月(1から12の数
字)をキーボードから入力して、入力
した月の日数を画面に表示するプロ
グラムを作成せよ。
閏年は考えなくてよい。
日数は1月から
{31,28,31,30,31,30,31,31,30,31,30,31}
です。
ヒント!!!!!!!!!!!
#include <stdio.h>
int main(void)
{
int
a[?]={ 31,28,31,30,31,30,31,31,30,31,30,31};
int ?;
printf ( “月を入力してください。\n” );
scanf ( “??”,??);
printf ( “%d月は%d日あります。\n”,?,a[?] );
return 0;
}
答え
#include <stdio.h>
int main(void)
{
int a[12]={ 31,28,31,30,31,30,31,31,30,31,30,31};
int b;
printf ( “月を入力してください。\n” );
scanf ( “%d”,&b );
printf ( “%d月は%d日あります。\n”,b,a[b-1] );
return 0;
}
解説
最後のprintfでa[b-1]をするのは、先ほど話
したように
0から始まるため、bに12を入力した場合、12
という配列の箱はなく12番目の箱である11が
一番最後の箱になっています。よって、a[b-1]
とするのです。
文字列
C言語は「文字」をいれる変数はあるけれども
「文字列」を扱う変数はありません。
つまり、char型に「a」をいれることはできます
が、「orange」をいれることはできません。
では、「orange」という文字を変数に入れるに
はどうしたらいいのでしょうか…?
そこでchar型配列をつかいます!
文字配列の中身
しかし、気をつけないといけないことがあります!文
字配列は使う文字の数よりも1つ多い要素をとらな
いといけません。
たとえば”orange”という文字は6文字ですが
文字の終わりを示すために一番最後に\0
という文字をいれる決まりになっているのです。つま
り「o」「r」「a」「n」「g」「e」「\0」という風になる。よっ
て、この場合7個箱を作れというわけです。
例題:orangeを表示しよう!!!!!!!!!!
#include <stdio.h>
int main(void)
{
char str[7] = “orange”;
printf(“str配列の中身は%sです \n”,str);
return 0;
}
配列1階建てからグレードア~ップ!!!
今まで配列は1階建てだという説明でした。
でも、実は今までの配列は1次元配列とい
うものです。2次元配列になれば複数階建
てにもできるし、3次元にすれば奥行きも作
れます。そして4次元以上も…。
1次元配列の次に使う機会が多い2次元配列
の例を出していきたいと思います。
2次元配列の作り方
2次元配列の作り方は1次元配列とほとんど
同じ。
int a[5];
としていたのを
int a[2][3];
といった感じにするだけです。
これで2×3の配列が出来上がります。
2次元配列の例題
ではこんな表があった
としましょう。
ダウンタウンの
浜ちゃんとん松っちゃん
の合計点
を求めたいと思います。
国語 数学 英語
浜
ちゃ 80
ん
40
70
松っ
ちゃ 60
ん
70
80
例題:こんな風に対応させたい
国語
数学
英語
80
浜ちゃ a[0][0]
ん
40
a[0][1]
70
a[0][2]
60
a[1][0]
70
a[1][1]
80
a[1][2]
松っ
ちゃん
解答例:こうなるのかな(?_?)
#include <stdio.h>
main(){
int a[2][3]={80,40,70,60,70,80};
int b,c,i;
for(i=0,b=0,c=0;i<3;++i){
b = b + a[0][i];
c = c + a[1][i];
}
printf(“浜ちゃんの成績の合計は%dです\n”,b);
printf(“松っちゃんの成績の合計は%dです\n”,c);
}
今日のまとめ
配列はint a[5];と宣言しても実際にa[5]とい
う配列は存在しないことに注意。
(a[0]から5個準備されるから)