一个顺序调整的有关问题,求解!
一个顺序调整的问题,求解!!!
在C中碰到一个程序要求输入十个数,最大与最后一个数交换,最小的与第一个数交换。代码如下:
void max_min_value(int number[])
{
int *max,*min,*p,temp;
max=min=number;
for(p=number+1;p<number+10;p++)
{
if(*p>*max)
max=p; /*将大数地址赋给max*/
/*temp=number[9];
number[9]=*max;
*max=temp;*/
else if(*p<*min)
min=p; /*将小数地址赋给min*/
temp=number[0];
number[0]=*min;
*min=temp; /*将最小数与第一个数交换*/
if(max=number)
max=min;
temp=number[9];
number[9]=*max;
*max=temp;
}
但是这个代码没有实现最大数与最后一位数的交换,请问一下是怎么回事啊?
------解决方案--------------------
在C中碰到一个程序要求输入十个数,最大与最后一个数交换,最小的与第一个数交换。代码如下:
void max_min_value(int number[])
{
int *max,*min,*p,temp;
max=min=number;
for(p=number+1;p<number+10;p++)
{
if(*p>*max)
max=p; /*将大数地址赋给max*/
/*temp=number[9];
number[9]=*max;
*max=temp;*/
else if(*p<*min)
min=p; /*将小数地址赋给min*/
temp=number[0];
number[0]=*min;
*min=temp; /*将最小数与第一个数交换*/
if(max=number)
max=min;
temp=number[9];
number[9]=*max;
*max=temp;
}
但是这个代码没有实现最大数与最后一位数的交换,请问一下是怎么回事啊?
------解决方案--------------------
- C/C++ code
if(max==number) max=min;
------解决方案--------------------
- C/C++ code
void max_min_value(int number[]) { int *max, *min, *p, temp; max = min = number; for (p=number+1; p<number+10; p++) { if (*p > *max) max = p; /*将大数地址赋给max*/ /*temp=number[9]; number[9]=*max; *max=temp;*/ /*else */if(*p < *min) /* 这里去掉else */ min = p; /*将小数地址赋给min*/ /* 这3句全部去掉,等到最后确认了最大,最小数再交换 */ /*temp = number[0]; number[0] = *min; *min = temp;*/ /* 将最小数与第一个数交换 */ /* 去掉,同上道理 */ /*if (max == number) /* 这里少了个'=' */ max = min;*/ /*temp = number[9]; number[9] = *max; *max = temp;*/ } /* 好了: 已经找到最大,最小数了,是时候交换(如果有必要的话) */ if (min != number) { temp = *min; *min = number[0]; number[0] = temp; } if (max != number+10-1) { temp = *max; *max = number[9]; number[9] = temp; } }
------解决方案--------------------
max = min;*/ ==> 去掉
------解决方案--------------------
if和else没加括号,只根据条件执行紧接着的语句。后面的就与条件无关了,都要执行