C语言/c++自定义函数,输入10个数,将其中的最大值和最后一个值交换顺序,将最小值和第一个数交换位置

这个题看起来很平淡无奇,甚至觉得有点简单,但是需要考虑的细节还是有几个地方,一不小心就会导致错误

我们在交换的时候可能没考率到几种特殊情况,比如说:

1.最大值在第一个位置,最小值在最后一个位置,交换两次就会把值换回来

2.最大值在第一个或者最小值在最后一个,我们在交换的时候会不会因为我们的交换而改变原来的顺序,导致我们把错误的数交换了

附上C语言和c++,指针和数组的不同解法,编写不易,可能会有未知bug,欢迎指出和建议。
#include<stdio.h>
void input(int *p)
{
for(int i=0;i<10;i++)
scanf("%d",&p[i]);
}
void change(int *p)
{
int k,max=0,min=0;
for(int i=0;i<10;i++){
if(p[i]>p[max])
max=i;
if(p[i]<p[min])
min=i;}
if(max0&&min9)
{k=p[max];
p[max]=p[min];
p[min]=k;}
else{
k=p[max];
p[max]=p[9];
p[9]=k;
k=p[min];
p[min]=p[0];
p[0]=k;}}
void output(int *p)
{
for(int i=0;i<10;i++)
printf("%d ",p[i]);
}
int main()
{
int a[30];
input(a);
change(a);
output(a);
}
C语言/c++自定义函数,输入10个数,将其中的最大值和最后一个值交换顺序,将最小值和第一个数交换位置然后附上c++源码

#include
using namespace std;
void j(intp);
void k(int
p);
void f(intp);
int main()
{
int a[10];
j(a);
k(a);
f(a);
return 0;
}
void j(int
p)
{
for(int i=0;i<10;i++)
cin>>(p+i);
}
void k(int
p)
{
int n,m,t;
n=m=0;
for(int i=1;i<10;i++) if((p+n)>(p+i)) n=i;
t=p;p=(p+n);(p+n)=t;
for(int i=1;i<10;i++) if((p+m)<(p+i)) m=i;
t=(p+9);(p+9)=(p+m);(p+m)=t;
}
void f(intp)
{
for(int i=0;i<10;i++)
cout<<
(p+i)<<’\t’;
}

C语言/c++自定义函数,输入10个数,将其中的最大值和最后一个值交换顺序,将最小值和第一个数交换位置