我必须计算用户使用C语言输入的数字的算术和几何平均值。该算法可以正常工作,但是在按下0之前,我不知道如何输入数字。我尝试了很多事情,但是没有任何效果。到目前为止,这是我一直尝试做的事情。感谢您的帮助。
int main() {
int n, i, m, j, arr[50], sum = 0, prod = 1;
printf("Enter numbers until you press number 0:");
scanf("%d",&n);
while (n != 0) {
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
sum = sum + arr[i];
prod = prod * arr[i];
}
}
int armean = sum / n;
float geomean = pow(prod, (float)1 / n);
printf("Arithmetic Mean = %d\n", armean);
printf("Geometric Mean = %f\n", geomean);
getch();
}
答案 0 :(得分:4)
您的代码要求事先提供值的数量,然后读取那么多的值。那不是你要做的。
您需要循环查询数字,并在读取的数字为0时退出循环。甚至不需要数组:
int n = 0, i, m, j, sum=0, prod=1;
while (1) {
int value;
scanf("%d",&value);
if (value == 0) {
break;
}
sum=sum+value;
prod=prod*value;
n++;
}
int armean=sum/n;
float geomean=pow(prod,(float) 1/n);
答案 1 :(得分:1)
请通过下面的代码;这可能是完整的帮助:
#include <stdio.h>
int main()
{
int n, i, m, j, arr[50], sum=0, prod=1;
printf("Enter numbers until you press number 0:");
for(i=0; i<50; i++)
{
scanf("%d",&arr[i]);
if (arr[i] == 0)
{
break;
}
sum=sum+arr[i];
prod=prod*arr[i];
}
printf ("%d %d\n",sum, prod);
n = i+1;
int armean=sum/n;
float geomean=pow(prod,(float) 1/n);
printf("Arithmetic Mean = %d\n",armean);
printf("Geometric Mean = %f\n",geomean);
getch();
return 0;
}
答案 2 :(得分:1)
dbush说的是正确的,您不需要数组,也不需要事先询问数字,但是他没有告诉您如何找到值的数目
int main()
{
int n, sum=0, prod=1, num;
printf("Enter numbers until you press number 0:\n");
for(n=0; ; n++)
{
scanf("%d",&num);
if(num==0)
break;
sum=sum+num;
prod=prod*num;
}
printf("sum is %d \n",sum);
printf("prod is %d \n",prod);
printf("n is %d \n",n);
float armean=sum/n; //why int?
float geomean=pow(prod,(float) 1/n);
printf("Arithmetic Mean = %d\n",armean);
printf("Geometric Mean = %f\n",geomean);
//getch(); why getch(), you are not using turboc are you?
}
答案 3 :(得分:0)
不需要数组,但是您应该在从用户那里读取0
中输入的数字后对其进行测试。最好也使用浮点算术,以避免算术溢出,因为溢出会很快产生于值的乘积。
在任何情况下,都必须包括<math.h>
才能正确定义pow
,应该测试scanf()
的返回值,如果没有数字,请避免除以0
在0
之前输入。
#include <stdio.h>
#include <math.h>
int main() {
int n = 0;
double value, sum = 0, product = 1;
printf("Enter numbers, end with 0: ");
while (scanf("%lf", &value) == 1 && value != 0) {
sum += value;
product *= value;
n++;
}
if (n > 0) {
printf("Arithmetic mean = %g\n", sum / n);
printf("Geometric mean = %g\n", pow(product, 1.0 / n));
getch();
}
return 0;
}