C语言,的,一句编程语言的作用,求助
本帖最后由 爱捣鼓的小胖 于 2021-5-30 18:35 编辑#include<stdio.h>
void sort(int *p,int n)
{int min,max; min=max=*p; int i,b,c;
for(i=0;i<n;i++)
{if(*(p+i)>max) {max=*(p+i);b=i;}
else if(*(p+i)<min) {min=*(p+i);c=i;}
}
int temp1,temp2;
//temp1=0;
//temp2=0;
//p=a;
{temp1=min;*(p+c)=*p;*p=temp1; }
{temp2=max;*(p+b)=*(p+9);*(p+9)=temp2; }
}
void print(int *p,int n)
{ int i;
for(i=0;i<n;i++)
printf("%d ",*(p+i) );
printf("\n");
}
void main()
{int a={34,55,66,56,51,3,4,6,7,8};
sort(a,10);
print(a,10);
}
第3行的“min=max=*p”为什么不能去掉,或者把*p改为一个常数,1. 本帖最后由 QueenRell 于 2021-5-30 10:21 编辑
“*p”是指针 所指的是数组中的值 它的值是不断变换的 不能用常量表示
#include<stdio.h>
void sort(int *p,int n)
{int min,max; min=max=*p; int i,b,c; //min=max=*p 是把数组中第一个值副给组大值和最小值
for(i=0;i<n;i++)
{if(*(p+i)>max) {max=*(p+i);b=i;} //比较数组的下一个值有没有第一个大 后者大 则更新最大值
else if(*(p+i)<min) {min=*(p+i);c=i;} //否则 跟最小值比较 如果比min值小则赋值给min
}
int temp1,temp2;
//temp1=0;
//temp2=0;
//p=a; //temp1 最小值 temp2 最大值做到从大到小排列
{temp1=min;*(p+c)=*p;*p=temp1; }
{temp2=max;*(p+b)=*(p+9);*(p+9)=temp2; }
}
void print(int *p,int n)
{ int i;
for(i=0;i<n;i++)
printf("%d ",*(p+i) );
printf("\n");
}
void main()
{int a={34,55,66,56,51,3,4,6,7,8};
sort(a,10);
print(a,10);
}
结果因该是 3 4 6 7 8 34 51 55 56 66
学习了....正在自学c max = min = *p 是为了保证都是数组中的值之间进行的比较。如果你没赋值给max ,min的话,那他就是一个乱值,它可能就不是你数组中的值,假如那你要找数组中最大值,你却拿一个不是数组中的值和数组中的值进行比较,这肯定有问题。同理,你给max ,min赋值为1也是,假如你数组最小值是2,那你得到的最小值还是1。还有,你最好把b,c也初始化为0,不然b,c有可能也不是你想要的结果
页:
[1]