#include
int main()
{
int i,j,k,M,N,a[10][10],b[10][10],c[10][10]; //定义两个输入矩阵,一个输出矩阵
printf("请输入第一个矩阵的行数M=");
scanf("%d",&M);
printf("请输入第一个矩阵的列数N=");
scanf("%d",&N);
printf("请输入一个%d*%d矩阵a=\n",M,N); //输入a矩阵
for (i=0;i
输入输出矩阵都需要用到两次循环,因为矩阵与行和列有关,运用到二维数组。
本题重点在于设计两矩阵相乘后数据的储存。
由于a的行数是b的列数,a的列数是b的行数,则两个矩阵相乘得到的矩阵c一定是一个方阵(行数与列数相等)。在a、b矩阵相乘时,a的第1行中每一个数与b的第1列中每一个数相乘相加,得到c中第1个数c[0][0];a的第1行中每一个数与b的第2列中每一个数相乘相加,得到c中第2个数c[0][1]......因此:c的列数是b的列数(M)即a的行数(M)。
观察c其中一个例子c[0][1]发现,a、b相乘得c[0][1]时,a的行不变,列递增;b的列不变,行递增。则可以在行、列循环里再加入递增的循环,递增次数取决于a的列数(或b的行数)。
由上述分析得到c的代码段
for (i=0;i
①C语言中“数组长度”,即[ ]下标运算符中必须是整型常量,不可以将M、N直接写入,所以在一开始定义了a、b、c三个二维数组的一、 二维数组长度均为10(也可以是其他整型常量,只要保证scanf在你设定的范围内),M与N的值也需要用户先输入。
②c[i][j]在每一使用时都要置零,用0初始化,否则会得到错误结果。