...的数与第一个数对换,把最大的数与最后一个数对换。
发布网友
发布时间:2024-10-08 04:37
我来回答
共3个回答
热心网友
时间:2024-10-11 01:48
在void max_min_value(int array[10])这个函数体内:
for(p=array+1;p<=array_end;p++)
if(*p>*max)
max=p;
else if(*p<*min)
min=p;
楼主写的这段代码是通过for循环找出max和min,但是for循环以后p=array+10了,而数组最末尾的
地址是array+9,所以我觉得是这里出了问题,因为p指向的array+10的地址储存的是个未知的值,下面再进行交换的时候再用*p作为中间量进行值的交换时可能就会出问题。所以我建议楼主在上面这段代码下写个:printf("now,*p=%d\n",*p);看*p是否能够正确打印出来。再定义一个整型变量temp作为中间变量应该可以解决问题。
我现在编译了一下(才回家),发现楼主的程序是没有问题的,可以得到预想的结果,楼主输入10个数之后遇到了什么问题呢?附运行结果如下:
热心网友
时间:2024-10-11 01:52
void max_min_value(int array[10])
{
int *max,*min,*p,*array_end;
int tmp;
array_end=array+9;
max=min=array;
for(p=array+1;p<=array_end;p++)
if(*p>*max)
max=p;
else if(*p<*min)
min=p;
tmp=array[0]; //这里需要用临时变量保存第一个元素值,否则后面一句会把第一个元素覆盖,下面max的问题一样
array[0]=*min;
*min=tmp;
tmp=array[9];
array[9]=*max;
*max=tmp;
}
热心网友
时间:2024-10-11 01:50
//觉得你的太长了,我自己写的,你看看,在VC下能运行
#include<stdio.h>
int main()
{
int i,j,k,min=32767,max=-32768,t,a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
if(a[i]>max){max=a[i];j=i;}
if(a[i]<min){min=a[i];k=i;}
}
t=a[0];a[0]=a[k];a[k]=t;
t=a[9];a[9]=a[j];a[j]=t;
for(i=0;i<10;i++)printf("%d ",a[i]);
printf("\n");
}