解题思路: 按题要求,分别三个函数实现三个功能;通过记录最大值,最小值下标,进行值的交换
注意事项:
一般情况:先交换最小值,在交换最大值;
特殊情况一:最大值和最小值分别在对方的位置上(a[0],a[9]),只需交换一次;
特殊情况二:最大值在首位,此种情况要求先交换最大值,再交换最小值,因为当先交换最小值后,最大值下标发生改变,但我们原本记录的最大值下标未改变,后来进行交换的最大值非真正的最大值;
参考代码:
#include
void putIn(int a[10])
{
int i;
for(i = 0; i < 10; i++)
scanf("%d",&a[i]);
}
void deal(int a[10])
{
int min,max,i,j,t,p;
min = a[0];
max = a[9];
j = 0;
p = 9;
for(i = 0; i < 10; i++)
{
if(a[i] < min)
{
j = i;
min = a[i];
}
if(a[i] > max)
{
p = i;
max = a[i];
}
}
if(p== 0) //最大值在第一个,且最小值在最后
{
t = a[0];
a[0] = a[9];
a[9] = t;
}
else if(p == 0 && j == 9) //最大值在第一个
{
t = a[9];
a[9] = a[p];
a[p] = t;
t = a[0];
a[0] = a[j];
a[j] = t;
}
else //一般情况
{
t = a[0];
a[0] = a[j];
a[j] = t;
t = a[9];
a[9] = a[p];
a[p] = t;
}
}
void putOut(int a[10])
{
int i;
for(i = 0; i < 10; i++)
printf("%d ",a[i]);
}
void main()
{
int a[10];
putIn(a);
deal(a);
putOut(a);
}
0.0分
3 人评分