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

Archives Details

C言語 配列

C

2016.07.04

この記事は最終更新日から1年以上が経過しています。

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でない限り繰り返します。

Comment

Related Article

C言語 配列

2016.07.04

C言語 繰り返し文

2016.07.03

C言語 if文・switch文・論理演算子

2016.07.02

C言語の基礎・基本

2016.07.01

Macでの C・C++言語 のエディタ・IDE選び

2016.07.01

CATEGORY LIST

LATEST NEWS

Arduino IDEとArduino接続して、サクッと設定。

電子工作

2019.08.15

ついに、M5Stack Gray 購入!! その他諸々、購入したボードの振り返りなど。

電子工作

2019.08.12

正規表現 先読み後読み 論理積

JavaScript

2019.07.28

PythonでGUIアプリ開発「PyQt」を使った感想

Python

2019.07.18

「二段階認証?」という方も 5分で覚える パスワードレス WebAuthnのまとめ

JavaScript

2019.07.07

上級者向け JavaScript 問題集 「javascript-questions」日本語翻訳担当してます。

JavaScript

2019.06.22

Wordpress サイトで、長時間 500 Internal Server Error発生。解決した方法とは。

WordPress

2019.06.18

Ubuntu 18.04 LTSで OpenGL開発

ubuntu

2019.05.20

MacOS Mojave (10.14.4)の Xcode に、過去のMacOSのSDKをインストール

C++

2019.05.19

クローンソフトの「EaseUS Disk Copy」を使って、OSのバックアップを取ってみた。

tool

2019.05.06

Rails5 gemでmysql2が インストールできない

Ruby

2019.05.05

平成最後のお買い物!!「Logicool MX Master 2 Wireless Mouse」と「K780 マルチデバイス BLUETOOTH® キーボード」で快適PC生活。

ubuntu

2019.04.27

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US