用不带参数的构造函数,怎么进行矩阵运算 5C

老师给我留的作业。急!!!
题目如下:
设计一个矩阵类,重载其加、减、乘运算符,实现矩阵的相加、相减、相乘,并用Windows Form程序进行测试。
要求:
1)定义一个一维数组,用于存储矩阵的值。
2)定义两个私有成员变量存储矩阵行列值。
3)定义带有set\get访问器的两个属性,对行列值变量进行设置。
4)定义一个索引器返回指定某行某列的矩阵的元素,索引器只有get访问器。
5)定义一个不带参构造函数,根据输入行列属性值随机创建矩阵,随机值为(1-100之间的数)。
6)定义+,-,*的重载方法,实现两个矩阵的相加、相减、相乘。
7)定义一个方法,实现矩阵的转置。

问题:
1.一个不带参数的构造函数,怎么能让数组的行列数自定义呢?怎么可以对矩阵进行各种运算呢?
2.求大神帮帮忙,写个完整的代码我看看。头凸

2个回答

这个答案都不采纳,我就真的生气了。

Matrix

using System;

namespace TestForm
{
    class MATRIX
    {
        private int[] data;
        private int rows;
        private int columns;

        public MATRIX()
        {
            Initialize();
        }

        public int Rows
        {
            get => rows;
            set
            {
                if (value > 0)
                {
                    rows = value;
                    Initialize();
                }
            }
        }
        public int Columns
        {
            get => columns;
            set
            {
                if (value > 0)
                {
                    columns = value;
                    Initialize();
                }
            }
        }

        public int this[int index]
        {
            get
            {
                return data[index];
            }
        }

        private void Initialize()
        {
            data = new int[rows * columns];
            Random rnd = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = rnd.Next(1, 101);
            }
            GC.Collect();
        }
        public static MATRIX operator +(MATRIX a, MATRIX b)
        {
            MATRIX ret = null;
            if (a != null && b != null && a.rows == b.rows && a.columns == b.columns)
            {
                ret = new MATRIX() { Rows = a.rows, Columns = a.columns };
                for (int i = 0; i < ret.Rows * ret.Columns; i++)
                {
                    ret.data[i] = a.data[i] + b.data[i];
                }
            }
            return ret;
        }
        public static MATRIX operator -(MATRIX a, MATRIX b)
        {
            MATRIX ret = null;
            if (a != null && b != null && a.rows == b.rows && a.columns == b.columns)
            {
                ret = new MATRIX() { Rows = a.rows, Columns = a.columns };
                for (int i = 0; i < ret.Rows * ret.Columns; i++)
                {
                    ret.data[i] = a.data[i] - b.data[i];
                }
            }
            return ret;
        }
        public static MATRIX operator *(MATRIX a, MATRIX b)
        {
            MATRIX ret = null;
            if (a != null && b != null && a.rows == b.columns)
            {
                ret = new MATRIX() { Rows = a.rows, Columns = b.columns };
                for (int i = 0; i < ret.rows; i++)
                    for (int j = 0; j < ret.columns; j++)
                    {
                        ret.data[i * ret.columns + j] = 0;
                        for (int k = 0; k < a.columns; k++)

                            ret.data[i * ret.columns + j] += a.data[i * a.columns + k] * b.data[k * b.columns + j];
                    }
            }
            return ret;
        }

        public void T()
        {
            int[] newdata = new int[data.Length];
            for (int i = 0; i < data.Length; i++)
            {
                newdata[i] = data[i % columns * columns + i / rows];
            }
            data = newdata;
        }
    }
}

MainForm.cs

using System;
using System.Windows.Forms;

namespace TestForm
{
    public partial class MainForm : Form
    {
        private MATRIX matrixA;
        private MATRIX matrixB;
        public MainForm()
        {
            InitializeComponent();
        }

