第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個準備されるから)
© Copyright 2024 ExpyDoc