c语言 将一个5*5矩阵中最大的元素放在中心,最小的元素放在左上角

兄弟有没有人讲详细点的,我想讲解下,c语言 将一个5*5矩阵中最大的元素放在中心,最小的元素放在左上角
最新回答
短笛

2024-05-19 00:52:50

代码如下 供参考

#include <stdio.h>

int main()
{
int a[5][5];
int i,j;
int maxi,maxj, mini,minj;

for(i = 0; i < 5; i ++)
for(j = 0; j < 5; j ++)
scanf("%d",&a[i][j]);

maxi = maxj = mini = minj = 0;
for(i = 0; i < 5; i ++)
for(j = 0; j < 5; j ++)
{
if(a[i][j] < a[mini][minj]) 
{
mini = i;
minj = j;
}
if(a[i][j] > a[maxi][maxj])
{
maxi = i;
maxj = j;
}
}
i = a[maxi][maxj];
a[maxi][maxj] = a[2][2];
a[2][2] = i;

i = a[mini][minj];
a[mini][minj] = a[0][0];
a[0][0] = i;

for(i = 0; i < 5; i ++)
{
for(j = 0; j < 5; j ++)
printf("%d ",a[i][j]);

printf("\n");
}

return 0;
}
つ收回你的爱み

2024-05-19 03:44:32

//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方阵在内的任何方阵的处理,我是通过动态数组实现的。优点:可以跨函数使用数组,程序的通用性强。
紫珺婳浅

2024-05-19 02:50:44

//刚写的code,测试通过,如果有疑问,欢迎交流
//
#include<stdio.h>
#include<stdlib.h>
int main(){
int tar[5][5];
int i,j;
for(i = 0; i<5;i++){
for(j = 0; j<5; j++){
//scanf("%d", &tar[i][j]);
tar[i][j] = rand()%20; //随机生成的数字,测试用
}
}
//保存最大值,及最大的横纵坐标
int max_value = tar[0][0], max_idx_i = 0, max_idx_j = 0;
//保存最小值,及最小值的横纵坐标
int min_value = tar[0][0], min_idx_i = 0, min_idx_j = 0;
for(i =0; i<5; i++){
for(j = 0; j < 5; j++ ){
if(tar[i][j] > max_value){
max_value = tar[i][j];
max_idx_i = i;
max_idx_j = j;
}
if(tar[i][j] < min_value){
min_value = tar[i][j];
min_idx_i = i;
min_idx_j = j;
}
}
}
//交换
tar[max_idx_i][max_idx_j] = tar[2][2];
tar[2][2] = max_value;
tar[min_idx_i][min_idx_j] = tar[0][0];
tar[0][0] = min_value;
for(i = 0; i<5; i++){
for(j = 0; j<5; j++){
printf("%3d", tar[i][j]);
}
printf("\n");
}
return 0;
}