输出C编程中的平均值

时间:2015-03-21 16:45:12

标签: c average

我写了一个程序,你可以输入数字并输出平均值。它有时不会输出确切的答案,我不知道为什么。例如,当我输入1,2,10,-3时,它输出2,但它应输出2.50。此外,有没有办法通过输入一个字母,如N而不是0来让它摆脱循环?这是我的代码:

#include<stdio.h>

int main(){
    int nA = 1;
    int nSum = 0;
    int input = 0;
    double dAvg = 0;
    int nums = 0;
    printf("enter numbers to find the average\n");
    printf("enter 0 to quit.\n");
    while (nA !=0) {
        scanf("%d", &input);
        nA = input;
        nSum+=nA;
        if (nA !=0) {
            nums = nums + 1;
        }
        dAvg = nSum / nums;
    }   
    printf("your average is %lf\n", dAvg);    
    return 0;  
}

5 个答案:

答案 0 :(得分:2)

你划分整数,你应该进行双重划分:

dAvg = nSum / (double)nums;

答案 1 :(得分:1)

只需将分组参数转换为double

dAvg = (double) nSum / nums;

必须这样做,因为nSumnums都是int,它们会经历整数除法,即小数部分被截断或者除法运算符返回int。因此,为了避免这种情况,我们必须在分区中明确地投射double

答案 2 :(得分:0)

除法运算符得到两个int s作为操作数,因此返回int。结果通过添加小数点隐式转换为float。如果你想要float除法,你应该将两个操作数中的至少一个赋予除法运算符float

答案 3 :(得分:0)

  

有时并没有输出确切的答案,我不知道为什么。

这行代码是罪魁祸首:

dAvg = nSum / nums

当您输入1,2,10,-3时,您应该得到2.5,但结果的小数部分会被截断。相反,你应该做double师:

dAvg = double(nSum) / nums
  

另外,有没有办法通过输入N而不是0来让它突破循环?

是的,有。您可以使用C函数scanf_s

char input; // use a char instead of an int
do {
    scanf_s("%c", input, 1);
    if (input == 'N') {
        break;
    }

    nA = input - '0'; // convert char input to int value
    nSum+=nA;
    nums = nums + 1;
    dAvg = nSum / nums;
}

答案 4 :(得分:0)

#include<stdio.h>

int main(void) {
   int count = 0, nSum = 0;
   char input = 0;
   double dAvg;
   while(scanf("%c", &input) != -1) { // while not error
      if(input == 'N') break; // go out of loop, you can do it another way:
      // while (scanf("%c", &input) != -1 && input != 'N') {
      if(input != 0) { // If you don't want to count zeros
         nSum += input - '0';
         ++count; // increment by one
      }
   }
   // Here you can check internal errors
   if(count != 0) dAvg = nSum * 1.0 / count;
   printf("%f\n", dAvg); // print double

}

内部类型char只不过是简单数字(如果是无符号,则为0-255)。所有的simbols实际上都有代码,即数字。这就是为什么你可以像使用数字一样使用char:

char a = 'c';
int b = a + 4;