【发布时间】:2014-08-23 09:55:37
【问题描述】:
我需要 C 编程方面的帮助。 我需要找到矩阵 D=(A+B)*C,然后在这个矩阵中找到最大的元素并创建一个新的,没有放置这个元素的行和列。 所以,我找到了这个矩阵,但我不知道如何找到最大元素以及如何切割矩阵。我希望有人可以帮助我。
文件.txt
4
1 0 -10 1
0 1 0 1
1 0 1 1
3 4 6 7
1 1 0 8
0 1 -10 3
0 1 1 1
1 5 8 5
11 -19 0 8
-10 1 10 3
0 10 12 1
1 2 -32 4
还有代码本身。
#include<stdio.h>
#include <math.h>
int main()
{
int n,i,j,k=0;
int t=0;
int m[300],a[10][10],b[10][10],c[10][10];
int d1[10][10],d[10][10];
FILE *f;
f=fopen("file.txt","r");
if(f!=NULL)
{
fscanf(f,"%d",&n);
for(i=0; i<(n-1)*n*n;i++)
fscanf(f,"%d",&m[i]);
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
a[i][j]=m[k]; //Matrix A
k++;
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
b[i][j]=m[k]; //Matrix b
k++;
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
c[i][j]=m[k]; //Matrix C
k++;
}
printf("A+B=\n\n");
for(i=0; i<n;i++)
{
for(j=0; j<n;j++)
{
d1[i][j]=a[i][j]+b[i][j]; //Matrix (A+B)
printf("%d ",d1[i][j]);
}
printf("\n");
}
printf("\nD=(A+B)*C\n\n");
for(i=0; i<n;i++)
{
for(j=0; j<n;j++)
{
d[i][j]=0;
for(t=0; t<n;t++)
d[i][j]=d[i][j]+d1[i][t]*c[t][j]; //Matrix D
printf("%d ",d[i][j]);
}
printf("\n");
}
fclose(f);
}
输出:
A+B=
2 1 -10 9
0 2 -10 4
1 1 2 2
4 9 14 12
D=(A+B)*C
21 -119 -398 45
-16 -90 -228 12
3 6 -30 21
-34 97 -126 121
【问题讨论】:
-
不,你可以,我的意思是如果最大元素在第 3 行和第 2 列,那么新矩阵应该没有这行和列。
-
通过切割矩阵,将这个矩阵复制到一个新的矩阵会更容易,跳过不需要的行和列的元素。
-
如果有多个元素的最大值怎么办?
-
BLUEPIXY,哎呀,你是对的,我没有真正注意到这一点。改变输入,增加输出。