这是题目
#include <stdio.h>
int main()
{
void data(int n,float *p);
float m[10000],*p=m;
int a,i;
scanf("%d",&a);
for(i=0;i<a;i++,p++)
scanf("%f",p);
p=m;
data(a,p);
return 0;
}
void data (int n,float *p)
{
float max,min,aveg,t,sum;
int i,j,k;
float *m=p;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(*(p+j)>*(p+k))k=j;
if(k!=i)
{
t=*p;*p=*(p+1);*(p+1)=t;
}
}
}
sum=0;
for(i=0;i<n;p++)
{
sum+=*p;
}
p=m;
aveg=sum/n;
printf("max=%.2f\nmin=%.2f\naveg=%.2f\n",*(p+n-1),*p,aveg);
}
这个循环多余,并且导致了错误,可以去掉
#include <stdio.h>
int main()
{
void data(int n,float *p);
float m[10000];
float *p=m;
int a,i;
scanf("%d",&a);
for(i=0;i<a;i++)
scanf("%f",&m[i]);
p=m;
data(a,m);
return 0;
}
void data (int n,float *p)
{
float max,min,aveg,t;
float *loac=p; //此处要保存一下,因为后面求aver会改变p
int i,j,k;
for(i=0;i<=n-2;i++)
{
k=i;
for(j=i+1;j<=n-1;j++)
{
if(*(p+j)>*(p+k))k=j;
if(k!=i)
{
t=*(p+k);*(p+k)=*(p+i);*(p+i)=t;
}
}
}
aveg=0;
for(i=0;i<n;p++)
{
aveg+=*p;
i++; //此处要加上i++
}
printf("max=%.2f\nmin=%.2f\naveg=%.2f\n",*loac,*(loac+n-1),aveg/3);
}