網絡学習管理 明解C言語入門2 C programming 2 (2) Arrays

C programming 2 (2) Arrays

配列

同じ型の変数が並んだものを「配列」と言います。C以外でも多くの高級言語に採用されている。

通常の変数は

int num;

のように型と名前を示して宣言しますが、配列ではさらに要素数を加えて以下のように宣言します。

int num[10];

名前(上の例では”num”)が変数名で、それに続く[ ]内に示した”10″が、配列の要素数です。上記のように宣言すると

int 型の変数が10個確保され
その全体を“num”という名前で扱える

ようになります。

配列の各要素は添字(またはインデックス)と呼ばれる番号で一意に指定できます。Cでは先頭が0で、1ずつ増加します。

01

配列の走査

配列の各要素に規則性を持った値を代入するには、forループを使うのが便利です。例えば、10個の要素を持つint 型の配列に、100・200・300……と100ずつ増加する値を代入する処理は、リスト1のように記述できます。

カウンタ変数iは0から1ずつ増加するので、その値を配列の添字に使い、同時に(i + 1)の100倍を添字で示す要素の値として代入します。

継続条件は「i < 10」となっているので、iが9になるまでループが繰り返され、10になったら処理をせずにループを抜けるので、配列のすべての要素に値が代入されます。

リスト1:配列に100ずつ増加する値を代入していく

int num[10];    /* 整数を格納する配列 */
int i;    /* カウンタ変数 */

for(i =0; i <10; i++){
num
[i]=(i +1)*100;
}

配列の初期化

配列は同じ型の変数が並んだものですから、個々の要素の扱いは通常の変数と変わりません。配列の個々の要素に値を代入するには、以下のように代入演算子=を使います。

num[0]=100;
num
[1]=200;
num
[2]=300;
:

もちろん、通常はこんな悠長な記述はしません。配列の宣言時にすべての要素の値を示し、初期化することができます。

int num[]={100,200,300,400,500,600};

{ }内に値を「,」で区切って列挙するだけです。このようにすれば、[ ]内に最大要素数を示す必要はありません。{ }内に列挙した値の数だけの要素が自動的に確保されます。

配列のコピー

他の変数と同じように配列をコピーしたプログラム

/* 配列のコピー */
b = a; // エラーが表示され、コンパイルできません

for文を使って配列の要素をコピーしましょう。

#include <stdio.h>
 
int main(void) {
 
  int i;
 
  int a[3] = {0, 1, 2};
 
  int b[3];
 
  /* 配列のコピー */
  for(i=0;i<3;++i){
    b[i] = a[i];
  }
 
  printf("%d %d %d\n", b[0], b[1], b[2]);
 
  return 0;
}

 

マクロ定数の活用

次のプログラムは,配列を宣言すると同時に初期化しておいて,その配列要素の数値の中で最大のものを表示する。

#include <stdio.h>
#define N 10    /* 配列の要素数 */

int main()
{
    int a[N] = {4, 2, 11, 4, 15, 7, 9, 12, 3, 6};
    int i, max;

    max = a[0];
    for (i = 1; i < N; i++) {
        if (max < a[i]) {
            max = a[i];
        }
    }
    printf("max value = %d\n", max);
    return 0;
}
max value = 15

プログラム中のfor文では,配列の要素を始めから見ていき, それまでに見つけた最大値 max と,今注目している要素 a[i]とを比較し, a[i] の方が大きければ,max の値をそれで置き直す。 また,max には始めに a[0] の値が入っており, a[0]max と比較する必要がないので, for文は i=1 から始まっている。

演習問題

  • 演習5-3(p115) List5-5を書き換えて、先頭から順に5,4,3,2,1で初期化するプログラムを作成せよ。
  • 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。
  • 演習5-5(p121) List5-8の配列の要素数をオブジェクト形式マクロで定義するように変更したプログラムを作成せよ。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

C programming 2 (1) GuidanceC programming 2 (1) Guidance

C言語プログラミングⅠの前期試験解説 試験後、解説が行われたので、質問があれば、答えする。 (質問応答は、日本語の他に、英語、中国語も可能!) C言語検定試験について http://www.sikaku.gr.jp/js/cp/ C言語を駆使した応用プログラムの作成能力を認定 C言語は、記述の自由度が高く、使用可能なプラットホームが多いなど、使用できる場面が多いことから、現在最も広く普及しているプログラミング言語です。このC言語のプログラミング能力の測定を目的に、1992年より開始されたのがサーティファイ 情報処理能力認定委員会が主催する「C言語プログラミング能力認定試験」です。 保有スキルのレベルに合わせた3段階の認定基準を設けることにより、これから新たにプログラミングの学習を始める方から、現在プログラマやシステム・エンジニアとして既に活躍されている高度IT技術者の方まで、幅広い皆様から受験いただいています。 初学者から、ビジネスシーンで活躍できるプログラマまで、幅広いスキルを測定 「C言語プログラミング能力認定試験」は、これからプログラミングを学び始める方を対象とした「3級」から、プログラマやシステム・エンジニアとして活躍されている方の保有スキルを客観的にアピールできる「1級」まで、幅広いスキルを測定しています。 特に「1級」では、実際にPCを使用して、プログラムの仕様変更やこれに伴うプログラミング作成(コーディング・コンパイル・デバッグ)を行う、極めて実践的な資格・検定試験として、IT業界でも高く評価されています。 基本情報技術者試験の午後の試験対策としても有効 「C言語プログラミング能力認定試験」の「2級」及び「3級」は、経済産業省認定「基本情報技術者試験」の「午後問題」の出題形式も意識して作成しています。そのため、「基本情報技術者試験」の学習と連動した活用も多く見られます。保有スキルのレベルに応じた級位取得を目標としていただくことで、C言語のプログラミング能力を高めるだけではなく、「基本情報技術者試験」の合格にもつなげていくことができます。 参考(3級出題範囲) 出題内容 定数 整数定数 10進定数、8進定数、16進定数 整数接尾語は符号無し接尾語(u、U)のみ […]

C programming 2C programming 2

【授業の概要】 コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト:CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。 【授業要旨】 回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分) 1 ガイダンス 学習目的 C言語プログラミングⅠの前期試験解説  C言語検定試験について 授業内容を復習する 30 60 […]

C programming 2 (3) Arrays 2C programming 2 (3) Arrays 2

ハッカソン ハッカソン(英語: hackathon 、別名:hack day ,hackfest ,codefest )とはソフトウェア開発分野のプログラマやグラフィックデザイナー、ユーザインタフェース設計者、プロジェクトマネージャらが集中的に作業をするソフトウェア関連プロジェクトのイベントである。 ハッカソン – Wikipedia https://ja.wikipedia.org/wiki/ハッカソン 国内最大級のITコンテスト「JPHACK 2016」のお知らせ —————————————————————————— こんにちは!JPHACKS運営事務局です。 突然ですが、モノづくりを仕事にしたいと考えているデザイン系、情報系学生のみなさん、 こんなお悩みはありませんか? ・「学生のうちに、アプリやプロダクトなど何か一つ形にしておきたい」 ・「ただ、自分は○○はできるけど、△△ができないから、Webサービスやアプリをつくれない」 […]