修改如下,VC调试无误
#include
#define N 80
int main()
{
int a[N],b[N],c[N];//再加一个数组,因为是你是找大小平均值的最小closest
int i=0;
int max;
int min;
int s=0;
float ave;
int j=0;
int k;//多加一个变量
for(i=0;a[i]!=0;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)
break;
s=s+a[i];
max=a[0];min=a[0];
if(a[i]>=max)
max=a[i];
if(a[i]<=min)
min=a[i];
}
k=i;//记录数组中非0元素总数,为排序做准备。
for(i=0;a[i]!=0;i++)
{
if(a[i]==max)
printf("Maximum: a[%d]=%d\n",i,max);
}
for(i=0;a[i]!=0;i++)
{
if(a[i]==min)
printf("Minimum: a[%d]=%d\n",i,min);
}
ave=(float)s/i;
printf("Average: %.1f\n",ave);
for(i=0;a[i]!=0;i++)
{
b[i]=a[i]-ave;
if(b[i]<0)
j++;
}
printf("Less than: %d(%.1f%%)\n",j,100.0*j/i);
//close to的主要思想是求与平均值的差的绝对值最小的,肯定是最接近的
for(i=0;a[i]!=0;i++)
{
b[i]=fabs(a[i]-ave);//绝对值组成新的数组
c[i]=a[i]-ave;//主要作用来用判断,差的正负。
}
min=b[0];
for(i=0;a[i]!=0;i++)
{
if((b[i]<=min)&&(c[i]>0))//多加一个判断条件
{
min=b[i];
j=i;//记录最小绝对值的序号
}
}
printf("Closest to: a[%d]=%d\n",j,a[j]);//输出
//下面是排序,用的冒泡法。
for(i=0;i
{
s=a[j];
a[j]=a[j+1];
a[j+1]=s;
}
printf("Sort:");
for(i=0;a[i]!=0;i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}
#include
#include
float ave;
void maxmin(int a[],int n)
{
int max=a[0],min=a[0],i,m=0,k=0;
for(i=0;i
if(a[i]>max) {max=a[i];m=i;}
if(a[i]
printf("Maximum: a[%d]=%d\n",m,max);
printf("Minimum: a[%d]=%d\n",k,min);
}
void Average(int a[],int n)
{
float sum=0;
int i;
for(i=0;i
ave=sum/n;
printf("Average=%.1f\n",ave);
}
void Closest(int a[],int n)
{
int k[100],i,g=0,f;
for(i=0;i
if(a[i]>ave)
{
k[g++]=a[i];
}
}
f=k[0];
for(i=0;i
printf("Closest to:%d\n",f);
}
void Less(int a[],int n)
{
int i,g=0;
float p;
for(i=0;i
p=100*(float)g/(float)n;
printf("Less than:%d(%.1f%%)\n",g,p);
}
void Sort(int a[],int n)
{
int i,j,s;
for(i=0;i
{
s=a[j];
a[j]=a[j+1];
a[j+1]=s;
}
printf("Sort:");
for(i=0;i
printf("\b\n");
}
void main()
{
int a[100],i=0,n;
while(1)
{
scanf("%d",&a[i]);
if(!a[i]) break;
else i++;
}
n=i;
maxmin(a,n);
Average(a,n);
Closest(a,n);
Less(a,n);
Sort(a,n);
}
不知道你要用那种排序,前几天刚学完简单的排序,代码都在电脑中,你要那种我贴上来。
要在你的基础上改么?还是重写也行?你的前面有些地方不妥。。