3.C#编写一个窗体程序,能实现矩阵操作,要求如下: (1)能随机生成方阵,矩阵的维数用户可以指定。 (2)实现矩阵相加、相减以及相乘。 (3)实现矩阵转置。

3.编写一个窗体程序,能实现矩阵操作,要求如下:
(1)能随机生成方阵,矩阵的维数用户可以指定。
(2)实现矩阵相加、相减以及相乘。
(3)实现矩阵转置。

参考chatgpt:

using System;
using System.Windows.Forms;
namespace MatrixCalculator
{
    public partial class Form1 : Form
    {
        private int[,] matrixA, matrixB, matrixC;
        private int rows, cols;
        public Form1()
        {
            InitializeComponent();
        }
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            // 生成随机矩阵
            rows = int.Parse(txtRows.Text);
            cols = int.Parse(txtCols.Text);
            Random rand = new Random();
            matrixA = new int[rows, cols];
            matrixB = new int[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    matrixA[i, j] = rand.Next(10);
                    matrixB[i, j] = rand.Next(10);
                }
            }
            DisplayMatrix(matrixA, dgvA);
            DisplayMatrix(matrixB, dgvB);
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            // 矩阵相加
            if (matrixA == null || matrixB == null)
            {
                MessageBox.Show("请先生成矩阵");
                return;
            }
            if (rows != int.Parse(txtRowsC.Text) || cols != int.Parse(txtColsC.Text))
            {
                MessageBox.Show("两个矩阵必须具有相同的维数");
                return;
            }
            matrixC = new int[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    matrixC[i, j] = matrixA[i, j] + matrixB[i, j];
                }
            }
            DisplayMatrix(matrixC, dgvC);
        }
        private void btnSubtract_Click(object sender, EventArgs e)
        {
            // 矩阵相减
            if (matrixA == null || matrixB == null)
            {
                MessageBox.Show("请先生成矩阵");
                return;
            }
            if (rows != int.Parse(txtRowsC.Text) || cols != int.Parse(txtColsC.Text))
            {
                MessageBox.Show("两个矩阵必须具有相同的维数");
                return;
            }
            matrixC = new int[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    matrixC[i, j] = matrixA[i, j] - matrixB[i, j];
                }
            }
            DisplayMatrix(matrixC, dgvC);
        }
        private void btnMultiply_Click(object sender, EventArgs e)
        {
            // 矩阵相乘
            if (matrixA == null || matrixB == null)
            {
                MessageBox.Show("请先生成矩阵");
                return;
            }
            if (cols != int.Parse(txtRowsC.Text))
            {
                MessageBox.Show($"第一个矩阵的列数必须等于第二个矩阵的行数 ({cols} != {txtRowsC.Text})");
                return;
            }
            int n = int.Parse(txtColsC.Text);
            matrixC = new int[rows, n];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    int sum = 0;
                    for (int k = 0; k < cols; k++)
                    {
                        sum += matrixA[i, k] * matrixB[k, j];
                    }
                    matrixC[i, j] = sum;
                }
            }
            DisplayMatrix(matrixC, dgvC);
        }
        private void btnTranspose_Click(object sender, EventArgs e)
        {
            // 矩阵转置
            if (matrixA == null)
            {
                MessageBox.Show("请先生成矩阵");
                return;
            }
            matrixC = new int[cols, rows];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    matrixC[j, i] = matrixA[i, j];
                }
            }
            DisplayMatrix(matrixC, dgvC);
        }
        private void DisplayMatrix(int[,] matrix, DataGridView dgv)
        {
            // 将矩阵显示在 DataGridView 中
            dgv.Rows.Clear();
            dgv.Columns.Clear();
            dgv.ColumnCount = cols;
            for (int i = 0; i < rows; i++)
            {
                DataGridViewRow row = new DataGridViewRow();
                row.CreateCells(dgv);
                for (int j = 0; j < cols; j++)
                {
                    row.Cells[j].Value = matrix[i, j];
                }
                dgv.Rows.Add(row);
            }
        }
    }
}

