关于#c语言#的问题:从键盘上输入一批正整数(如果遇到负数重新输入,如果遇到0停止输入)

从键盘上输入一批正整数(如果遇到负数重新输入,如果遇到0停止输入),输出:

(1)输入的正整数的平均值;

(2)高于平均值的正整数的个数。

#include <stdio.h>
int main()
{
int i=0, n, x=0, sum = 0, a[100];
printf("请输入一组数;");
scanf_s("%d", &a[i]);
while (a[i]!=0)
{
if (a[i] > 0)
{
i++;
scanf_s("%d", &a[i]);
}
else
break;
}
for (n = 0; n < i; n++)
{
sum += a[n];
}
float j;
j = (float)sum / i;
for (n = 0; n < i; n++)
{
if (a[n] > j)
x++;
}
printf("正整数的平均值为%f", j);
printf("高于平均值的正整数的个数为%d", x);
return 0;
}
我是新手,只是提出自己的见解。
学的不多,写的很麻烦。

用while循环接收输入。if检查输入的数是否为正整数

int input;
int avg = 0, cnt = 0;
while(EOF != scanf("%d",&input) )
{
    if(input < 0) continue;
    if(input == 0) break;
    avg += input;
    cnt += 1;
}
printf("平均数 = %g, 正整数个数为 %d", avg/cnt*1.0, cnt);

手打不易,如果有用不防点个采纳。

供参考:

#include <stdio.h>
int main()
{
    int i = 0, a[100] = { 0 }, s = 0, cnt = 0;
    float avg = 0;
    while (scanf("%d", &a[i]) == 1 && a[i] != 0) {
        if (a[i] < 0) continue;
        s += a[i];
        i++;
    }
    avg = (float)s / i;
    while (i--)
        if (a[i] > avg) cnt++;
    printf("avg=%.2f, %d", avg, cnt);
    return 0;
}

1 单个数字输入,这种思路的话,使用循环,在循环中调用输入,获取到值后,判断是否满足重新输入或循环退出条件,否则使用数组(最好是动态容器vector等)存储当前这个合规值,等到退出循环后,遍历容器值,求出平均值,可使用算法count计算个数,或在遍历中判断也行
2 以字符串方式输入,这种方式需要增加字符串解析,解析后再判断,和上边一样。

#include<stdio.h>

int main()
{
int a[100]={0},i=0,b,c=0,d=0;
double ave=0.000,s=0,n=0;
printf("输入一个整数:");
while(scanf("%d",&b),b!=0)
{
i++;
a[i]=b;
if(b<0)
{
printf("数据需重新输入:");
for(d=0;d<=100;d++)
{
a[d]=0;
i=0;}
}
if(b>0)
{
printf("\n继续输入:"),n=i;
}
}
for(i=1;i<=n;i++)
s+=a[i],ave=s/n;
for(i=1;i<=n;i++)
if(a[i]>ave)c++;

printf("输入数据的平均值为%.3lf\n高于平均值的数据个数为%d\n",ave,c);
return 0;

}
可以参考一下


#include <stdio.h>
int main()
{
    int i=0, n=0, x=0;
    float a[100], sum = 0;
    
    printf("请输入一组数;");
    
    while (1)
    {
        scanf_s("%d", &a[i]);
        if (a[i] > 0)
        {
            i++;
            sum += a[i];
        }
        else if(a[i] < 0)
        {
            printf("输入了一个负数, 请重新输入;");
            sum = 0;
            i = 0;
        }
        else if(a[i] = 0) 
            break;
    }
        
    float j;
    j = sum / i;
    
    for (n = 0; n < i; n++)
    {
        if (a[n] > j)
            x++;
    }
    printf("正整数的平均值为%f", j);
    printf("高于平均值的正整数的个数为%d", x);
    return 0;
}