c程序找到平均值

时间:2017-07-04 12:49:32

标签: c

我是编码的初学者,我正在尝试创建一个我输入的程序' n'数组中的元素数量,并找出数字的百分比是正数,负数和零。输出不是我所期待的全部是零。在我输入n = 3时,所以百分比应该是当我输入一个正数,一个负数和一个零时,为.3,.3,.3。

#include <math.h>
#include <stdio.h>

int main()
{
    int n;
    float per1, per2, per3;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    int sum1 = 0;
    int sum2 = 0;
    int sum3 = 0;

    for (int i = 0; i <= n - 1; i++)
    {
        if (arr[i] < 0)
        {
            int sum1 = sum1 + 1;
        }
        if (arr[i] > 0)
        {
            sum2 = sum2 + 1;
        }
        else
        {
            sum3 = sum3 + 1;
        }
    }

    per1 = sum1 / n;
    per2 = sum2 / n;
    per3 = sum3 / n;
    printf("%.6f\n%.6f\n%.6f\n", per1, per2, per3);

    return 0;
}

输出

3
1
-2
0
0.000000
0.000000
0.000000

最后三个数字应该是.3,.3,.3但是它给出了零。

4 个答案:

答案 0 :(得分:0)

像这样进行浮点运算

per1=sum1/(1.0*n); 
per2=sum2/(1.0*n);
per3=sum3/(1.0*n);

答案 1 :(得分:0)

你如何计算某些价值的百分比?您的答案不应该是1,1,1,而是33%,33%,33%的输入。所以你的代码应该代替这个

per1=sum1/n;

是这样的

per1=sum1*100.0/n;

你也错了你的条件。 else部分仅与第二个if相关联。所以每个小于或等于0的数字都计入sum3,这不是你可能想要的。所以你的

 if (arr[i] > 0)

应该是

 else if (arr[i] > 0)

最后一件事。在这一行上,您将创建全新的变量sum1,它将仅存在于if语句的末尾,因此不会出现在最终计算中。我会留给你如何解决它。

int sum1 = sum1 + 1;

我不知道您用于开发的环境,但您应该从一开始就学习如何使用调试器。然后,您可以查看代码流,以查看发生了什么以及何时出错。通过这样的简单程序,它非常简单。如果您使用的是Visual Studio,则它们集成了非常好的调试器。只需设置断点并运行Debug。如果您使用的是Linux,那么对于初学者来说,gdb可能会非常粗糙,但也有像ddd这样的图形工具。

答案 2 :(得分:0)

由于sum1n都是整数,因此sum1/n的结果也是整数。这意味着,如果sum1小于n,则sum1 / n的结果为0.

要获得浮点结果,至少有一个操作数可以是floatdouble。我建议您将sum变量声明为double而不是int

答案 3 :(得分:0)

我认为这段代码更好一些。我使用了malloc()函数而不是&#34; scat&#34;声明int arr[n](在这种情况下,我更喜欢旧的C风格)。

人们已经说过与变量类型相关的问题以及解决问题的一些方法。这里的另一种方式与你刚才在答案中看到的其他方式类似。

#include <math.h>
#include <stdio.h>
#include <malloc.h>

#define STR_ORD_SUFFIX(i) (i>3)?"th":(i==0)?"--":(i==1)?"st":(i==2)?"nd":"rd"

int main()
{
    int n, *arr=NULL;
    float per1,per2,per3;

    int sum1=0;
    int sum2=0;
    int sum3=0;

    printf("How many number you have to insert? ");
    scanf("%d",&n);
    if (n<=0)
        return 1;

    arr=malloc(n*sizeof(*arr));
    if (arr==NULL)
        return 2;

    printf("Insert %d number%c\n",n,(n!=1)?'s':'\x0');
    for(int i = 0; i < n; i++){
        printf("%4d%s: ",i+1,STR_ORD_SUFFIX(i+1));
        scanf("%d",&arr[i]);
    }

    for(int i=0;i<=n-1;i++)
    {
        if(arr[i]<0){
            sum1=sum1+1;
        } else if(arr[i]>0){
            sum2=sum2+1;
        } else {
            sum3=sum3+1;
        }
    }

    per1=sum1; per1/=n; per1*=100.0;
    per2=sum2; per2/=n; per2*=100.0;
    per3=sum3; per3/=n; per3*=100.0;

    printf("\n<0 %.6f%%\n>0 %.6f%%\n=0 %.6f%%\n",per1,per2,per3);

    if (arr!=NULL)
        free(arr);

    return 0;

}