#include <stdio.h>
double average_positive(int* v, size_t n) {
double sum = 0.0;
size_t count = 0;
size_t i = 0;
if (v == NULL || n == 0) return 0;
do {
if (0 < v[i]) {
sum += v[i];
++count;
}
} while (++i != n);
return sum / count;
}
int main(void) {
int p[] = { 7, 5, 8, 7, 1, 4, -4, 0, 7, -8, 0, -9, 2 };
size_t n = sizeof(p) / sizeof(p[0]);
double ap = average_positive(p, n);
printf("Average: %.3lf\n", ap);
return 0;
}
bool b = v[i] > 0;
sum += v[i] & -b;
count += b;
По-хорошему, компилятор сам должен такую трансформацию замутить, но он когда делает, когда нет, а вручную надёжнее...