        private void BTN_CreateMatrix_Click(object sender, EventArgs e)
        {
            MATRIX matrix = new MATRIX()
            {
                Rows = 3,
                Columns = 3
            };
            for (int row = 0; row < matrix.Rows; row++)
            {
                string line = "";
                for (int column = 0; column < matrix.Columns; column++)
                {
                    line += matrix[row * matrix.Columns + column].ToString() + "\t";
                }
                LOG(line);
            }
        }

        private void LOG(string msg)
        {
            LogBox.Text += msg + Environment.NewLine;
        }

        private void BTN_CreateMatrix_A_Click(object sender, EventArgs e)
        {
            LOG("创建矩阵 A");

            int r = 0;
            int c = 0;
            int.TryParse(RowBox_A.Text, out r);
            int.TryParse(ColumnBox_A.Text, out c);
            RowBox_A.Text = r.ToString();
            ColumnBox_A.Text = c.ToString();

            matrixA = new MATRIX()
            {
                Rows = r,
                Columns = c
            };
            OutPutMatrix(matrixA);
        }

        private void BTN_CreateMatrix_B_Click(object sender, EventArgs e)
        {
            LOG("创建矩阵 B");

            int r = 0;
            int c = 0;
            int.TryParse(RowBox_B.Text, out r);
            int.TryParse(ColumnBox_B.Text, out c);
            RowBox_B.Text = r.ToString();
            ColumnBox_B.Text = c.ToString();

            matrixB = new MATRIX()
            {
                Rows = r,
                Columns = c
            };
            OutPutMatrix(matrixB);
        }

        private void OutPutMatrix(MATRIX matrix)
        {
            if (matrix == null)
            {
                LOG("[空矩阵]");
                return;
            }
            for (int row = 0; row < matrix.Rows; row++)
            {
                string line = "";
                for (int column = 0; column < matrix.Columns; column++)
                {
                    line += matrix[row * matrix.Columns + column].ToString() + "\t";
                }
                LOG(line);
            }
        }

        private void BTN_Show_A_Click(object sender, EventArgs e)
        {
            LOG("显示矩阵 A 内容");
            OutPutMatrix(matrixA);
        }

        private void BTN_Show_B_Click(object sender, EventArgs e)
        {
            LOG("显示矩阵 B 内容");
            OutPutMatrix(matrixB);
        }

        private void BTN_Add_Click(object sender, EventArgs e)
        {
            LOG("A + B =");
            OutPutMatrix(matrixA + matrixB);
        }

        private void BTN_Minus_Click(object sender, EventArgs e)
        {
            LOG("A - B =");
            OutPutMatrix(matrixA - matrixB);
        }

        private void BTN_Mutiply_Click(object sender, EventArgs e)
        {
            LOG("A * B =");
            OutPutMatrix(matrixA * matrixB);
        }

        private void BTN_AT_Click(object sender, EventArgs e)
        {
            LOG("A' =");
            matrixA.T();
            OutPutMatrix(matrixA);
        }

        private void BTN_BT_Click(object sender, EventArgs e)
        {
            LOG("B' =");
            matrixB.T();
            OutPutMatrix(matrixB);
        }

        private void Box_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (e.KeyChar != '\b')//这是允许输入退格键
            {
                if ((e.KeyChar < '0') || (e.KeyChar > '9'))//这是允许输入0-9数字
                {
                    e.Handled = true;
                }
            }
        }
    }
}

MainForm.Designer.cs

