平均值计算不正确



我有一个超级简单的代码,用于计算给定偶数和奇数的平均值,直到用户给出0。(我想用for loop,但我们不能(。我遇到了一个非常奇怪的问题,程序四舍五入的结果是25/2是2.00000。如果这个问题很愚蠢,我很抱歉,但我就是找不到问题。我做错了什么?

#include <stdio.h>
#include <stdlib.h>
void funkcja()
{
int sumaNiep = 0;
int sumaPa = 0;
int userInput = 1;
int i = 0;
while(userInput != 0)
{
//wprow zmiennej
printf("%d. Podaj calkowita liczbe: ", i+1);
scanf("%d", &userInput);
//jesli parzysta
if (userInput % 2 == 0)
{
sumaPa += userInput;
} else {
sumaNiep += userInput;
}
i++;
}
double sredniaNiep = sumaNiep/(i-1);
double sredniaPa = sumaPa/(i-1);
printf("nsrednia parzysta %d / %d : %lf", sumaPa, i, sredniaPa);
printf("nsrednia parzysta %d / %d : %lf", sumaNiep, i, sredniaNiep);
}

int main()
{
funkcja();
}

问题是在末尾进行整数除法。

如果用户输入0并在进行除法时使至少一个操作数成为double,则应中断循环。你还需要计算偶数和赔率:

#include <stdio.h>
#include <stdlib.h>
void funkcja() {
int sumaNiep = 0;
int sumaPa = 0;
int userInput = 1;
int iPa = 0;
int iNiep = 0;
int i = 0;
while(1) {
printf("%d. Podaj calkowita liczbe: ", ++i);
if(scanf(" %d", &userInput) != 1 || userInput == 0) break; // break out
// jesli parzysta
if(userInput % 2 == 0) {
sumaPa += userInput;
++iPa;                  // count evens
} else {
sumaNiep += userInput;
++iNiep;                // count odds
}
}
if(iPa) { // avoid div by zero
double sredniaPa = (double)sumaPa / iPa;       // double div
printf("srednia parzysta %d / %d : %lfn", sumaPa, iPa, sredniaPa);
}
if(iNiep) { // avoid div by zero
double sredniaNiep = (double)sumaNiep / iNiep; // double div
printf("srednia parzysta %d / %d : %lfn", sumaNiep, iNiep, sredniaNiep);
}
}

问题是我除以所有位数(奇数和偶数(来计算两个平均值。这里是改进的代码:

#include <stdio.h>
#include <stdlib.h>
void funkcja()
{
int sumaNiep = 0;
int sumaPa = 0;
int userInput = 1;
int i_p = 0, i_np = 0;
while(userInput != 0)
{
//wprow zmiennej
printf("%d. Podaj calkowita liczbe: ", i_p+i_np+1);
scanf("%d", &userInput);
//jesli parzysta
if (userInput % 2 == 0)
{
sumaPa += userInput;
if (userInput != 0)
{
i_p++;
}
} else {
sumaNiep += userInput;
i_np++;
}

}
if (i_np != 0)
{
double sredniaNiep = sumaNiep/(i_np);
printf("nSrednia nieparzysta %d / %d : %lf", sumaNiep, i_np, sredniaNiep);
}
if (i_p != 0)
{
double sredniaPa = sumaPa/(i_p);
printf("nSrednia parzysta %d / %d : %lf", sumaPa, i_p, sredniaPa);
}

}

int main()
{
funkcja();
}

最新更新