#include
#define N 3
void main()
{
int i,j, sum = 0; int a[N][N], b[N][N];
int max , min,row_max = 0, col_max = 0, row_min = 0,col_min = 0;
printf("请输入矩阵的元素:");
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ ) scanf("%d",&a[i][j]);
printf("原始矩阵为:n");
for( i = 0; i < N; i++ )
{
for( j = 0; j < N; j++ )
printf("%5d",a[i][j]);
printf("n");
}
for( i =0; i < N; i++ )
sum += a[i][i];
printf(" 主对角线元素之和为: %dn",sum);
max = a[0][0], min = a[0][0];
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
if( a[i][j] < min ) {min = a[i][j]; row_min = i; col_min = j; }
if( a[i][j] > max ){ max= a[i][j]; row_max = i; col_max = j;}
}
printf(" 最大元素为:%d,其所在行数为:%d,所在列数为:%dn",max,row_max+1,col_max+1);
printf(" 最小元素为:%d,其所在行数为:%d,所在列数为:%dn",min,row_min+1,col_min+1);
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
b[i][j] = a[j][i];
printf("矩阵a的转置矩阵为:n");
for( i = 0; i < N; i++ )
{
for( j = 0; j < N; j++ )
printf("%5d",b[i][j]);
printf("n");
}
}
语句本身没多大问题,关键是算法是否正确,比如下述代码
for(i = 0;i < M;i++) {
for(j = 0;j < N;j++) {
for(a1 = 0,b1 = 0;b1 < N;b1++,a1++){
flag = a[i][a1] & b[b1][j];
sign = flag||sign;
}
c[i][j] = sign;
sign = flag = 0; // 需要否?
}
}a1和b1具有相同初值,且是同步变化的,作为数组下标,完全可以用a1来替换b1,也就是说,b1是多于余的。我对两个矩阵的“combine relation” 关系不太理解,所以建议你以文字方式给出算法。
代码一:
#include
int MAX,MIN;
int maxi,maxj,mini,minj;
void main()
{
void result(int x[][5],int m,int n);
int a[5][5],max,min,i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
MAX=MIN=a[0][0];
maxi=maxj=mini=minj=0;
result(a,5,5);
printf("MAX=%d,maxi=%d,maxj=%dn",MAX,maxi,maxj);
printf("MIN=%d,mini=%d,minj=%dn",MIN,mini,minj);
}
void result(int x[][5],int m,int n)
{
int i,j;
for(i=0;i for(j=0;j { if(x[i][j]>MAX) { MAX=x[i][j]; maxi=i; maxj=j; } if(x[i][j] { MIN=x[i][j]; mini=i; minj=j; } } } 但代码一有个缺点,那就是如果有多个最值,只能输出最后一个。下面的代码是经过改进的。 代码二: #include int MAX,MIN; int maxi,maxj,mini,minj; void main() { void result(int x[][5],int m,int n); int a[5][5],max,min,i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); MAX=MIN=a[0][0]; maxi=maxj=mini=minj=0; result(a,5,5); } void result(int x[][5],int m,int n) { int i,j; for(i=0;i for(j=0;j { if(x[i][j]>MAX) MAX=x[i][j]; if(x[i][j] MIN=x[i][j]; } for(i=0;i for(j=0;j { if(x[i][j]==MAX) { MAX=x[i][j]; maxi=i; maxj=j; printf("MAX=%d,maxi=%d,maxj=%dn",MAX,maxi,maxj); } if(x[i][j]==MIN) { MIN=x[i][j]; mini=i; minj=j; printf("MIN=%d,mini=%d,minj=%dn",MIN,mini,minj); } } }