Почему округлятся переменная

329
19 декабря 2016, 20:03

нахожу среднее арифметическое всех элементов двумерно массива но почему-то значение округлется, а мне нужно чтобы выдавало что то вроде 4,15 или 6,87 использую такой код:

sum=0;
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{
 sum+=a[i][j];
 }
 sr=sum/(N*M);
  printf("%d \n", sum);
 printf("%d \n", N);
 printf("%d \n", M);
 printf("Srednee arifmeticheskoe: %f \n", sr);

изучать си++ начал только недавно, поэтому сильно не пинайте)

Answer 1

Обратите внимание на

sr=sum/(N*M);

У Вас тип переменной sum - целочисленный (возможно, int). N*M тоже имеет целочисленный тип. Поэтому результат деления тоже имеет целочисленный тип. Уже после выполнения деления этот результат приводится к вещественному типу.

Для того, чтобы результат деления сразу имел вещественный тип, нужно написать так:

sr = static_cast<double>( sum ) / ( N * M );

Вы приводите значение sum к типу double. После чего, делите вещественное число на целое. Результат такой операции - вещественное число.

Можно без явного приведения типов:

sr = sum;
sr = sr / (N * M);
Answer 2

Используйте тип переменной float, и в printf указывайте %f, вместо %d. Это происходит из-за автоматического приведения типов.

READ ALSO
Lint синтаксический анализатор

Lint синтаксический анализатор

нужно сгенерировать такую ошибку

337
Алгоритм Флойда-Уоршелла

Алгоритм Флойда-Уоршелла

У меня есть задание

415
Вывод двумерного массива в файл

Вывод двумерного массива в файл

мне нужно вывести матрицу n*n, а всё выводится в одну строчку, что неправильно?

349
Односвязный упорядоченный список

Односвязный упорядоченный список

Составить программу, которая:

458