忘记放进函数里面了。。。
只用了指针,可以发现我这种方法用指针可以少定义一个变量,而且交换时更省时间,希望大家可以多多用指针,用熟练了对以后很有帮助(主观观点)
可以尝试封进函数,这样main函数可以看起来更简洁。
这也是一个好习惯。
题目描述
将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下一次从小到大存放),写个一函数来实现,用main函数调用。(要求用指针来做)
输入
每组数据为5X5的矩阵,矩阵的数字为整数。有多组测试数据,直到输入文件结束。
输出
输出按题目要求改变后的矩阵,每组结果后空一行。
样例输入
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
样例输出
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14
#include<stdio.h> //2246
#include<stdlib.h>
int main(){
int compare(int a, int b);
void change(int *a, int *b);
int num[25],*max,*min,i,j,n,temp,decrease,*tmp;
while(scanf("%d", &num[0])!=EOF){
max=&num[0];min=&num[0];
for(i=1; i<25; i++) {
scanf("%d",&num[i]);
if (compare(*max,num[i])<0) max=&num[i];
if (compare(*min,num[i])>0) min=&num[i];
}
if(min==&num[12]) min=max;
if(max!=&num[12]) change(max,&num[12]);
change(min,&num[0]);
min=&num[0];
for ( i = 1; i < 4; i++){
decrease=num[12]-num[0];
for ( j = 0; j < 25; j++)
if (compare(num[j],*min)>0 && decrease>compare(num[j],*min)){
decrease=compare(num[j],*min);
tmp=&num[j];
}
if(i==1){
change(tmp,&num[4]);
min=&num[4];
}else if (i==2){
change(tmp,&num[20]);
min=&num[20];
}else if (i==3){
change(tmp,&num[24]);
min=&num[24];
}
}
for ( i = 0; i < 25; i++){
printf("%d ",num[i]);
if ((i+1)%5==0) printf("\n");
}
printf("\n");
}
return 0;
}
int compare(int a, int b) {
return a-b;
}
void change(int *a, int *b) {
int tmp;
tmp=*a;*a=*b;*b=tmp;
}