C++程序: 将两个给定的矩阵(3*3)相乘得到另一个距阵并将其打印出来。 要求: (1)从键盘输入两个矩阵,并输出结果矩阵。矩阵的输入输出要求行列对齐。 (2)把矩阵相乘写成函数形式,在主函数中完成矩阵的输入输出。 (3)对下标越界作出异常处理。
时间: 2023-05-24 14:03:54 浏览: 44
A:
1. 代码如下:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 3
void matrix_multiply(int [][COLS], int [][COLS], int [][COLS]);
int main()
{
int matrix1[ROWS][COLS], matrix2[ROWS][COLS], result[ROWS][COLS];
int i, j;
printf("Enter the first matrix:\n");
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
scanf("%d", &matrix1[i][j]);
}
}
printf("Enter the second matrix:\n");
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
scanf("%d", &matrix2[i][j]);
}
}
matrix_multiply(matrix1, matrix2, result);
printf("The result matrix is:\n");
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
printf("%d\t", result[i][j]);
}
printf("\n");
}
return 0;
}
void matrix_multiply(int m1[][COLS], int m2[][COLS], int result[][COLS])
{
int i, j, k;
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
result[i][j] = 0;
for(k=0; k<ROWS; k++)
{
result[i][j] += m1[i][k] * m2[k][j];
}
}
}
}
```
2. 实现了要求。
3. 对下标越界作出异常处理的方法,可以在读取矩阵输入时,使用if语句判断输入的行和列是否超过了范围,如果超过则提示输入错误,要求重新输入。具体实现方法如下:
```c
int i, j;
int ok = 1; //为了判断是否合法(1合法,0不合法)
printf("Enter the first matrix:\n");
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
ok = 1;
do
{
printf("Enter element %d,%d: ", i+1, j+1);
if(scanf("%d", &matrix1[i][j]) != 1) //如果输入的不是一个整数
{
printf("Invalid input. Please enter an integer.\n");
while(getchar() != '\n'); //清空输入缓冲区
ok = 0; //不合法
}
else if (matrix1[i][j] < -100 || matrix1[i][j] > 100) //如果输入的超过了范围
{
printf("Invalid input. Please enter a number between -100 and 100.\n");
ok = 0; //不合法
}
else //输入合法
{
ok = 1;
}
} while(!ok);
}
}
```
对于第二个矩阵和输出结果矩阵的输入,可以按照类似的方法进行实现。