namespace TestForm
{
    partial class MainForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.LogBox = new System.Windows.Forms.TextBox();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.ColumnBox_A = new System.Windows.Forms.TextBox();
            this.label2 = new System.Windows.Forms.Label();
            this.RowBox_A = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.ColumnBox_B = new System.Windows.Forms.TextBox();
            this.label5 = new System.Windows.Forms.Label();
            this.RowBox_B = new System.Windows.Forms.TextBox();
            this.label6 = new System.Windows.Forms.Label();
            this.BTN_CreateMatrix_A = new System.Windows.Forms.Button();
            this.BTN_CreateMatrix_B = new System.Windows.Forms.Button();
            this.BTN_Show_A = new System.Windows.Forms.Button();
            this.BTN_Show_B = new System.Windows.Forms.Button();
            this.BTN_Add = new System.Windows.Forms.Button();
            this.BTN_Minus = new System.Windows.Forms.Button();
            this.BTN_Mutiply = new System.Windows.Forms.Button();
            this.BTN_AT = new System.Windows.Forms.Button();
            this.BTN_BT = new System.Windows.Forms.Button();
            this.groupBox1.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.SuspendLayout();
            // 
            // LogBox
            // 
            this.LogBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.LogBox.Location = new System.Drawing.Point(12, 183);
            this.LogBox.Multiline = true;
            this.LogBox.Name = "LogBox";
            this.LogBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.LogBox.Size = new System.Drawing.Size(664, 255);
            this.LogBox.TabIndex = 1;
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.Add(this.BTN_AT);
            this.groupBox1.Controls.Add(this.BTN_Show_A);
            this.groupBox1.Controls.Add(this.BTN_CreateMatrix_A);
            this.groupBox1.Controls.Add(this.ColumnBox_A);
            this.groupBox1.Controls.Add(this.label2);
            this.groupBox1.Controls.Add(this.RowBox_A);
            this.groupBox1.Controls.Add(this.label1);
            this.groupBox1.Location = new System.Drawing.Point(13, 13);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(627, 57);
            this.groupBox1.TabIndex = 10;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "矩阵 A";
            // 
            // ColumnBox_A
            // 
            this.ColumnBox_A.Location = new System.Drawing.Point(304, 21);
            this.ColumnBox_A.Name = "ColumnBox_A";
            this.ColumnBox_A.Size = new System.Drawing.Size(100, 20);
            this.ColumnBox_A.TabIndex = 9;
            this.ColumnBox_A.Text = "0";
            this.ColumnBox_A.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box_KeyPress);
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(266, 25);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(31, 13);
            this.label2.TabIndex = 8;
            this.label2.Text = "列:";
            // 
            // RowBox_A
            // 
            this.RowBox_A.Location = new System.Drawing.Point(140, 21);
            this.RowBox_A.Name = "RowBox_A";
            this.RowBox_A.Size = new System.Drawing.Size(100, 20);
            this.RowBox_A.TabIndex = 7;
            this.RowBox_A.Text = "0";
            this.RowBox_A.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box_KeyPress);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(102, 25);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(31, 13);
            this.label1.TabIndex = 6;
            this.label1.Text = "行:";
            // 
            // groupBox2
            // 
            this.groupBox2.Controls.Add(this.BTN_BT);
            this.groupBox2.Controls.Add(this.BTN_Show_B);
            this.groupBox2.Controls.Add(this.BTN_CreateMatrix_B);
            this.groupBox2.Controls.Add(this.ColumnBox_B);
            this.groupBox2.Controls.Add(this.label5);
            this.groupBox2.Controls.Add(this.RowBox_B);
            this.groupBox2.Controls.Add(this.label6);
            this.groupBox2.Location = new System.Drawing.Point(13, 76);
            this.groupBox2.Name = "groupBox2";
            this.groupBox2.Size = new System.Drawing.Size(627, 57);
            this.groupBox2.TabIndex = 11;
            this.groupBox2.TabStop = false;
            this.groupBox2.Text = "矩阵 B";
            // 
            // ColumnBox_B
            // 
            this.ColumnBox_B.Location = new System.Drawing.Point(304, 24);
            this.ColumnBox_B.Name = "ColumnBox_B";
            this.ColumnBox_B.Size = new System.Drawing.Size(100, 20);
            this.ColumnBox_B.TabIndex = 9;
            this.ColumnBox_B.Text = "0";
            this.ColumnBox_B.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box_KeyPress);
            // 
            // label5
            // 
            this.label5.AutoSize = true;
            this.label5.Location = new System.Drawing.Point(266, 28);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(31, 13);
            this.label5.TabIndex = 8;
            this.label5.Text = "列:";
            // 
            // RowBox_B
            // 
            this.RowBox_B.Location = new System.Drawing.Point(140, 24);
            this.RowBox_B.Name = "RowBox_B";
            this.RowBox_B.Size = new System.Drawing.Size(100, 20);
            this.RowBox_B.TabIndex = 7;
            this.RowBox_B.Text = "0";
            this.RowBox_B.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box_KeyPress);
            // 
            // label6
            // 
            this.label6.AutoSize = true;
            this.label6.Location = new System.Drawing.Point(102, 28);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(31, 13);
            this.label6.TabIndex = 6;
            this.label6.Text = "行:";
            // 
            // BTN_CreateMatrix_A
            // 
            this.BTN_CreateMatrix_A.Location = new System.Drawing.Point(17, 20);
            this.BTN_CreateMatrix_A.Name = "BTN_CreateMatrix_A";
            this.BTN_CreateMatrix_A.Size = new System.Drawing.Size(75, 23);
            this.BTN_CreateMatrix_A.TabIndex = 10;
            this.BTN_CreateMatrix_A.Text = "创建矩阵";
            this.BTN_CreateMatrix_A.UseVisualStyleBackColor = true;
            this.BTN_CreateMatrix_A.Click += new System.EventHandler(this.BTN_CreateMatrix_A_Click);
            // 
            // BTN_CreateMatrix_B
            // 
            this.BTN_CreateMatrix_B.Location = new System.Drawing.Point(17, 22);
            this.BTN_CreateMatrix_B.Name = "BTN_CreateMatrix_B";
            this.BTN_CreateMatrix_B.Size = new System.Drawing.Size(75, 23);
            this.BTN_CreateMatrix_B.TabIndex = 11;
            this.BTN_CreateMatrix_B.Text = "创建矩阵";
            this.BTN_CreateMatrix_B.UseVisualStyleBackColor = true;
            this.BTN_CreateMatrix_B.Click += new System.EventHandler(this.BTN_CreateMatrix_B_Click);
            // 
            // BTN_Show_A
            // 
            this.BTN_Show_A.Location = new System.Drawing.Point(424, 20);
            this.BTN_Show_A.Name = "BTN_Show_A";
            this.BTN_Show_A.Size = new System.Drawing.Size(75, 23);
            this.BTN_Show_A.TabIndex = 11;
            this.BTN_Show_A.Text = "显示矩阵";
            this.BTN_Show_A.UseVisualStyleBackColor = true;
            this.BTN_Show_A.Click += new System.EventHandler(this.BTN_Show_A_Click);
            // 
            // BTN_Show_B
            // 
            this.BTN_Show_B.Location = new System.Drawing.Point(424, 23);
            this.BTN_Show_B.Name = "BTN_Show_B";
            this.BTN_Show_B.Size = new System.Drawing.Size(75, 23);
            this.BTN_Show_B.TabIndex = 12;
            this.BTN_Show_B.Text = "显示矩阵";
            this.BTN_Show_B.UseVisualStyleBackColor = true;
            this.BTN_Show_B.Click += new System.EventHandler(this.BTN_Show_B_Click);
            // 
            // BTN_Add
            // 
            this.BTN_Add.Location = new System.Drawing.Point(13, 140);
            this.BTN_Add.Name = "BTN_Add";
            this.BTN_Add.Size = new System.Drawing.Size(75, 23);
            this.BTN_Add.TabIndex = 12;
            this.BTN_Add.Text = "A + B";
            this.BTN_Add.UseVisualStyleBackColor = true;
            this.BTN_Add.Click += new System.EventHandler(this.BTN_Add_Click);
            // 
            // BTN_Minus
            // 
            this.BTN_Minus.Location = new System.Drawing.Point(107, 140);
            this.BTN_Minus.Name = "BTN_Minus";
            this.BTN_Minus.Size = new System.Drawing.Size(75, 23);
            this.BTN_Minus.TabIndex = 13;
            this.BTN_Minus.Text = "A - B";
            this.BTN_Minus.UseVisualStyleBackColor = true;
            this.BTN_Minus.Click += new System.EventHandler(this.BTN_Minus_Click);
            // 
            // BTN_Mutiply
            // 
            this.BTN_Mutiply.Location = new System.Drawing.Point(201, 140);
            this.BTN_Mutiply.Name = "BTN_Mutiply";
            this.BTN_Mutiply.Size = new System.Drawing.Size(75, 23);
            this.BTN_Mutiply.TabIndex = 14;
            this.BTN_Mutiply.Text = "A * B";
            this.BTN_Mutiply.UseVisualStyleBackColor = true;
            this.BTN_Mutiply.Click += new System.EventHandler(this.BTN_Mutiply_Click);
            // 
            // BTN_AT
            // 
            this.BTN_AT.Location = new System.Drawing.Point(526, 19);
            this.BTN_AT.Name = "BTN_AT";
            this.BTN_AT.Size = new System.Drawing.Size(75, 23);
            this.BTN_AT.TabIndex = 15;
            this.BTN_AT.Text = "转置";
            this.BTN_AT.UseVisualStyleBackColor = true;
            this.BTN_AT.Click += new System.EventHandler(this.BTN_AT_Click);
            // 
            // BTN_BT
            // 
            this.BTN_BT.Location = new System.Drawing.Point(526, 23);
            this.BTN_BT.Name = "BTN_BT";
            this.BTN_BT.Size = new System.Drawing.Size(75, 23);
            this.BTN_BT.TabIndex = 16;
            this.BTN_BT.Text = "转置";
            this.BTN_BT.UseVisualStyleBackColor = true;
            this.BTN_BT.Click += new System.EventHandler(this.BTN_BT_Click);
            // 
            // MainForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(688, 450);
            this.Controls.Add(this.BTN_Mutiply);
            this.Controls.Add(this.BTN_Minus);
            this.Controls.Add(this.BTN_Add);
            this.Controls.Add(this.groupBox2);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.LogBox);
            this.Name = "MainForm";
            this.Text = "矩阵计算器";
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.groupBox2.ResumeLayout(false);
            this.groupBox2.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion
        private System.Windows.Forms.TextBox LogBox;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.Button BTN_CreateMatrix_A;
        private System.Windows.Forms.TextBox ColumnBox_A;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.TextBox RowBox_A;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Button BTN_CreateMatrix_B;
        private System.Windows.Forms.TextBox ColumnBox_B;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.TextBox RowBox_B;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Button BTN_Show_A;
        private System.Windows.Forms.Button BTN_Show_B;
        private System.Windows.Forms.Button BTN_Add;
        private System.Windows.Forms.Button BTN_Minus;
        private System.Windows.Forms.Button BTN_Mutiply;
        private System.Windows.Forms.Button BTN_AT;
        private System.Windows.Forms.Button BTN_BT;
    }
}

定义一个不带参构造函数,根据输入行列属性值随机创建矩阵
说的很清楚,通过键盘输入
比如
class Rectangle
{
private int rowcount;
private int colcount;
private int[,] data;
public Rectangle()
{
rowcount = int.Parse(Console.ReadLine());
colcount = int.Parse(Console.ReadLine());
...
}
}

重载+运算
public static Rectangle operator +(Rectangle a, Rectangle b)
{
Rectangle result = new Rectangle(a.rowcount, a.colcount);
for (int i = 0; i < result.rowcount; i++)
for (int j = 0; j < result.colcount; j++)
result.data[i,j] = a.data[i, j] + b.data[i, j];
return result;
}

别的类似

采纳了可以完整写给你。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问