试编写实现矩阵C = A + B操作的函数,其中矩阵A,B,C的行/列维数均为n。编写一个测试主函数,要求:存储矩阵元素的二维数组采用动态二维数组
题目分析:
实现矩阵的加法,so easy!!!
往后读着,血压渐渐升高,动态二维数组,我滴吗呀
在我们平常使用的数组一般都是静态的,数组不能变化的,定义成什么样子就是什么样子,而动态数组就不一样了,动态数组是利用指针,比如你定义了一个动态数组,当数组内存不够的时候,我们可以申请一块新的比原来大的内存空间,将数组名字指向这个新空间,这样就实现了数组内存变大。因此动态数组就不用担心内存空间不足。
考点:
1.动态数组的运用
2.矩阵的加法
代码实现:
#include<stdio.h>
#include<stdlib.h>
/*输入矩阵的数据元素,返回二维数组*/
int **intput(int **arr,int n)
{
for (int i = 0; i < n; i++)
arr[i] = (int *)calloc(n, sizeof(int)); //为二维数组中的多个一维数组分配内存空间
printf("请输入%d个数作为矩阵的元素:\n", n*n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf_s("%d", &arr[i][j]);
return arr;
}
/*计算A+B,将B对应位置的数据加到A上,结果返回A*/
int **caculate(int **A, int **B,int n)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
A[i][j] += B[i][j];
return A;
}
/*输出矩阵*/
void output(int **arr,int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%3d ", arr[i][j]);
printf("\n");
}
}
int main()
{
int n;
printf("请输入矩阵的维数:");
scanf_s("%d", &n);
int **A = (int **)calloc(n, sizeof(int)); //A指向一个二维数组的空间,这个二维数组看成多个一维数组组成
int **B = (int **)calloc(n, sizeof(int));
int **C = (int **)calloc(n, sizeof(int));
printf("\n\n创建矩阵A:\n\n");
A = intput(A, n);
printf("\n\n创建矩阵B:\n\n");
B = intput(B, n);
printf("\n\nA+B的结果C为:\n");
C = caculate(A, B, n);
output(C, n); //输出结果矩阵
system("pause");
return 0;
}
运行结果:
测试一
测试二
代码编译器:Visual Studio 2017
ok,再见