C语言为什么输出后132交换输出后32却没了,为什么
发布网友
发布时间:2022-05-18 19:52
我来回答
共5个回答
热心网友
时间:2023-10-28 12:04
按如下代码试试
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;
if( * p< * min) min=p; //不用else
}
if(max==number) max=min; //一、移动到这里,二、=是赋值,==才是比较,如果最大值是第一位,则经过下面的交换,最大值位置谈到最小值位置上去了。
temp=number[0];
number[0]= * min;
*min=temp;
temp=number[9];
number[9]= * max;
* max=temp;
}
void output(int *number)
{
int * p;
printf("Now,they are: ");
for(p=number;p<number+10;p++) //这里少了一个数
printf("%d ", * p);
printf("\n");
}
热心网友
时间:2023-10-28 12:04
if(max=number) max=min; //移除该语句就可以了,如果你要判断的话应该是“==”, "="是赋值,"=="才是比较.追问这样的话只实现了最小和第一的交换,最大的和最后的交换没有实现
追答if(max==number) max=min; //改语句是没有意义的,永远不会执行. 你已将最大值与最小值找不出来,而且已经将第一个数替换成最小数,那么max怎么可能等于最小的第一个数呢?所以此语句永远不会成立,而且你这里判断语句也写错了,少了一个等号,变为赋值了.
//帮你把错误的原因分析下:
//执行if( max = number ) max = min; 此时max = min,而min = temp, temp = numner[0] = 32, 即此时的max = 32.
//所以是将32与number[9]替换,所以32跑到最后一位去了.
//如不懂,再追问.
热心网友
时间:2023-10-28 12:05
output的时候循环里是应该写成for(p=number;p<number+10;p++)吧 = =
热心网友
时间:2023-10-28 12:05
同学,
for循环
if结构
这些能加上{} 增加可读性不?
加上你就知道错在哪里了
热心网友
时间:2023-10-28 12:06
最后:
void output(int number[])
{
int * p;
printf("Now,they are: ");
for(p=number;p<number+10;p++) //9变10
printf("%d ", * p);
printf("\n");
}追问改了之后就等于1和32交换,6和最后一个交换了,性质就不同了
我要的结果是1 24 56 78 32 6 36 44 29 98