このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

web帳

記事詳細

2016.07.04

C言語 配列

c-lan

今回はC言語の配列について、つらつらと。

配列

C言語の配列は「同じ型の値をまとめて記憶する」という機能を持っています。

配列の宣言 構文

型名 配列名[要素数];

例:

int arr[5];

利用例:

int arr[5];
arr[0] = 23;
arr[1] = 90;
arr[2] = 2;
arr[3] = 3;
arr[4] = 18;

配列要素への値の代入 構文:

配列名[添字] = 式;

値 出力例:

#include <stdio.h>
int main(void)
{
  int arr[5];
  int i;

  arr[0] = 23;
  arr[1] = 90;
  arr[2] = 2;
  arr[3] = 3;
  arr[4] = 18;

  for(i = 0; i < 5; i++) {
    printf("%d番目の数字は%dです。¥n", i + 1, arr[i]);
  }
  return 0;
}

結果:

スクリーンショット 2016-08-14 16.07.28

入力の操作

キーボードから入力した数字を配列に格納して出力する例です。

#include <stdio.h>

int main(void)
{
  int arr[5];
  int i, j;
  
  printf("5つの数字を入力してください。¥n");

  for(i = 0; i < 5; i++) {
    scanf("%d", &arr[i]);
  }
  for(j = 0; j < 5; j++) {
    printf("%d番目の数字は%dです。¥n", j + 1, arr[j]);
  }
  return 0;
}

結果:

スクリーンショット 2016-08-14 16.13.17

配列の初期化

配列の初期化 構文

型名 配列名[要素数] = {値 0, 値 1, …};

先ほどの例を上記の初期化で行うと、

int arr[5] = {23, 90, 2, 3, 18};

と、5つの配列要素を初期化することができます。

{}中に指定する値は、初期化子(initializer)と呼ばれています。

例文:

#include <stdio.h>

int main(void)
{
  int arr[5] = {23, 90, 2, 3, 18};
  int i;

  for(i = 0; i < 5; i++) {
    printf("%d番目の数字は%dです。¥n", i + 1, arr[i]);
  }
  return 0;
}

結果:
スクリーンショット 2016-08-14 21.54.16

マクロ

マクロの定義:

#define マクロ名 置換する文字列

#defineを使って指定する名前をマクロ(macro)といいます。
先ほどの例文の5の数字を定数とし、マクロ定義を行った例:

#include <stdio.h>

#define NUM 5

int main(void)
{
  int arr[NUM] = {23, 90, 2, 3, 18};
  int i;

  for(i = 0; i < NUM; i++) {
    printf("%d番目の数字は%dです。¥n", i + 1, arr[i]);
  }
  return 0;
}

結果:

スクリーンショット 2016-08-14 21.54.16

内容をソート

入力された数字を配列に格納してソートを行う例:

#include <stdio.h>

#define NUM 5

int main(void)
{
  int arr[NUM];
  int tmp;

  int i, j, s, t;

  printf("%dつの数字を入力してください。¥n", NUM);

  for(i = 0; i < NUM; i++) {
    scanf("%d", &arr[i]);
  }
  for(s = 0; s < NUM - 1; s++) {
    for(t = s + 1; t &lt; NUM; t++) {
      if(arr[t] > arr[s]) {
        tmp = arr[t];
        arr[t] = arr[s];
        arr[s] = tmp;
      }
    }
  }
  
  for(j = 0; j < NUM; j++) {
    printf("%d番目の数字は%dです。¥n", j + 1, arr[j]);
  }
  return 0;
}

スクリーンショット 2016-08-14 22.01.30

多次元配列

多次元配列の宣言 構文(2次元)

型名 配列名[要素数][要素数]

例:

int arr[3][2];

例文:

#include <stdio.h>

#define SUB 2
#define NUM 3

int main(void)
{
  int arr[SUB][NUM];
  int i;

  arr[0][0] = 20;
  arr[0][1] = 40;
  arr[0][2] = 70;
  arr[1][0] = 10;
  arr[1][1] = 30;
  arr[1][2] = 50;

  for(i = 0; i < NUM; i++) {
    printf("%d番目の人のドンキーコングのスコアは%dです。¥n", i + 1, arr[0][i]);
    printf("%d番目の人のマリオのスコアは%dです。¥n", i + 1, arr[1][i]);
  }
  return 0;
}

結果:

スクリーンショット 2016-08-14 22.13.08

以下の様に初期化を行うことも可能です。

int arr[2][3] = {
  {20,40,70},{10,30,50}
};

省略も可能です。

int arr[][3] = {
  {20,40,70},{10,30,50}
};

文字列と配列

C言語では「char型の配列」で文字列を扱うことができます。

“Hello”という文字列は、

char str[6];

str[0] = "H";
str[1] = "e";
str[2] = "l";
str[3] = "l";
str[4] = "o";
str[5] = "¥0";

という配列となります。

最後に代入した「¥0」はNULL文字(NULL charactor)といわれ、文字列の配列の最後をあらします。

必ず、最後に ¥0が代入されます。

文字列の初期化
char str[6] = {'H','e','l','l','o', '¥0'};
char str[] = {'H','e','l','l','o', '¥0'};
char str[6] ="Hello";
char str[] ="Hello";

出力例:

#include <stdio.h>

int main(void)
{
  char str[] = {'H','e','l','l','o', '¥0'};
  printf("%sはこんにちはです。¥n", str);

  return 0;
}

結果:

スクリーンショット 2016-08-14 22.36.25

文字列を入力

例文:

#include <stdio.h>

int main(void)
{
  char str[100];

  printf("文字列を入力してください。¥n");
  scanf("%s", str);

  printf("入力した文字列は%sです。¥n", str);
  return 0;
}

スクリーンショット 2016-08-14 22.39.43

文字列を操作

文字列の配列は¥0で終わるのが基本なので、その判定を入れて制御をおこなってみます。

例文:

#include <stdio.h>

int main(void)
{
  char str[] = "Hello";

  int i;
  printf("Hello¥n");

  for(i = 0; str[i] != '¥0'; i++) {
    printf("%c**", str[i]);
  }
  printf("¥n");

  return 0;
}

配列の最後になるまで文字間に「**」を挿入。

スクリーンショット 2016-08-14 22.50.34

while文でも同様

while(str[i]) {
  ...
}

¥0でない限り繰り返します。

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、港区六本木で活動中。

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。