C# Matrix Multiplication Program

Beginner
7 min read
Updated: Oct 2026
2 programs
Live preview

What Is Matrix Multiplication?

Matrix multiplication pairs each row of A with each column of B. If A is m × n and B is n × p, then AB exists and has size m × p.

Remember
A (m × n) × B (n × p) → C (m × p)

C[i, j] = sum over k of  A[i, k] * B[k, j]

Example (2×2):
  [1 2]   [5 6]   [1·5+2·7  1·6+2·8]   [19 22]
  [3 4] × [7 8] = [3·5+4·7  3·6+4·8] = [43 50]

Not the same as cell-by-cell multiply.
A shapeB shapeAllowed?Result
2 × 22 × 2Yes2 × 2
2 × 33 × 2Yes2 × 2
2 × 32 × 2No—

How to Multiply Matrices in C#

Four clear steps — then code the classic triple loop.

  1. Check that A’s columns equal B’s rows.
  2. Create result C with size rowsA × colsB (zeros by default).
  3. For each i, j, accumulate sum += A[i, k] * B[k, j] over k.
  4. Store that sum in C[i, j].
MethodIdeaTimeBest for
Triple nested loopsDot product of row i and column jO(m × n × p)Interviews, teaching
Shape-safe multiplyValidate inner dimensions firstO(m × n × p)Safer production-style code

Pseudocode

Pseudocode
function Multiply(A, B):
    m = rows of A
    n = cols of A
    p = cols of B

    if n != rows of B:
        error "inner dimensions must match"

    C = new matrix[m][p]   // zeros
    for i from 0 to m - 1:
        for j from 0 to p - 1:
            for k from 0 to n - 1:
                C[i][j] = C[i][j] + A[i][k] * B[k][j]

    return C

Cheat Sheet

Keep these facts handy while writing the program.

TopicDetail
Shape rulecols(A) == rows(B)
Result sizerows(A) × cols(B)
Cell formulaΣ A[i, k] * B[k, j]
Loopsi rows, j cols, k shared
Not entrywiseDo not confuse with A[i,j] * B[i,j]
Classic check[[1,2],[3,4]] × [[5,6],[7,8]] = [[19,22],[43,50]]

Live Preview

Pick a sample pair to see A, B, and the product AB.

Tap a chip to run. Inner dimensions always match in these samples.

Result
A (2×2) =
1  2
3  4

B (2×2) =
5  6
7  8

A × B (2×2) =
19 22
43 50

Worked Walkthrough — 2×2

Each result cell is one row-column dot product.

Calculation
A = [1 2]    B = [5 6]
    [3 4]        [7 8]

C[0,0] = 1·5 + 2·7 = 5 + 14 = 19
C[0,1] = 1·6 + 2·8 = 6 + 16 = 22
C[1,0] = 3·5 + 4·7 = 15 + 28 = 43
C[1,1] = 3·6 + 4·8 = 18 + 32 = 50

Result = [19 22]
         [43 50]

C# Programs

Start with the classic triple nested loop. Then add an inner-dimension check for safer code.

Example 1 — Triple Nested Loops

Accumulate each result cell as a row-column dot product.

C#
using System;

class Program
{
    static int[,] Multiply(int[,] a, int[,] b)
    {
        int m = a.GetLength(0);
        int n = a.GetLength(1);
        int p = b.GetLength(1);
        int[,] c = new int[m, p];

        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < p; j++)
            {
                for (int k = 0; k < n; k++)
                {
                    c[i, j] += a[i, k] * b[k, j];
                }
            }
        }
        return c;
    }

    static void Print(int[,] m)
    {
        for (int i = 0; i < m.GetLength(0); i++)
        {
            for (int j = 0; j < m.GetLength(1); j++)
            {
                Console.Write(m[i, j] + " ");
            }
            Console.WriteLine();
        }
    }

    static void Main()
    {
        int[,] a = { { 1, 2 }, { 3, 4 } };
        int[,] b = { { 5, 6 }, { 7, 8 } };
        Print(Multiply(a, b));
    }
}

How It Works

  1. m = rows of A, n = shared size, p = columns of B.
  2. new int[m, p] starts filled with zeros — good for a running sum.
  3. Outer i picks the result row; middle j picks the result column.
  4. Inner k walks the shared dimension and adds a[i, k] * b[k, j].
  5. For C[0,0]: 1*5 + 2*7 = 19.

Example 2 — Shape-Safe Multiply

Validate that A’s columns equal B’s rows before multiplying.

C#
using System;

class Program
{
    static int[,] Multiply(int[,] a, int[,] b)
    {
        int m = a.GetLength(0);
        int n = a.GetLength(1);
        int nB = b.GetLength(0);
        int p = b.GetLength(1);

        if (n != nB)
        {
            throw new ArgumentException(
                "A columns (" + n + ") must equal B rows (" + nB + ").");
        }

        int[,] c = new int[m, p];
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < p; j++)
            {
                for (int k = 0; k < n; k++)
                {
                    c[i, j] += a[i, k] * b[k, j];
                }
            }
        }
        return c;
    }

    static void Main()
    {
        int[,] a = { { 1, 2, 3 }, { 4, 5, 6 } }; // 2×3
        int[,] b = { { 7, 8 }, { 9, 10 }, { 11, 12 } }; // 3×2
        int[,] c = Multiply(a, b);

        for (int i = 0; i < c.GetLength(0); i++)
        {
            for (int j = 0; j < c.GetLength(1); j++)
            {
                Console.Write(c[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}

How It Works

  1. Compare a.GetLength(1) with b.GetLength(0).
  2. Throw if inner dimensions differ — multiplication is undefined.
  3. Result size is 2 × 2 for a 2×3 times a 3×2.
  4. Same triple loop accumulates each cell.
  5. Check: C[0,0] = 1·7 + 2·9 + 3·11 = 58.

Edge Cases & Pitfalls

Check these before calling the solution done.

Inner dims

Must match

cols(A) == rows(B) or the product is undefined.

Entrywise

Wrong algorithm

Do not write A[i,j] * B[i,j] for true matrix multiply.

Order

AB ≠ BA

Multiplication is not commutative in general.

Overflow

Use long when needed

Products and sums can exceed int.MaxValue.

Time and Space Complexity

ProgramTimeExtra space
Triple loopsO(m × n × p)O(1) besides result
Shape-safe multiplyO(m × n × p)O(1) besides result

For square n × n matrices the classic algorithm is O(n³). The result needs O(m × p) space.

Key Takeaways

  • Rule: cols(A) == rows(B); result is rows(A) × cols(B).
  • Cell: C[i,j] = Σ A[i,k] * B[k,j].
  • Loops: three levels — i, j, then k.
  • Test: [[1,2],[3,4]] × [[5,6],[7,8]] → [[19,22],[43,50]].

One line: each result cell is the dot product of a row of A and a column of B.

Frequently Asked Questions

A’s column count must equal B’s row count. If A is m × n and B is n × p, then AB is m × p.
No. Matrix multiplication uses row-column dot products. Cell-by-cell multiply is a different operation (Hadamard).
One loop picks result row i, one picks column j, and the inner loop accumulates sum over k of A[i, k] * B[k, j].
Not in general. Matrix multiplication is not commutative — AB and BA can differ, and one order may be undefined.
For an m × n matrix times an n × p matrix, classic triple loops cost O(m × n × p). For square n × n matrices that is O(n³).

Next: Matrix Subtraction

Subtract matching cells of two same-sized matrices.

Matrix subtraction tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

10 people found this page helpful