C言語 配列
2016.07.04
この記事は最終更新日から1年以上が経過しています。
今回は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; }
結果:
入力の操作
キーボードから入力した数字を配列に格納して出力する例です。
#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; }
結果:
配列の初期化
配列の初期化 構文
型名 配列名[要素数] = {値 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; }
結果:
マクロ
マクロの定義:
#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; }
結果:
内容をソート
入力された数字を配列に格納してソートを行う例:
#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 < 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; }
多次元配列
多次元配列の宣言 構文(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; }
結果:
以下の様に初期化を行うことも可能です。
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; }
結果:
文字列を入力
例文:
#include <stdio.h> int main(void) { char str[100]; printf("文字列を入力してください。¥n"); scanf("%s", str); printf("入力した文字列は%sです。¥n", str); return 0; }
文字列を操作
文字列の配列は¥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; }
配列の最後になるまで文字間に「**」を挿入。
while文でも同様
while(str[i]) { ... }
¥0でない限り繰り返します。