logo
Подбельский Фомин_Программирование на языке СИ_

Вычисление среднего и дисперсии.

Вычисление среднего и дисперсии. Введя значение n из диапазона (0<n<=100) и значения n первых элементов массива х[0], х[1],...,х[n-1], вычислить среднее и оценку дисперсии значений введенных элементов массива. Задачу решает следующая программа:

В программе определен (строка 6) массив х со 100 элементами, хотя в каждом конкретном случае используются только первые n из них. Ввод значения n сопровождается проверкой допустимости вводимого значения (строки 713). В качестве условия после while записано заведомо истинное выражение 1, поэтому выход из цикла (оператор break) возможен только при вводе правильного значения n, удовлетворяющего неравенству 0<n<101. Следующий цикл (строки 1520) обеспечивает ввод n элементов массива и получение их суммы (b). Затем в цикле (строки 2226) вычисляется сумма d квадратов отклонений элементов от среднего значения. Возможен следующий результат работы программы:

Вложенные циклы. В теле цикла разрешены любые исполнимые операторы, в том числе и циклы, т.е. можно конструировать вложенные циклы. В математике вложенным циклам соответствуют, например, кратные суммы или произведения.

В качестве примера рассмотрим фрагмент программы для получения суммы такого вида:

Введем следующие обозначения: а - двумерный массив, содержащий значения элементов матрицы; р - произведение элементов строки матрицы; с - сумма их значений; s - искомая сумма (результат). Опустив определения переменных и операторы ввода-вывода, запишем текст на языке Си:

При работе с вложенными циклами следует обратить внимание на правила выполнения операторов break и continue. Каждый из них действует только в том операторе, в теле которого он непосредственно использован. Оператор break прекращает выполнение ближайшего внешнего для него оператора цикла. Оператор continue передает управление на ближайшую внешнюю проверку условия продолжения цикла.

Для иллюстрации рассмотрим фрагмент другой программы для вычисления суммы произведений элементов строк той же матрицы:

.

Внутренний цикл по i прерывается, если (строка 6) обнаруживается нулевой элемент матрицы. В этом случае произведение элементов столбца заведомо равно нулю, и его не нужно вычислять. Во внешнем цикле (строка 9) проверяется значение i. Если i<5, т.е. элемент a[j][i] оказался нулевым, то оператор continue передает управление на ближайший оператор цикла (строка 4), и, таким образом, не происходит увеличение s (строка 10) на величину "недосчитанного" значения р. Если внутренний цикл завершен естественно, то i равно 5, и оператор continue не может выполняться.