c语言中,将一个5*5矩阵中最大的元素放在中心,最小的元素放在左上角的代码怎么写?
2个回答
展开全部
//n阶方阵最大值和最小值
#include "stdio.h"
#include "malloc.h"
#include "math.h"
//函数声明
void mat_in(int * p, int n);//输入方阵
int * max(int * p, int n);//最大值
int * min(int * p, int n);//最小值
void swap(int *p , int * q);//交换
void mat_out(int * p, int n);//输出
void main()
{
int n,k;
int *pmax,*pmin;
printf("输入方阵的阶数(本题要求为方阵阶数为5):\n");
scanf("%d",&n);
k=n*n;//开辟动态数组元素的个数
int * p = (int *)malloc(n*n*sizeof(int));//创建动态数组
printf("输入数组数据\n");
mat_in(p,k);//输入n*n数组的数据
printf("输出数组原始数据\n");
mat_out(p,k);
printf("查找数组元素最大值:");
pmax = max(p,k);
printf("%d\n",*pmax);
printf("查找数组元素最小值:");
pmin = min(p,k);
printf("%d\n",*pmin);
swap(p,pmin);
swap(&p[k/2], pmax);
printf("输出交换后的数据\n");
mat_out(p,k);
}
//输入数组元素
void mat_in(int *p, int n)
{
int i;
for(i = 0;i < n; i++ )
scanf("%d",&p[i]);
}
//计算最大值,为方便后续交换,返回最大值的地址
int * max(int * p, int n)
{
int *pmax,i,max;
max=p[0];
for(i=1;i<n;i++)
{
if(p[i] > max)
{
max=p[i];
pmax=&p[i];
}
}
return pmax;
}
//计算最小值
int * min(int * p, int n)
{
int *pmin,i,min;
min=p[0];
for(i=1;i<n;i++)
{
if(p[i]< min)
{
min = p[i];
pmin = &p[i];
}
}
return pmin;
}
//交换
void swap(int * s, int * t)
{
int temp;
temp = *s;
*s = *t;
*t = temp;
}
//输出
void mat_out(int * p, int n)
{
int i,k=0;
int m;
m=int(sqrt(n));
for(i = 0; i < n; i++)
{
k++;
printf("%3d",p[i]);
if(k % m==0)
printf("\n");
}
printf("\n");
}
该程序可以实现包括5*5方阵在内的任何方阵的处理,我是通过动态数组实现的。优点:可以跨函数使用数组,程序的通用性强。
#include "stdio.h"
#include "malloc.h"
#include "math.h"
//函数声明
void mat_in(int * p, int n);//输入方阵
int * max(int * p, int n);//最大值
int * min(int * p, int n);//最小值
void swap(int *p , int * q);//交换
void mat_out(int * p, int n);//输出
void main()
{
int n,k;
int *pmax,*pmin;
printf("输入方阵的阶数(本题要求为方阵阶数为5):\n");
scanf("%d",&n);
k=n*n;//开辟动态数组元素的个数
int * p = (int *)malloc(n*n*sizeof(int));//创建动态数组
printf("输入数组数据\n");
mat_in(p,k);//输入n*n数组的数据
printf("输出数组原始数据\n");
mat_out(p,k);
printf("查找数组元素最大值:");
pmax = max(p,k);
printf("%d\n",*pmax);
printf("查找数组元素最小值:");
pmin = min(p,k);
printf("%d\n",*pmin);
swap(p,pmin);
swap(&p[k/2], pmax);
printf("输出交换后的数据\n");
mat_out(p,k);
}
//输入数组元素
void mat_in(int *p, int n)
{
int i;
for(i = 0;i < n; i++ )
scanf("%d",&p[i]);
}
//计算最大值,为方便后续交换,返回最大值的地址
int * max(int * p, int n)
{
int *pmax,i,max;
max=p[0];
for(i=1;i<n;i++)
{
if(p[i] > max)
{
max=p[i];
pmax=&p[i];
}
}
return pmax;
}
//计算最小值
int * min(int * p, int n)
{
int *pmin,i,min;
min=p[0];
for(i=1;i<n;i++)
{
if(p[i]< min)
{
min = p[i];
pmin = &p[i];
}
}
return pmin;
}
//交换
void swap(int * s, int * t)
{
int temp;
temp = *s;
*s = *t;
*t = temp;
}
//输出
void mat_out(int * p, int n)
{
int i,k=0;
int m;
m=int(sqrt(n));
for(i = 0; i < n; i++)
{
k++;
printf("%3d",p[i]);
if(k % m==0)
printf("\n");
}
printf("\n");
}
该程序可以实现包括5*5方阵在内的任何方阵的处理,我是通过动态数组实现的。优点:可以跨函数使用数组,程序的通用性强。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询