Решение

Среднее геометрическое k элементов массива – это корень степени k из произведения этих элементов. Таким образом, сначала необходимо вычислить произведение Р ненулевых элементов массива и их количество k, а затем среднее геометрическое Sg по формуле:

. (2.6)

Например, если элементы массива равны A = {1, 0, 2, 4, 0}, то

Графическая схема алгоритма решения задачи изображена на рисунке 2.11. В приведенном алгоритме в цикле по i ( блоки 5 – 9) помимо вычисления произведения вычисляется и количество ненулевых элементов массива. После цикла с помощью ветвления, проверяется, есть ли в массиве ненулевые элементы (k>0 – условие наличия в массиве ненулевых элементов), в этом случае вычисляется и выводится среднее геометрическое. В противном случае выводится сообщение " В массиве все элементы равны нулю ". В программе переменные Р и Sg имеют вещественный тип двойной точности (double), т.к. произведение вещественных чисел может быть очень большим числом.

Используемые переменные: n – число элементов массива; a[] – статический массив; P – произведение ненулевых элементов массива; k – количество ненулевых элементов массива; Sg – среднее геометрическое элементов массива; i – параметр цикла; #include <stdio.h> #include <math.h> main() { float a[20]; int n, i, k; double P, Sg; puts("Введите число элементов массива a"); scanf("%d",&n); for (i=0;i<n;i++) { printf("Введите число a[%2d]=",i); scanf("%f",&a[i]); } P=1; k=0; for(i=0; i<n; i++) if(a[i]!=0) { P*=a[i]; k++; } puts("Массив a"); for(i=0; i<n; i++) printf("a[%2d]=%6.2f \n", i, a[i]); if(k>0) { if(P>0) Sg=powl(P,1.0/k); else Sg= –powl(fabs(P),1.0/k); printf("Среднее геометрическое ненулевых элементов массива =%.4lf \n", Sg); printf("P=%.4lf k=%d \n", P, k); } else puts("В массиве все элементы равны нулю! "); return(0); }

Рисунок 2.11 Графическая схема и программа для примера 2.6

В программе для возведения P в степень 1/k используется функция powl(основание, степень), первый аргумент которой может быть только положительным числом. Поэтому для отрицательного P использовано выражение , запись которого на языке С имеет вид: – powl(fabs(P), 1.0/k).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: