从键盘上输入一批正整数(如果遇到负数重新输入,如果遇到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;
}