c语言问题,求高手解答~

/*问题描述】编程,输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止,要求对这批数(不包括最后输入的表示输入结束的0)作相应的处理并按示例格式依次输出下列结... /*问题描述】
编程,输入一批互不相等的正整数存入一维整型数组a中,直到输入0时终止,
要求对这批数(不包括最后输入的表示输入结束的0)作相应的处理并按示例格式依次输出下列结果:
⑴ 最大值和最小值及其所在位置下标;
⑵ 平均值(保留1位小数);
⑶ 大于并最接近平均值的数及其所在位置下标;
⑷ 小于平均值的数的个数及其占总数的百分比(保留1位小数);
⑸ 这批数按从小到大的顺序排列。
【样例输入】
50 60 70 80 90 95 85 75 65 55 0
【样例输出】
Maximum: a[5]=95
Minimum: a[0]=50
Average: 72.5
Closest to: a[7]=75
Less than: 5(50.0%)
Sort: 50 55 60 65 70 75 80 85 90 95
(注意:冒号后有1个空格!)

我排序和Closest to不会写,求帮忙加工~

#include <stdio.h>
#define N 80
int main()
{
int a[N],b[N];
int i=0;
int max;
int min;
int s=0;
float ave;
int j=0;
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];
}
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);

return 0;
}
展开
 我来答
百度网友6fe74e2
2012-05-08 · TA获得超过6592个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:246万
展开全部
修改如下,VC调试无误
#include <stdio.h>
#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<k-1;i++)
for(j=0;j<k-1-i;j++)
if(a[j]>a[j+1])
{
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;
}
追问
有问题.  
vc.c:14:10: Value a[] used before definition
An rvalue is used that may not be initialized to a value on some execution
path.
vc.c:16:3: Return value (type int) ignored: scanf("%d", &a[i])
Result returned by function call is not used. If this is intended, can cast
result to (void) to eliminate message.
vc.c:55:17: Array element b[0] used before definition
追答
哦,你只需要在初始化a[i]时,把a[i]!=0去掉就行了,
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];
}
这句,把条件改成for(i=0;;i++)但在我这,就没这种问题,我用的VC6.0奇怪
1239388231
2012-05-08 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:103万
展开全部
#include <stdio.h>
#include<math.h>
float ave;
void maxmin(int a[],int n)
{
int max=a[0],min=a[0],i,m=0,k=0;
for(i=0;i<n;i++)
{
if(a[i]>max) {max=a[i];m=i;}
if(a[i]<min) {min=a[i];k=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<n;i++)
sum=sum+(float)a[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<n;i++)
{
if(a[i]>ave)
{
k[g++]=a[i];
}
}
f=k[0];
for(i=0;i<g;i++)
if(f>k[i]) f=k[i];
printf("Closest to:%d\n",f);
}
void Less(int a[],int n)
{
int i,g=0;
float p;
for(i=0;i<n;i++)
if(a[i]<ave)
g++;
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<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{
s=a[j];
a[j]=a[j+1];
a[j+1]=s;
}
printf("Sort:");
for(i=0;i<n;i++)
printf("%d ",a[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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niluanxy
2012-05-08 · 超过26用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:73万
展开全部
不知道你要用那种排序,前几天刚学完简单的排序,代码都在电脑中,你要那种我贴上来。
追问
随便,主要是加了排序老是输不出排序结果,不知道加在哪里,还有那个Closest to也是!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜游神小翠
2012-05-08 · TA获得超过1795个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:172万
展开全部
要在你的基础上改么?还是重写也行?你的前面有些地方不妥。。
追问
重写也行!
追答
#include 
#define N 80
int main()
{
int a[N],b[N];
int i = 0, j = 0, k = 0;
int max, min;
int sum = 0, count = 0;
float ave;
int index = 0, temp;
do
{
scanf("%d",&a[i++]);
sum += a[i - 1];
}while(a[i - 1] != 0 && i max)
{
max = a[i];
index = i;
}
}
printf("Maximum: a[%d]=%d\n",index,max);
min = a[0];
index = 0;
for(i = 0; a[i] !=0 ;i++)
{
if(a[i] j; k--)
{
if(b[k] ave)
break;
for(i = 0; a[i] != 0; i++)
if(a[i] == b[j])
break;
printf("Closest to: a[%d]=%d\n",i ,a[i]);
for(i = 0;a[i] != 0;i++)
{
if(a[i] < ave)
count++;
}
printf("Less than: %d(%.1f%%)\n",count,100.0*count/i);
printf("Sort: ");
for(j = 0; j < i; j++)
printf("%d ",b[j]);
printf("\n");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式