注册 登录
编程论坛 C++教室

数组统计

mai526625501 发布于 2011-04-09 14:06, 317 次点击
从键盘输入一个大于0的实数,存入一个数组中(输入小于等于0的数,数据输入过程结束),
统计并输出其中大于等于平均值的实数个数

下面是我写的,可是不知道错在哪里了

#include <stdio.h>
void main()
{
    float a[50],t,sum,avr,f,x,n;int i,k;
printf("输入实数");
s1:scanf("%d",&a[i];);if(&a[i]>0) {n++;
sum=0.0;
sum=sum+&a[i];goto s1;}
avr=sum/n;
f=0;
for(i=0;i<=n;i++)
if(a[i]<avr)
{f=1;break;}
if(f)
{for(k=i+1;k<n-1;k++)
a[k-1]=a[k];
n--;
}

printf("%4d",n;)
}

[ 本帖最后由 mai526625501 于 2011-4-9 14:36 编辑 ]
2 回复
#2
ljt2011-04-09 14:31
干嘛?
#3
紫凤双飞2011-04-09 19:37
以下是引用mai526625501在2011-4-9 14:06:52的发言:

从键盘输入一个大于0的实数,存入一个数组中(输入小于等于0的数,数据输入过程结束),
统计并输出其中大于等于平均值的实数个数

下面是我写的,可是不知道错在哪里了

#include <stdio.h>
void main()
{
    float a[50],t,sum,avr,f,x,n;int i,k;
printf("输入实数");
s1:scanf("%d",&a;);if(&a>0) {n++;
sum=0.0;
sum=sum+&a;goto s1;}
avr=sum/n;
f=0;
for(i=0;i<=n;i++)
if(a<avr)
{f=1;break;}
if(f)
{for(k=i+1;k<n-1;k++)
a[k-1]=a[k];
n--;
}

printf("%4d",n;)
}

这儿不需要取地址 float类型要用%f读入 而且最好不要用 goto 来实现循环
程序代码:
#include<stdio.h>
void main()
{
    float a[50],s;
    int num=0,i=0,j;
    printf("请输入一个实数,要停止请输入一个小于等于0的数\n");
    do
    {
        scanf("%f",&a[i]);
        ++i;
    }while(a[i-1]>0);
    for(j=0;j<i-1;++j)
        s+=a[j];
    s/=(i-1);
    for(j=0;j<i-1;++j)
        if(a[j]>s)
            num++;
    printf("大于平均值%f的个数为:%d\n",s,num);
}
1