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

web帳

記事詳細

2016.07.04

C言語 配列

c-lan

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

配列

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

配列の宣言 構文

[code]型名 配列名[要素数];[/code]

例:

[code]int arr[5];[/code]

利用例:

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

配列要素への値の代入 構文:
[code]配列名[添字] = 式;[/code]

値 出力例:
[code]#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;
}[/code]

結果:

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

入力の操作

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

[code]#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;
}[/code]

結果:

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

配列の初期化

配列の初期化 構文
[code]型名 配列名[要素数] = {値 0, 値 1, …};[/code]

先ほどの例を上記の初期化で行うと、
[code]int arr[5] = {23, 90, 2, 3, 18};[/code]
と、5つの配列要素を初期化することができます。

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

例文:

[code]#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;
}[/code]

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

マクロ

マクロの定義:
[code]#define マクロ名 置換する文字列[/code]

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

[code]#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;
}[/code]

結果:

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

内容をソート

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

[code]#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;
}[/code]

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

多次元配列

多次元配列の宣言 構文(2次元)
[code]型名 配列名[要素数][要素数][/code]

例:
[code]int arr[3][2];[/code]

例文:

[code]#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;
}[/code]

結果:

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

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

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

省略も可能です。

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

文字列と配列

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

"Hello"という文字列は、

[code]char str[6];

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

という配列となります。

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

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

文字列の初期化

[code]char str[6] = {'H','e','l','l','o', '¥0'};
char str[] = {'H','e','l','l','o', '¥0'};
char str[6] ="Hello";
char str[] ="Hello";[/code]

出力例:

[code]#include <stdio.h>

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

return 0;
}[/code]

結果:

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

文字列を入力

例文:

[code]#include <stdio.h>

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

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

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

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

文字列を操作

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

例文:

[code]#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;
}[/code]

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

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

while文でも同様

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

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

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

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

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