该程序包含以下功能:

随机生成两个矩阵,并显示在 DataGridView 中。

矩阵相加、相减、相乘,并显示在 DataGridView 中。

矩阵转置,并显示在 DataGridView 中。
程序中使用了一个双重循环来生成随机矩阵,并使用了 DisplayMatrix 函数将矩阵显示在 DataGridView 中。在执行矩阵相加、相减、相乘、转置操作时,需要先判断矩阵是否已经生成,并在必要时进行维数的判断。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
下面是使用 C# 编写的一个窗体程序,可以实现矩阵操作,包括随机生成方阵、矩阵相加、相减、相乘以及转置。具体实现如下:

1、 随机生成方阵

// 生成一个大小为 n x n 的随机方阵
private int[,] GenerateRandomMatrix(int n)
{
    Random rand = new Random();
    int[,] matrix = new int[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            matrix[i, j] = rand.Next(10);
        }
    }
    return matrix;
}

在上面的代码中,GenerateRandomMatrix 方法接受一个整数 n,返回一个大小为 n x n 的随机方阵。使用 Random 类生成随机数,并将其填充到矩阵中。

2、 矩阵相加、相减、相乘

// 矩阵相加
private int[,] MatrixAdd(int[,] A, int[,] B)
{
    int n = A.GetLength(0);
    int[,] result = new int[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            result[i, j] = A[i, j] + B[i, j];
        }
    }
    return result;
}

// 矩阵相减
private int[,] MatrixSubtract(int[,] A, int[,] B)
{
    int n = A.GetLength(0);
    int[,] result = new int[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            result[i, j] = A[i, j] - B[i, j];
        }
    }
    return result;
}

// 矩阵相乘
private int[,] MatrixMultiply(int[,] A, int[,] B)
{
    int n = A.GetLength(0);
    int[,] result = new int[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                result[i, j] += A[i, k] * B[k, j];
            }
        }
    }
    return result;
}

在上面的代码中,MatrixAddMatrixSubtractMatrixMultiply 方法分别实现矩阵的加法、减法和乘法。这里假设两个矩阵 A 和 B 的大小均为 n x n,返回一个大小也为 n x n 的矩阵作为结果。

3、 矩阵转置

// 矩阵转置
private int[,] MatrixTranspose(int[,] matrix)
{
    int n = matrix.GetLength(0);
    int[,] result = new int[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            result[i, j] = matrix[j, i];
        }
    }
    return result;
}

在上面的代码中,MatrixTranspose 方法接受一个大小为 n x n 的矩阵,返回其转置矩阵,也是一个大小为 n x n 的矩阵。

在窗体应用程序中,可以添加按钮或菜单项来触发这些功能。例如,添加一个 "生成随机矩阵" 的按钮,代码如下:

private void btnRandom_Click(object sender, EventArgs e)
{
    int n = Convert.ToInt32(txtSize.Text);
    int[,] matrix = GenerateRandomMatrix(n);
    DisplayMatrix(matrix);
}

在上面的代码中,btnRandom_Click 方法是当 "生成随机矩阵" 按钮被点击时执行的代码。从文本框 txtSize 中获取矩阵的维数,然后调用 GenerateRandomMatrix 方法生成一个随机矩阵,最后调用DisplayMatrix 方法将矩阵显示在界面上。同样地,可以添加其他按钮或菜单项来触发矩阵的加法、减法、乘法和转置等操作。

完整的窗体程序代码如下:

using System;
using System.Windows.Forms;

