Как поделить два числа типа int и присвоить ответ переменной типа double&

Задание: Вычислить Z= (Sп + Sо)/(Sп - Sо) , где Sп и Sо – суммы положительных и отрицательных элементов массива А (70)

Код:

#include <stdio.h>
#include <malloc.h>
int main()
{
  int *a;
  int i, n, j, sum_p=0, sum_o=0;
  double z=3;
  printf("Введите размер массива: ");
  scanf("%d", &n);
  a = (int*)malloc(n * sizeof(int));
  for (i = 0; i < n; i++) 
    {
        printf("Введите элемент массива %d\n", i+1); 
        if(scanf("%d", &j)==1)
            a[i] = j;
            if(a[i] > 0) 
                sum_p += a[i]; 
            if(a[i] < 0) 
                sum_o += a[i];
    }
  putchar('\n');
  putchar('\n');
  printf("Sum+ %d\n", sum_p); 
  putchar('\n');
  printf("Sum- %d\n", sum_o);
  putchar('\n');
  z = (sum_p + sum_o)/(sum_p - sum_o);
  printf("z= %lf", z);
  putchar('\n');
  free(a);
  return 0;
}

Ответ:

Введите размер массива: 2
Введите элемент массива 1
-10
Введите элемент массива 2
2
Sum+ 2

Sum- -10

z= 0.000000

В ответе должна быть дробь, но компилятор всегда выдаёт 0, даже если изначально задано иное значение. В чём ошибка?


Ответы (2 шт):

Автор решения: Mikhailo

Надо сразу пояснить, что делить надо double, а не целочисленно:

z = double(sum_p + sum_o)/(sum_p - sum_o);

Это в С++, в С

z = ((double)(sum_p + sum_o))/(sum_p - sum_o);
→ Ссылка
Автор решения: Эникейщик

Еще можно sum_p и sum_o объявить как double, а не как int.

→ Ссылка