1. C++ の 1 次元配列
C++ は、同じ型の要素の固定サイズの順次コレクションを格納できる配列データ構造をサポートしています。配列は一連のデータを格納するために使用されますが、多くの場合、同じ型の一連の変数と考えられます。
配列宣言は、個々の変数を宣言するのではなく、数値などの配列変数を宣言し、数値[0]、数値[1]、...、数値[99]を使用して個々の変数を表します。配列内の特定の要素にはインデックスによってアクセスできます。
すべての配列は、連続したメモリ位置で構成されます。最も低いアドレスは最初の要素に対応し、最も高いアドレスは最後の要素に対応します。
配列に格納される値は配列要素と呼ばれ、配列に格納される要素の数は配列の長さになります。配列内の要素にはインデックス(添字) を介してアクセスする必要があります。
1. 配列を宣言する
C++ で配列を宣言するには、次のように要素の型と要素の数を指定する必要があります。
数组类型 数组名(数组长度)
上記の宣言構文は、1 次元配列を宣言するために使用されます ( 1 次元配列は Excel テーブル内のデータの行として理解できます)。配列の長さは0 より大きい整定数である必要がありますが、配列の初期長を 0 として宣言することもできます。これは配列が空であることを意味しますが、実際的な意味はないため、これはお勧めできません (配列の長さを負にすることはできません)。データ型には、任意の有効な C++ データ型を使用できます。配列名の命名規則は変数の命名規則と同じです。たとえば、 10 個の要素を含む int 型の配列番号を宣言するには、宣言ステートメントは次のようになります。
int number[10];
2. 配列を初期化する
配列を初期化します。つまり、配列要素に値を割り当てます。C++ では、次のように配列を個別に初期化することも、単一の初期化ステートメントを使用して初期化することもできます。
//声明数组时初始化
int a[5]={
1,2,3,4,5};
int b[]={
1,2,3,4,5};
//先声明数组,再初始化数组
int n[5];
//通过下标访问数组元素
n[0]=0;
n[1]=1;
n[2]=2;
n[3]=3;
n[4]=4;
初期化時、中括弧 { } の間の値の数は、配列の宣言時に角括弧 [ ] で指定した要素の数を超えることはできません。
配列インデックス (添字) の法則: 配列の添字は 0 から始まり、順番に増加し、最大値は配列の長さ -1 になります。
3. 配列の演習
(1) キーボードから n 個の数値を入力して配列に保存し、ループを使用して配列のすべての要素をスペースで区切って出力します。
実装コード:
#include<iostream>
using namespace std;
int main()
{
//定义变量n表示数组长度
int n;
//输入n的值
cout<<"请输入需要保存元素的数量:";
cin>>n;
//定义数组,长度为n
int arr[n];
//初始化数组
for(int i=0;i<n;i++){
cout<<"请输入第"<<i+1<<"个数:";
cin>>arr[i];
cout<<endl;
}
//打印输出所有元素
cout<<"数组中的元素为:";
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
}
(2) キーボードから n 個の整数を入力し、それらの合計を計算し、入力された数値の最大値を出力します。
問題解決のアイデア: 入力数値を 1 次元配列に保存し、配列のすべての要素の合計を計算して最大値を見つけます。
#include<iostream>
using namespace std;
int main()
{
//定义变量n表示整数的个数
int n;
//定义变量sum保存整数的和,初值为0
int sum=0;
//输入n的值
cout<<"请输入整数的个数:";
cin>>n;
//定义数组,长度为n,保存输入的数字
int arr[n];
//输入整数,保存到数组中
for(int i=0;i<n;i++){
cout<<"请输入第"<<i+1<<"个数:";
cin>>arr[i];
cout<<endl;
}
//定义变量max表示最大值,初值为arr[0]
int max=arr[0];
//遍历数组,计算总和并寻找最大值
for(int i=0;i<n;i++){
//将数组元素一次相加,即为求和
sum += arr[i];
//寻找最大值:以max表示最大值,如果数组元素比max大,则表示这个元素时最大值,
//将元素值赋值给max,当循环结束,max中保存的一定是最大值。
if(arr[i]>max){
max=arr[i];
}
}
//打印输出结果
cout<<"你输入的整数总和为:"<<sum<<",最大值为:"<<max;
}
(3) フィボナッチ数列の最初の n 項目を出力します。キーボードから整数 n を入力し、フィボナッチ数列の最初の n 項目を配列に保存し、配列内のすべての要素を出力します。
ヒント: フィボナッチ数列は 1 1 2 3 5 8 13 21 34 55 89…です。
実装コード:
#include<iostream>
using namespace std;
int main()
{
//定义变量n
int n;
//输入n的值
cout<<"请输入n:";
cin>>n;
//定义数组,长度为n
//防止数据溢出,使用long long类型的数组
long long arr[n];
//计算斐波拉契数列前n项,保存到数组中
//斐波拉契数列第一项和第二项都为1,从第三项开始,每项的值=前两项之和
//先保存第一项、第二项
arr[0]=1;
arr[1]=1;
//使用循环计算第三项之后的值
for(int i=2;i<n;i++){
//下标i表示当前项,i-1表示前第一项,i-2表示前第两项
arr[i]=arr[i-1]+arr[i-2];
}
cout<<"斐波拉契数列的前"<<n<<"项为:";
//遍历数组,输出所有元素
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
}
2. C++ の 2 次元配列
2 次元配列は Excel のテーブルに相当し、行と列で構成され、各行は 1 次元配列です。したがって、2 次元配列は複数の 1 次元配列の集合とみなすことができます。例えば:
列1 列2 列3 列4 列5 列6
行1 a[0] a[1] a[2] a[3] a[4] a[5]
行2 b[0] b[1] b[2] b[3] b[4] b[5]
行2 c[0] c[1] c[2] c[3] c[4] c[5]
行3 d[0] d[1] d[2] d[3] d[4] d[5]
行4 e[0] e[1] e[2] e[3] e[4] e[5]
以上便是一个二维数组,这个二维数组有5行(5个一维数组)6列(每个一维数组的长度都为6)
上記の内容によれば、要素 c[3] を表現したい場合、数学の座標に似た (行 3、列 4) と表現でき、行と行で表現する必要があります。列。たとえば、配列 n の 3 行目、4 列目の要素を表すには、次のように記述する必要があります。
n[2][3]
注: 多次元配列であっても、要素の添え字は 0 から始まります。
1. 配列を宣言する
2 次元配列は次のように宣言されます。
数据类型 数组名[行数][列数];
例えば:
//声明一个3行4列的整型数组
int num[3][4];
//声明一个5行5列的字符数组
char ch[5][5];
2. 2次元配列の初期化
2 次元配列の初期化は、1 次元配列の初期化と似ています。次に例を示します。
int n[2][3]={
{
1,2,3},
{
4,5,6}
}
または:
int n[][2]={
{
1,2},
{
3,4},
{
5,6}
}
または:
int n[2][2]={
1,2,3,4}
または:
int n[][2]={
1,2,3,4,5,6}
注: 2 次元配列を初期化する場合、行数は省略できますが、列数は必ず記述する必要があります。
キーボードから 2 次元配列の値を入力します。
#include<iostream>
using namespace std;
int main()
{
//声明二维数组
int num[2][3];
//初始化二维数组需要使用双层循环,外层用于控制行数,内层用于控制列数
for(int i=0;i<2;i++){
//二维数组的行
for(int j=0;j<3;j++){
//二维数组的列
//数组的元素使用[行号][列号]表示
cin>>num[i][j];
}
}
//输出数组元素时,同样使用双层循环
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<<num[i][j]<<" ";
}
}
}
3. 練習問題
(1) 4行4列の2次元配列を定義して代入し、1行目と4行目のデータを交換して出力します。
#include<iostream>
using namespace std;
int main()
{
//定义一个4行4列的数组,交换第一行和第四行的值
int num[4][4];
//定义一维数组,用于交换值
int temp[4];
int n=1;
//初始化二维数组,赋值为1-16
for(int i=0;i<4;i++){
//二维数组的行
for(int j=0;j<4;j++){
//二维数组的列
//数组的元素
num[i][j]=n++;
}
}
//输出数组元素时,同样使用双层循环
cout<<"交换前:\n";
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cout<<num[i][j]<<"\t";
}
cout<<endl;
}
//交换
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i==0){
temp[j]=num[0][j];
num[0][j]=num[3][j];
num[3][j]=temp[j];
}
// if(i==3){
// num[3][j]=temp[j];
// }
}
}
//输出数组元素时,同样使用双层循环
cout<<"交换后:\n";
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cout<<num[i][j]<<"\t";
}
cout<<endl;
}
}
(2) 4X4 行列の対角要素の和を計算します。
#include<iostream>
using namespace std;
int main()
{
//计算4行4列矩阵两条对角线上元素的和
/*
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
*/
//定义二维数组
int num[4][4];
int n=1;
//定义变量sum用于存放和
int sum=0;
//初始化二维数组,赋值为1-16
for(int i=0;i<4;i++){
//二维数组的行
for(int j=0;j<4;j++){
//二维数组的列
//数组的元素
num[i][j]=n++;
}
}
//打印矩阵
cout<<"矩阵为:\n";
for(int i=0;i<4;i++){
cout<<"\t";
for(int j=0;j<4;j++){
cout<<num[i][j]<<"\t";
}
cout<<endl;
}
cout<<"\n对角线上的元素为:\n";
//计算和:对角线上的元素有一个共同特点,一条对角线上的元素行号和列号相等,另一条上的元素行+列=3
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i==j||i+j==3){
sum+=num[i][j];
cout<<num[i][j]<<"\t";
}
}
}
//输出总和
cout<<"\n元素总和为:"<<sum;
}
操作結果:
矩阵为:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
对角线上的元素为:
1 4 6 7 10 11 13 16
总和为:68
(3) n*nの2次元配列を入力し、各行の最大値を求めて1次元配列に格納して出力
#include<iostream>
using namespace std;
int main()
{
//输入一个n*n的二维数组,找出每行中的最大值并存到一维数组中,输出
//定义变量n
int n;
cout<<"请输入长度n:";
cin>>n;
//定义二维数组
int num[n][n];
//定义一维数组
int max[n];
//定义变量temp
int temp;
int key=1;
//初始化二维数组,赋值
for(int i=0;i<n;i++){
//二维数组的行
for(int j=0;j<n;j++){
//二维数组的列
//数组的元素
num[i][j]=key++;
}
}
//打印数组
cout<<"生成的数组为:\n";
for(int i=0;i<n;i++){
cout<<"\t";
for(int j=0;j<n;j++){
cout<<num[i][j]<<"\t";
}
cout<<endl;
}
//找每一行中的最大值
for(int i=0;i<n;i++){
//假设本行的第一个元素为最大值
temp=num[i][0];
for(int j=0;j<n;j++){
//如果有元素值大于最大值,则改变最大值
if(num[i][j]>temp){
temp=num[i][j];
}
}
//内层循环结束,表示比较完了一行数据,得到该行的最大值,存入一维数组中
max[i]=temp;
}
//输出数组中的所有元素
for(int i=0;i<n;i++){
cout<<"第"<<i+1<<"行最大值为:"<<max[i]<<endl;
}
}