namespace MatrixOperation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 生成一个大小为 n x n 的随机方阵
        private int[,] GenerateRandomMatrix(int n)
        {
            Random rand = new Random();
            int[,] matrix = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix[i, j] = rand.Next(10);
                }
            }
            return matrix;
        }

        // 矩阵相加
        private int[,] MatrixAdd(int[,] A, int[,] B)
        {
            int n = A.GetLength(0);
            int[,] result = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    result[i, j] = A[i, j] + B[i, j];
                }
            }
            return result;
        }

        // 矩阵相减
        private int[,] MatrixSubtract(int[,] A, int[,] B)
        {
            int n = A.GetLength(0);
            int[,] result = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    result[i, j] = A[i, j] - B[i, j];
                }
            }
            return result;
        }

        // 矩阵相乘
        private int[,] MatrixMultiply(int[,] A, int[,] B)
        {
            int n = A.GetLength(0);
            int[,] result = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    for (int k = 0; k < n; k++)
                    {
                        result[i, j] += A[i, k] * B[k, j];
                    }
                }
            }
            return result;
        }

        // 矩阵转置
        private int[,] MatrixTranspose(int[,] matrix)
        {
            int n = matrix.GetLength(0);
            int[,] result = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    result[i, j] = matrix[j, i];
                }
            }
            return result;
        }

        // 将矩阵显示在界面上
        private void DisplayMatrix(int[,] matrix)
        {
            int n = matrix.GetLength(0);
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            for (int i = 0; i < n; i++)
            {
                dataGridView1.Columns.Add("", "");
            }
            for (int i = 0; i < n; i++)
            {
                dataGridView1.Rows.Add();
                for (int j = 0; j < n; j++)
                {
                    dataGridView1.Rows[i].Cells[j].Value = matrix[i, j];
                }
            }
        }

        // 生成随机矩阵
        private void btnRandom_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            int[,] matrix = GenerateRandomMatrix(n);
            DisplayMatrix(matrix);
        }

        // 矩阵相加
        private void btnAdd_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            int[,] matrix1 = new int[n, n];
            int[,] matrix2 = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix1[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                    matrix2[i, j] = Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value);
                }
            }
            int[,] result = MatrixAdd(matrix1, matrix2);
            DisplayMatrix(result);
        }

        // 矩阵相减
        private void btnSubtract_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            int[,] matrix1 = new int[n, n];
            int[,] matrix2 = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix1[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                    matrix2[i, j] = Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value);
                }
            }
            int[,] result = MatrixSubtract(matrix1, matrix2);
            DisplayMatrix(result);
        }

        // 矩阵相乘
        private void btnMultiply_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            int[,] matrix1 = new int[n, n];
            int[,] matrix2 = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix1[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                    matrix2[i, j] = Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value);
                }
            }
            int[,] result = MatrixMultiply(matrix1, matrix2);
            DisplayMatrix(result);
        }

        // 矩阵转置
        private void btnTranspose_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            int[,] matrix = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                }
            }
            int[,] result = MatrixTranspose(matrix);
            DisplayMatrix(result);
        }

        // 清空矩阵
        private void btnClear_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            dataGridView2.Rows.Clear();
            dataGridView2.Columns.Clear();
        }

        // 改变矩阵大小
        private void txtSize_TextChanged(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txtSize.Text);
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            dataGridView2.Rows.Clear();
            dataGridView2.Columns.Clear();
            for (int i = 0; i < n; i++)
            {
                dataGridView1.Columns.Add("", "");
                dataGridView2.Columns.Add("", "");
            }
            for (int i = 0; i < n; i++)
            {
                dataGridView1.Rows.Add();
                dataGridView2.Rows.Add();
            }
        }
    }
}

在窗体应用程序中,创建一个 DataGridView 控件用于显示矩阵,同时添加一些按钮或菜单项来触发矩阵操作。在代码中,DisplayMatrix 方法用于将矩阵显示在 DataGridView 控件中,而其他方法则实现了具体的矩阵操作。注意,在进行矩阵相加、相减和相乘操作时,需要先从 DataGridView 控件中获取两个矩阵,然后再调用相应的方法进行操作。

以上就是使用 C# 编写一个窗体程序,实现矩阵操作的完整代码。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