跳到主要内容

C 编程:通过函数传递矩阵来乘两个矩阵

要理解这个示例,你应该对以下 C语言编程 主题有所了解:

这个程序会要求用户输入矩阵的大小(行和列)。

然后,它会要求用户输入这些矩阵的元素,并最终显示结果。

为了完成这个任务,制作了三个函数:

  1. 从用户处获取矩阵元素的 enterData()
  2. 用于矩阵相乘的 multiplyMatrices()
  3. 显示乘法后的结果矩阵的 display()

示例:通过函数传递矩阵进行矩阵乘法

#include <stdio.h>

void enterData(int firstMatrix[][10], int secondMatrix[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond);
void multiplyMatrices(int firstMatrix[][10], int secondMatrix[][10], int multResult[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond);
void display(int mult[][10], int rowFirst, int columnSecond);

int main()
{
int firstMatrix[10][10], secondMatrix[10][10], mult[10][10], rowFirst, columnFirst, rowSecond, columnSecond, i, j, k;

printf("输入第一个矩阵的行数和列数: ");
scanf("%d %d", &rowFirst, &columnFirst);

printf("输入第二个矩阵的行数和列数: ");
scanf("%d %d", &rowSecond, &columnSecond);

// 如果第一个矩阵的列数不等于第二个矩阵的行数,让用户重新输入矩阵大小。
while (columnFirst != rowSecond)
{
printf("错误!第一个矩阵的列数不等于第二个矩阵的行数。\n");
printf("重新输入第一个矩阵的行数和列数: ");
scanf("%d%d", &rowFirst, &columnFirst);
printf("重新输入第二个矩阵的行数和列数: ");
scanf("%d%d", &rowSecond, &columnSecond);
}

// 函数获取矩阵数据
enterData(firstMatrix, secondMatrix, rowFirst, columnFirst, rowSecond, columnSecond);

// 函数用于矩阵相乘。
multiplyMatrices(firstMatrix, secondMatrix, mult, rowFirst, columnFirst, rowSecond, columnSecond);

// 函数用于显示乘法后的结果矩阵。
display(mult, rowFirst, columnSecond);

return 0;
}

void enterData(int firstMatrix[][10], int secondMatrix[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond)
{
int i, j;
printf("\n输入第一个矩阵的元素:\n");
for(i = 0; i < rowFirst; ++i)
{
for(j = 0; j < columnFirst; ++j)
{
printf("输入元素 a%d%d: ", i + 1, j + 1);
scanf("%d", &firstMatrix[i][j]);
}
}

printf("\n输入第二个矩阵的元素:\n");
for(i = 0; i < rowSecond; ++i)
{
for(j = 0; j < columnSecond; ++j)
{
printf("输入元素 b%d%d: ", i + 1, j + 1);
scanf("%d", &secondMatrix[i][j]);
}
}
}

void multiplyMatrices(int firstMatrix[][10], int secondMatrix[][10], int mult[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond)
{
int i, j, k;

// 初始化结果矩阵 mult 的元素为 0。
for(i = 0; i < rowFirst; ++i)
{
for(j = 0

; j < columnSecond; ++j)
{
mult[i][j] = 0;
}
}

// 乘法运算:第一个矩阵 firstMatrix 和第二个矩阵 secondMatrix 相乘,并将结果存储在数组 mult 中。
for(i = 0; i < rowFirst; ++i)
{
for(j = 0; j < columnSecond; ++j)
{
for(k=0; k<columnFirst; ++k)
{
mult[i][j] += firstMatrix[i][k] * secondMatrix[k][j];
}
}
}
}

void display(int mult[][10], int rowFirst, int columnSecond)
{
int i, j;
printf("\n输出矩阵:\n");
for(i = 0; i < rowFirst; ++i)
{
for(j = 0; j < columnSecond; ++j)
{
printf("%d ", mult[i][j]);
if(j == columnSecond - 1)
printf("\n\n");
}
}
}

```**输出**

```c
输入第一个矩阵的行数和列数:3
2
输入第二个矩阵的行数和列数:3
2
错误!第一个矩阵的列数不等于第二个矩阵的行数。

输入第一个矩阵的行数和列数:2
3
输入第二个矩阵的行数和列数:3
2

输入第一个矩阵的元素:
输入元素 a11:3
输入元素 a12:-2
输入元素 a13:5
输入元素 a21:3
输入元素 a22:0
输入元素 a23:4

输入第二个矩阵的元素:
输入元素 b11:2
输入元素 b12:3
输入元素 b21:-9
输入元素 b22:0
输入元素 b31:0
输入元素 b32:4

输出矩阵:
24 29

6 25