Сумма числовой последовательности
Задача 3.1. «Сумма и среднее арифметическое числовой последовательности».
Определить сумму и среднее арифметическое значение элементов заданной числовой последовательности. Рассмотрим все три варианта задания последовательности.
а) Входная последовательность задается с указанием количества элементов n ≥ 0 в следующем порядке:
n X1 X2 ... Xn
Тест. Вход: 4 2 3.5 1.5 5
Выход: Сумма = 12.00
Среднее арифметическое = 3.00
Используем алгоритм 3.1. для определения суммы элементов числовой последовательности. Используем следующие переменные:
x – текущий элемент последовательности,
s – текущее значение суммы элементов.
До начала цикла по вводу и обработке элементов величину s обнуляем. На каждом шаге цикла вводим одно очередное число и его значение добавляем к величине s.
Схема алгоритма задачи 3.1. «Сумма и среднее арифметическое значение числовой последовательности» представлена на рис. 3.2.
Рис.3.2. Схема алгоритма задачи «Сумма и среднее арифметическое значение числовой последовательности»
В табл. 3.1. представлена трассировочная таблица исполнения алгоритма задачи «Сумма и среднее арифметическое значение числовой последовательности».
Табл.3.1. Трассировочная таблица исполнения алгоритма задачи 3.1.
n | ||||||||||||||||||||
s | 5.5 | |||||||||||||||||||
i | ||||||||||||||||||||
x | 3.5 | 1.5 | ||||||||||||||||||
i<=n | + | + | + | + | - | |||||||||||||||
вывод | Сумма= 12.00 Среднее= 3.00 |
/* Программа 3.1а. Сумма и среднее арифметическое значение */
/* числовой последовательности. Задано количество чисел n>=0. */
#include <stdio.h>
void main(void)
{ int n; /* Количество чисел */
float x, /* Текущее число */
sum=0; /* Текущая сумма */
int i; /* Номер текущего числа */
scanf("%d", &n);
for ( i = 1; i <=n; i++)
{ scanf("%f", &x); /* Ввод текущего числа */
sum = sum + x;
}
printf ("\nСумма = %.2f\n ", sum);
printf ("Среднее арифметическое = %.2f\n ", sum/n);
}
б) Входная последовательность задается с признаком конца в следующем порядке:
X1 X2 ... Xn W
где n - количество элементов (n >= 0), заранее неизвестно.
W известное заранее значение, отличающееся от элементов последовательности.
Тест. Вход: 2 3.5 1.5 5 9999
Выход: Сумма = 12.00
Среднее арифметическое = 3.00
Используем алгоритм 3.2. для определения суммы элементов числовой последовательности. Признак конца последовательности обозначим именованной константой W. Для вычисления среднего арифметического значения последовательности необходимо подсчитать не только сумму, как в программе 3.1а, но и количество элементов.
/* Программа 3.1б. Сумма и среднее арифметическое значение */
/* числовой последовательности. Задан признак конца W = 9999 */
#include <stdio.h>
#define W 9999
void main(void)
{ float x, /* Текущее число */
sum = 0; /* Текущая сумма */
int k = 0; /* Количество чисел */
scanf ("%f", &x);
while (x != W)
{ sum = sum + x;
k++;
scanf("%f", &x);
}
printf ("\nСумма = %f\n", sum);
printf ("Среднее арифметическое = %.2f\n ", sum/k);
}
в) Входная последовательность X1, X2, ... , Xn продолжается до конца входного файла, n - количество элементов (n >= 0), заранее неизвестно, признак конца последовательности не задан.
Тест. Вход: 2 3.5 1.5 5 <Ctrl-z> <Enter>
Выход: Сумма = 12.00
Среднее арифметическое = 3.00
Используем алгоритм 3.3. для определения суммы элементов числовой последовательности. Конец файла определим по результату работы функции scanf(). Для вычисления среднего арифметического значения последовательности подсчитаем сумму и количество элементов, как в программе 3.1б.
/* Программа 3.1в. Сумма и среднее арифметическое значение */
/* числовой последовательности, продолжающейся до конца файла */
#include <stdio.h>
void main(void)
{ float x, /* Текущее число */
sum; /* Текущая сумма */
int k = 0; /* Количество чисел */
sum = 0;
while (scanf ("%f", &x) >0) /* ввод чисел до конца файла */
{ sum = sum + x; k++;}
printf ("\nСумма = %f\n", sum);
printf ("Среднее арифметическое = %.2f\n ", sum/k);
}