■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...

A33F C言語の配列

はじめに

 
このページでは配列について説明します。

 

 ※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。

 ※以下の情報は2007年11月現在のものです。ご注意ください。


 ※このページではC言語の用語が沢山出てきますが、ビギナーの方は各自C言語の初級本なども参照しながら読み進めてください。


配列

  変数名は好きな名前をつけられることを説明しました。コンピュータではある一連のまとまったデータを扱うということが多いので、同じ変数名で作った変数のリストである「配列」というものがあります。1つの配列は変数名と型が同じになります。宣言時には配列を何個用意するかも指定します。構文は次の通り、

 型 変数名[サイズ];

 例えば、

 int a[10];

 と書くと、int型のaという名前の変数が10個用意されます。各変数を使いたい場合は、カッコの中に番号を指定します。例えば、上の宣言をしたあとで

 a[0] = 1;

 とすると、int型配列aの0番目に1が入ります。配列の番号は0から始まりますので注意して下さい。 int a[10]; では配列を10個用意していますので、 a[0] 〜 a[9] までの10個が使えます。



配列へのアクセス

  配列を使う例を示します。for文では変数を増加又は減少してループを構成しますが、この変数で配列の位置を指定する、ということをよく行います。例えば、


 int cnt;
 int array[10];
 for (cnt=0; cnt<10; cnt++){
   array[cnt] = cnt * 10;
 }

 とします。すると、配列array[] には0番から順番に 10 20 30 40 ...の値が入ります。

 配列はこのようにfor文と一緒に使われることが多いです。


多次元配列

  上の配列は1次元配列といい、変数の並びは直線関係になります。配列の並びが平面関係の2次元配列も作れます。この場合はつぎのように宣言します。

 型 変数名[サイズY][サイズX];

 たとえば、

 int a[5][3];

 と宣言すると、5x3=15個の配列が作られます。それぞれにアクセスするには a[0][1] のように変数を書きます。

 2次元と同じように、宣言時にサイズ宣言を複数設定すれば多次元の配列を作ることができます。



配列と文字列

  printf文では” ”で囲まれた間の文章が表示されました。この”(ダブルコーテーション)で囲まれた部分を「文字列」と言います。列というだけあって、実は1文字づつの配列になっています。1文字だけを表す場合は’a’のようにカンマで区切ります。

 char 変数型は8ビットの変数ですが、実は文字を入れる場合にも使われます。charは文字を表すキャラクタという英語の略称です。

 char moji[6];
 moji[0] = 'H';
 moji[1] = 'e';
 moji[2] = 'l';
 moji[3] = 'l';
 moji[4] = 'o';
 moji[5] = 'w';

 とすると、mojiの配列に”Hellow”という文字列が入ることになります。



配列の初期化

 配列は宣言すると同時に値を入れることもできます。これを配列の初期化と言います。初期化をしない場合は配列に何が入っているかは未知となります。

数値の配列の初期化の例は

 int a[5] = {2, 4, 6, 8, 10};

のようにします。
文字列の初期化の例は

 char moji[6] = "Hellow";

のようになります。
多次元配列の場合は

 int a[3][3] = {
   {1, 2, 3},
   {4, 5, 6},
   {7, 8, 9},
 } ;

のようになります。半角では見づらいので全角で書くとこうなります。(実際のプログラムは全角文字は使えません)

 int a[3][3] = {
   {1, 2, 3,},
   {4, 5, 6,},
   {7, 8, 9,},
 } ;


 では実際に配列を使った実験をしてみましょう。


準備


<接続>

 A33Fの電源を入れるため、USBケーブルをPCへつないで下さい。

 A33Fにプログラムを転送するので、ICD2経由でPCへつないで下さい。

 


<COMポートの確認、ハイパーターミナルの起動>

 前のページのようにCOM番号を確認して、ハイパーターミナルを起動して設定してください。


 

 


<プロジェクトの作成>

 今回も、プログラムは前回作ったソースプログラムを流用してみます。今度は、前回作ったArithmetic.cの環境をそのまま開いてみましょう。

 Project->Open を選択します。
 

 「ファイルの場所」で、前回作ったフォルダを指定すると、プロジェクト名に.mcpが付いているファイルがありますのでそれを指定して「開く」を押しますと、前回のプロジェクトが開かれます。
 

 前と同じ状態でMPLABの環境が設定されています。
 

 


プログラムの変更

 では、ソースプログラムを下のように書き換えてください。
 プログラム部分は半角にすることを忘れないで下さい。
 

 変更点は行80と行101〜110の部分です。

 行80で1次元のchar型の配列を宣言しています。名前の通り、ASCII(アスキー)コードを入れる変数として宣言しました。ASCIIコードについては検索してみてください

 行101〜103で、配列に値を入れています。ASCIIコードは0〜255の値を文字や制御コードとするものですので0〜255の値をそれぞれの配列番号に入れています。

 結果は次のようになりました。
 

 ASCIIコードにはBEEP(ビープ)音をならすというものもありますので、PCのスピーカが有効になっていればBEEP音も出るはずです。ハイパーターミナルが日本語版なので、、制御文の値が大きい方の一部が漢字やカタカナに変換されています。他の国のバージョンだと違う表示になると思います。


 ASCIIではアルファベットのA〜Fに該当するのは65〜90の値になります。では、表示部分を次のように変えてみてください。

 行101〜103で代入している値はかわりません(ここは変えていない。)。行106〜110が変更点です。このfor文は変数cntを90−>65までカウントダウンします。

 結果は次のようになります。




おわりに

 次はC言語の関数について説明します。


2007年11月30日

 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示