69,336
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int n,m;
int main()
{
int i,j;
printf("请输入矩阵的行数n与列数m:");
scanf("%d%d",&n,&m);
int x[n][m];
printf("请输入整数矩阵");
for(i=0;i<=n-1;i++)
{for(j=0;j<=m-1;j++)
{scanf("%d",&x[i][j]);}
}
void y(int x[n][m]);
y(x);
return 0;
}
void y(int x[n][m])
{int i,j,k;
int z[n][n];
z[0][0]=0;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
for(k=0;k<=m-1;k++)
{z[i][j]=z[i][j]+x[i][k]*x[j][k];}
}
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{printf("%40d",z[i][j]);}
printf("\n");}
}
#include<stdio.h>
#include <string.h>
#define ROW 8
#define COL 4
void calculate_matrix(int (*arr)[COL]);
static void output_matrix(int *arr, int max, int col);
int main(int argc, const char *argv[])
{
int i, j, cnt = 1;
//printf("请输入矩阵的行数n与列数m:");
//scanf("%d%d",&n,&m);
int array[ROW][COL];
//printf("请输入整数矩阵");
for(i = 0; i <= ROW-1; i++) {
for(j = 0; j <= COL-1; j++) {
//scanf("%d",&array[i][j]);
array[i][j] = cnt++; /* initize the matrix. */
}
}
printf("Initize the matrix: \n");
output_matrix(&array[0][0], COL * ROW, COL);
calculate_matrix(array);
return 0;
}
/* Show the array data. */
static void output_matrix(int *arr, int max, int col)
{
int i;
for (i = 0; i < max; i++) {
printf("%-8d", arr[i]);
if ((i + 1) % col == 0)
putchar(10);
}
putchar(10);
}
void calculate_matrix(int (*array)[COL])
{
int i, j, k;
int result[ROW][ROW];
int matrix_trans[COL][ROW];
/* matrix transpose */
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
matrix_trans[j][i] = array[i][j];
}
}
printf("After matrix transpose: \n");
output_matrix(&matrix_trans[0][0], COL * ROW, ROW);
/* matrix multip */
int res = 0;
for (i = 0; i < ROW; i++) {
for (j = 0; j < ROW; j++) {
res = 0;
for (k = 0; k < COL; k++) {
res += array[i][k] * matrix_trans[k][j];
}
result[i][j] = res;
//printf("result = %d\n", res);
}
}
printf("Show the result: \n");
output_matrix(&result[0][0], ROW * ROW, ROW);
}
这是我改你的代码,改动比较大些,你可以试一下;一下是我的一些小建议:
1) 对于数组长度建议多用宏,C语言里是不支持变长数组的, 所以建议你使用宏(当然也可以动态申请空间,可以规避变长数组);
2) 建议你的代码写简单一些, 对于矩阵转置和乘法,可以先做转置,再做乘法,并且分在两个函数里实现(我在一个函数里做的, 你可以再分一下)这样让读你代码的人更清晰你的每个步骤,也便于理解和查找你的问题;
3) 对于变量和函数名,最好能做到见名知义,对阅读你的代码会提高效率,同时对自己将来阅读自己的代码也是有好处的;代码写出来还是要让别人和将来的自己看的,不是只为了实现功能;
4) 若有多个功能,比如你需要做初始化矩阵,矩阵转置,最后矩阵相乘,输出结果;你可以分步输出验证每步是否有问题,这样对你验证最后结果是否正确有指导意义;建议你做一个输出查看函数;
最后,加油吧,在前进的道路上总有一些做的不好的地方,不过不要灰心,一点一点努力吧~
int **z;
z = (int **)malloc(sizeof(int *)* n);
for (i = 0; i < n; i++)
z[i] = (int *)malloc(sizeof(int)* m);
int **z;
for (i = 0; i < n; i++)
z = (int **)malloc(sizeof(int *)* n);
for (i = 0; i < n; i++)
z[i] = (int *)malloc(sizeof(int)* n);