【自主学習】ひたすらコードで覚えるC++［#4］

# はじめに
今回は4回目ということで、配列を中心に学んでいきます。

# 使用する環境
環境はVisual Studio 2022を使用します。

# 配列の値を出力する
このコードでは準備した配列に値を格納して表示します。配列を使うことで、多くのデータを簡単に扱うことができます。

```diff_c
#include <iostream>
using namespace std;

int main()
{
	int test[5];

	test[0] = 50;
	test[1] = 80;
	test[2] = 32;
	test[3] = 70;
	test[4] = 94;

	for (int i = 0; i < 5; i++) {
		cout << i + 1  << "番目の点数は" << test[i] << "です\n";
	}

	return 0;

}
```

# 配列の内容をソートする
このコードでは配列の要素を大きい順にソートしています。```test[t]```と```test[s]```を比較しながら比較した要素のほうが大きい場合、要素を入れ替えます。


```diff_c
#include <iostream>
using namespace std;

int main()
{
	const int num = 10;
	int test[num];

	cout << num << "人の点数を入力してください。\n";
	for (int i = 0; i < num; i++) {
		cin >> test[i];
	}

	for (int j = 0; j < num - 1; j++) {
		for (int k = j + 1; k < num; k++) {
			if (test[k] > test[j]) {
				int tmp = test[k];
				test[k] = test[j];
				test[j] = tmp;
			}
		}
	}

	for (int m = 0; m < num; m++) {
		cout << m + 1 << "番目の人の点数は" << test[m] << "です。\n";
	}

	return 0;
}

```

# 多次元配列をつかう
多次元配列を使うことでより複数の情報を扱うこともできます。このコードを実行すると
1人につき2回のテスト結果を出力します。

```diff_c
#include <iostream>
using namespace std;

int main()
{
	const int sub = 2;
	const int num = 5;

	int test[sub][num];

	test[0][0] = 30;
	test[0][1] = 40;
	test[0][2] = 49;
	test[0][3] = 69;
	test[0][4] = 82;
	test[1][0] = 90;
	test[1][1] = 43;
	test[1][2] = 67;
	test[1][3] = 75;
	test[1][4] = 92;

	for (int i = 0; i < num; i++) {
		cout << i + 1 << "番目の人の1回目のテストの結果は" << test[0][i] << "点です。\n";
		cout << i + 1 << "番目の人の2回目のテストの結果は" << test[1][i] << "点です。\n";
	}

	return 0;
}
```

# ポインタの演算
+演算子を使ってポインタの足し算を行っています。```*(test + 1)```を調べると、配列の2番目の要素の値を知ることができます。

```diff_c
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int test[5] = { 80,60,55,22,75 };

    cout << "test[0]の値は" << test[0] << "です。\n";
    cout << "test[0]のアドレスは" << &test[0] << "です。\n";
    cout << "testの値は" << test << "です。\n";
    cout << "test+1の値は" << test + 1 << "です。\n";
    cout << "*(test+1)の値は" << *(test + 1) << "です。\n";

    return 0;
}

```

# 引数と配列
配列を関数の引数として使うプログラムです。5人の身長を入力することで平均身長が表示されます。


```diff_c
#include <iostream>
#include <vector>
using namespace std;

//avg関数の宣言
double avg(int  n[]);

int main() {
    int number[5];

    cout << "5人の身長を入力してください。\n";
    for (int i = 0; i < 5; i++) {
        cin >> number[i];
    }
    double ans = avg(number);
    cout << "5人の平均身長は" << ans << "です。\n";

    return 0;
}

//avg関数の定義
double avg(int n[]) {
    double sum = 0;

    for (int i = 0; i < 5; i++) {
        sum += n[i];
    }
    return sum / 5;
}
```

# 配列で文字列を扱う
配列に文字列を格納することができます。このコードでは配列```str[]```に記憶した文字列```"Hello"```の各文字の間に```*```記号を挿入して表示します。文字列を扱う場合は最後の文字が```\0```になります。

```diff_c
#include <iostream>
#include <vector>
using namespace std;

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

	cout << "Hello\n";
	
	for (int i = 0; str[i] != '\0'; i++) {
		cout << str[i] << "*";
	}
	cout << '\n';

	return 0;
}
```

# strlen()関数をつかう
C++の環境には、文字列を扱うための標準的な関数が添付されています。標準ライブラリと呼ばれ、strlen()関数では文字列の長さを求めることができます。

```diff_c
#include <iostream>
#include <vector>
using namespace std;

int main() {
	char str[100];

	cout << "文字列（英数字）を入力してください。\n";

	cin >> str;

	cout << "文字列の長さは" << strlen(str) << "です。\n";

	return 0;
}

```

# 参考文献

この記事は以下の情報を参考にして執筆しました。
[やさしいC++ 第4版 (「やさしい」シリーズ) ](https://www.amazon.co.jp/%E3%82%84%E3%81%95%E3%81%97%E3%81%84C-%E7%AC%AC4%E7%89%88-%E3%80%8C%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E3%80%8D%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%AB%98%E6%A9%8B-%E9%BA%BB%E5%A5%88/dp/4797370998)