文章目录
5.4.1 C# 二维数组
在C#中,二维数组可以看作是数组的数组,即数组的每个元素本身也是一个数组。二维数组通常用于表示表格数据或矩阵。
1. 声明二维数组
声明二维数组时,你需要指定两个维度的大小。例如,声明一个3行4列的二维数组如下:
int[,] twoDArray = new int[3, 4];
2. 初始化二维数组
初始化二维数组可以逐个赋值,也可以使用初始化器。
逐个赋值:
int[,] twoDArray = new int[3, 4];
twoDArray[0, 0] = 1;
twoDArray[0, 1] = 2;
// 继续为其他元素赋值...
使用初始化器:
int[,] twoDArray = new int[3, 4] {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
例5-12:读取二维数组中的值
using System;
class Program
{
static void Main()
{
// 初始化一个二维数组
int[,] twoDArray = new int[3, 4] {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 读取并输出二维数组中的值
Console.WriteLine("二维数组的值:");
for (int i = 0; i < twoDArray.GetLength(0); i++) // 遍历行
{
for (int j = 0; j < twoDArray.GetLength(1); j++) // 遍历列
{
Console.Write(twoDArray[i, j] + " ");
}
Console.WriteLine(); // 换行
}
}
}
在这个示例中,我们首先声明并初始化了一个3行4列的二维数组twoDArray
。然后,我们使用两个嵌套的for
循环来遍历数组的每一行和每一列,并使用Console.Write
方法输出每个元素的值。每遍历完一行后,我们使用Console.WriteLine
方法换行,以便输出结果更易于阅读。
GetLength(0)
和GetLength(1)
方法分别返回数组的第一个维度(行数)和第二个维度(列数)的大小。这是获取数组维度大小的标准方法。
5.4.2 C# 多维数组
在C#中,多维数组是数组的扩展,可以有超过两个维度。常见的多维数组包括二维数组(如矩阵)和三维数组(如3D空间中的点阵)。以下是如何声明、初始化和使用多维数组的示例。
1. 声明多维数组
声明多维数组时,你需要为每个维度指定大小。例如,声明一个3x4x2的三维数组如下:
int[,,] threeDArray = new int[3, 4, 2];
2. 初始化多维数组
初始化多维数组可以逐个赋值,也可以使用初始化器。
逐个赋值:
int[,,] threeDArray = new int[3, 4, 2];
threeDArray[0, 0, 0] = 1;
threeDArray[0, 0, 1] = 2;
// 继续为其他元素赋值...
使用初始化器:
int[,,] threeDArray = new int[3, 4, 2] {
{
{1, 2}, {3, 4}, {5, 6}, {7, 8}
},
{
{9, 10}, {11, 12}, {13, 14}, {15, 16}
},
{
{17, 18}, {19, 20}, {21, 22}, {23, 24}
}
};
3. 多维数组的使用
多维数组的使用涉及到遍历数组并访问其元素。以下是如何遍历和读取三维数组的示例。
using System;
class Program
{
static void Main()
{
// 初始化一个三维数组
int[,,] threeDArray = new int[3, 4, 2] {
{
{1, 2}, {3, 4}, {5, 6}, {7, 8}
},
{
{9, 10}, {11, 12}, {13, 14}, {15, 16}
},
{
{17, 18}, {19, 20}, {21, 22}, {23, 24}
}
};
// 读取并输出三维数组中的值
Console.WriteLine("三维数组的值:");
for (int i = 0; i < threeDArray.GetLength(0); i++) // 遍历第一维
{
for (int j = 0; j < threeDArray.GetLength(1); j++) // 遍历第二维
{
for (int k = 0; k < threeDArray.GetLength(2); k++) // 遍历第三维
{
Console.Write(threeDArray[i, j, k] + " ");
}
Console.WriteLine(); // 换行
}
Console.WriteLine(new string('-', 10)); // 分隔不同层
}
}
}
在这个示例中,我们首先声明并初始化了一个3x4x2的三维数组threeDArray
。然后,我们使用三个嵌套的for
循环来遍历数组的三个维度,并使用Console.Write
方法输出每个元素的值。每遍历完一个维度后,我们使用Console.WriteLine
方法换行或分隔不同层,以便输出结果更易于阅读。
GetLength(0)
、GetLength(1)
和GetLength(2)
方法分别返回数组的第一个、第二个和第三个维度的大小。这是获取数组维度大小的标准方法。
5.4.3 C# 应用实例
例5-13:键盘输入两个二维数组并相加
这个程序将从键盘接收两个二维数组的输入,将它们相加,然后输出结果。
using System;
class Program
{
static void Main()
{
Console.Write("输入第一个二维数组的行数和列数(用空格分隔):");
string[] input1 = Console.ReadLine().Split(' ');
int rows = int.Parse(input1[0]);
int cols = int.Parse(input1[1]);
int[,] array1 = new int[rows, cols];
Console.WriteLine("输入第一个二维数组的元素:");
for (int i = 0; i < rows; i++)
{
string[] elements = Console.ReadLine().Split(' ');
for (int j = 0; j < cols; j++)
{
array1[i, j] = int.Parse(elements[j]);
}
}
Console.Write("输入第二个二维数组的行数和列数(用空格分隔):");
string[] input2 = Console.ReadLine().Split(' ');
int rows2 = int.Parse(input2[0]);
int cols2 = int.Parse(input2[1]);
int[,] array2 = new int[rows2, cols2];
Console.WriteLine("输入第二个二维数组的元素:");
for (int i = 0; i < rows2; i++)
{
string[] elements = Console.ReadLine().Split(' ');
for (int j = 0; j < cols2; j++)
{
array2[i, j] = int.Parse(elements[j]);
}
}
// 确保两个数组具有相同的维度
if (rows != rows2 || cols != cols2)
{
Console.WriteLine("数组维度不匹配,无法相加。");
return;
}
int[,] result = new int[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
result[i, j] = array1[i, j] + array2[i, j];
}
}
Console.WriteLine("两个数组相加的结果为:");
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
Console.Write(result[i, j] + " ");
}
Console.WriteLine();
}
}
}
例5-14:生成并输出杨辉三角
杨辉三角是一个由数字组成的三角形,其中每个数字是它正上方两个数字的和。
using System;
class Program
{
static void Main()
{
Console.Write("输入杨辉三角的行数:");
int numRows = int.Parse(Console.ReadLine());
int[][] pascalTriangle = new int[numRows][];
for (int i = 0; i < numRows; i++)
{
pascalTriangle[i] = new int[i + 1];
pascalTriangle[i][0] = 1; // 每行的第一个数字是1
pascalTriangle[i][i] = 1; // 每行的最后一个数字是1
for (int j = 1; j < i; j++)
{
pascalTriangle[i][j] = pascalTriangle[i - 1][j - 1] + pascalTriangle[i - 1][j];
}
}
Console.WriteLine("杨辉三角为:");
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j <= i; j++)
{
Console.Write(pascalTriangle[i][j] + " ");
}
Console.WriteLine();
}
}
}
这两个程序展示了如何在C#中处理二维数组和生成数学模式。第一个程序从用户那里获取两个二维数组的输入,将它们相加,并输出结果。第二个程序生成并输出指定行数的杨辉三角。