我想用c中的指针乘以2矩阵。棘手的是我必须在linux终端中使用 gcc -Werror -o run filename file.c
,所以我的代码中甚至没有警告。
我有myArray矩阵 nxn (其中n是偶数 - 4,6,8 ......),我必须将它分成4个部分,之后,我必须将这部分相乘像:
1x2 = a,ax3 = b且bx4 = c(其中1,2,3,4是我的初始矩阵的4个部分)。
问题很简单但我无法处理。 代码是:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//---------------------------------------------initialize and adding elements!!!
void init_matrix(int **myArray, int n)
{
int i,j;
printf("Insert data:\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
scanf("%d", &*(*(myArray+i)+j));
}
printf("The introduced Array:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%d ", *(*(myArray+i)+j));
printf("\n");
}
printf("\n");
{
}
}
//---------------------------------------------devisation in 4 parts!!!
void first_matrix(int **myArray,int n)
{ int i,j,m;
printf("\nThe first matrix is: \n");
for (i = 0; i < n/2; i++)
{
for (j = 0; j < m/2; j++)
printf("%d ", *(*(myArray+i)+j));
printf("\n");
}
printf("\n");
{
}
}
void second_matrix(int **myArray, int n)
{ int i,j,m;
printf("\nThe second matrix is: \n");
for (i = 0; i < n/2; i++)
{
for (j = m/2; j < m; j++)
printf("%d ", *(*(myArray+i)+j));
printf("\n");
}
printf("\n");
{
}
}
void third_matrix(int **myArray, int n)
{ int i,j,m;
printf("\nThe third matrix is: \n");
for (i = n/2; i < n; i++)
{
for (j = 0; j < m/2; j++)
printf("%d ", *(*(myArray+i)+j));
printf("\n");
}
printf("\n");
{
}
}
void fourth_matrix(int **myArray, int n)
{ int i,j,m;
printf("\nThe fourth matrix is: \n");
for (i = n/2; i < n; i++)
{
for (j = m/2; j < m; j++)
printf("%d ", *(*(myArray+i)+j));
printf("\n");
}
printf("\n");
{
}
}
int main(void)//----------------------------------------------------main function!!!
{
int **myArray,i, n;
printf("Enter the dimmension of Array: ");
scanf("%d", &n);
//alloc memory
myArray = (int **) malloc( n * sizeof(int*));
for(i = 0; i< n; i++)
myArray[i] = (int *) malloc(sizeof(int));
init_matrix(myArray,n);
first_matrix(myArray,n);
second_matrix(myArray,n);
third_matrix(myArray,n);
fourth_matrix(myArray,n);
//some methods for mutiply
//free memory
for(i = 0; i< n; i++)
free(myArray[i]);
free(myArray);
printf("\n");
return 0;
}
答案 0 :(得分:1)
棘手的是我必须使用gcc -Werror -o run filename file.c 在linux终端中,所以我的代码中甚至没有警告
对于初学者来说,代码的所有应该在没有警告的情况下进行编译。警告是编译器说的方式“您的代码可能无法以可预测的方式运行,或者您认为它的方式,直到您解决此问题。”编译器很少出错。
接下来,使用指针的一般矩阵乘法,只需要遵循矩阵乘法的规则。这意味着您可以将m x n
矩阵(matrix_a
)与n x p
矩阵(matrix_b
)相乘,其结果的维度为m x p
({{1 }})。有关详细信息,请参阅Matrix Multiplication。
您需要分配空间来容纳product matrix
。最简单的方法是声明一个乘法函数,该函数返回指向产品矩阵所需类型的指针。您需要将product matrix
,matrix_a
与matrix_b
一起传递,以便分配,计算并返回dimensions for each
。以下是此实现的一种方法。
注意:,因为您要为product
分配空间,您也负责释放它。另外注意,建议将product matrix
初始化为product matrix
。为行分配选择0
可以为您自动执行此操作,而无需显式归零。 (显示下面的错误检查,但未实现)
calloc