问题描述:输入一个N阶矩阵(3≤N≤10且N为奇数),矩阵中元素均为整数,取值在-1000至+1000之间。将该矩阵中元素的最大值放在矩阵中心,元素的最小值放在矩阵的四个边界上,其余位置换成原矩阵中所有元素的和。
首先分析题目,因为矩阵的特殊性,可以使用二维数组,利用二维数组的序号代表其在矩阵中的位置;
其次,最主要的任务是求矩阵中所有元素的最大值、最小值以及所有元素的和。
int n; //几阶
printf("请输入矩阵阶数 n=");
scanf("%d",&n) ;
int i,j;
int **array = (int **)malloc(n * sizeof(int *));
for (i = 0; i < n; i++)
{
array[i] = (int *)malloc(n * sizeof(int));
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum+=array[i][j];
if(max<array[i][j])
{
max=array[i][j];
}
if(min>array[i][j])
{
min=array[i][j];
}
}
}
先对代码进行初步测试:
测试成功后再按照题目要求进行调整。
源代码:
#include <stdio.h> #include <stdlib.h> int main(){ int n; //几阶 printf("请输入矩阵阶数 n="); scanf("%d",&n) ; int i,j; int **array = (int **)malloc(n * sizeof(int *)); for (i = 0; i < n; i++) { array[i] = (int *)malloc(n * sizeof(int)); } printf("请输入该%d阶矩阵:\n",n); for(i=0;i<n;i++) { printf("第%d行元素为:",i+1); for(j=0;j<n;j++) scanf("%d",&array[i][j]); } printf("该%d阶矩阵为:\n",n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%5d",array[i][j]); printf("\n"); } int max=array[0][0], min=array[0][0],sum=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { sum+=array[i][j]; if(max<array[i][j]) { max=array[i][j]; } if(min>array[i][j]) { min=array[i][j]; } } } printf("您输入的矩阵中的最大值、最小值和求和值为:%d,%d,%d\n",max,min,sum); for(i=0;i<n;i++) for(j=0;j<n;j++) array[i][j]=sum; int mid=n/2; array[mid][mid]=max; array[0][0]=min; array[n-1][0]=min; array[0][n-1]=min; array[n-1][n-1]=min; printf("经算法,该%d阶矩阵为:\n",n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%5d",array[i][j]); printf("\n"); } return 0; }
调整后代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int n; //几阶
scanf("%d",&n) ;
int i,j;
int **array = (int **)malloc(n * sizeof(int *));
for (i = 0; i < n; i++)
{
array[i] = (int *)malloc(n * sizeof(int));
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&array[i][j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",array[i][j]);
printf("\n");
}
int max=array[0][0], min=array[0][0],sum=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum+=array[i][j];
if(max<array[i][j])
{
max=array[i][j];
}
if(min>array[i][j])
{
min=array[i][j];
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
array[i][j]=sum;
}
}
int mid=n/2;
array[mid][mid]=max;
array[0][0]=min;
array[n-1][0]=min;
array[0][n-1]=min;
array[n-1][n-1]=min;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",array[i][j]);
printf("\n");
}
return 0;
}
利用原题测试,结果正确,测试如下: