このサイトは、只今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

M1 Macで、OpenGL GLUTを使ってコンパイルする

2024.04.27

Mac(gcc)で、C言語関数 getch関数を使う。

2020.12.05

Mac Home brewでSDL2.0を簡単に環境設定

2020.06.24

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

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US