Порядок выполнения работы




Л а б о р а т о р н а я р а б о т а N 3

 

Обработка числовых последовательностей

 

 

Существует круг задач, в которых необходимо как-то обработать заданную числовую последовательность, причем для получения результата достаточно просмотреть последовательность один раз. Например,чтобы вычислить среднее арифметическое заданной последовательности чисел, можно суммирование чисел и подсчет их количества совместить со вводом. Тогда не нужно будет хранить всю последовательность в памяти компьютера (в виде массива), достаточно иметь одну скалярную переменную целого или вещественного типа и поочередно присваивать ей вводимые значения.

Числовая последовательность может задаваться с указанием количества чисел или иметь какой-то признак конца.

Пусть последовательность задается в виде

 

A1, A2,..., An, W

 

(n заранее неизвестно, W - признак конца последовательности), тогда процесс обработки в общем виде можно представить одной из двух схем:

 

А) цикл с постусловием б) цикл с предусловием

 

 
 

       
 
   
 

да нет

Фрагменты программ на Cи, соответствующие этим схемам:

 

а) scanf ("%f",&a); б) scanf ("%f",&a);

do while (a!=W)

{ /* обработка a */ { /* обработка a */

......

scanf ("%f",&a); scanf ("%f",&a);

} }

while (a!=W);

 

В этих фрагментах предполагается, что переменная a вещественного типа (float), поэтому указан формат %f. Eсли же последовательность состоит из целых чисел типа int, то следует выбрать формат %d. W - символическая константа, которая должна быть определена с помощью директивы #define.

Числовая последовательность может быть задана и с указанием количества вводимых чисел:

n, A1, A2,..., An.

 

Тогда процесс обработки можно представить в виде:

 

a) б) более короткая форма

 

       
   
 

       
   
 

 

На языке Си этот процесс можно записать с помощью оператора цикла while или лучше оператора цикла for:

 

а) scanf ("%d",&n); i=1; б) scanf ("%d",&n);

while (i<=n) for (i=1; i<=n; i++)

{ {

scanf ("%f",&a); scanf ("%f",&a);

/* обработка a */ /* обработка a */

......

i++; }

}

Процесс обработки очередного числа может иметь линейную структуру (состоять из нескольких последовательно выполняемых операторов) или структуру ветвления, которая программируется с помощью оператора if:

 

If (условие) оператор1

Else оператор2

 
 

 
 

 

В операторе if оператор1 и оператор2 могут быть составными операторами, конструкция " else оператор2 " может отсутствовать, например:

if (a % 2!= 0)

{ s=s+a;

k++;

}

Пpимечание. В опеpатоpах if, while, do-while можно использовать не только условные выpажения, но и вообще любые. Это связано с тем, что в Си значение "ложь" - это 0, а "истина" - любое ненулевое число. Поэтому пpедыдущий опеpатоp if можно записать иначе:

if (a % 2) { s=s+a; k++; }

 

 

Пример решения задачи

 

Задача. Даны целые числа n, A1,A2,...,An. Вычислить сумму тех чисел последовательности, которые удовлетворяют условию |Ai | < i2.

 

 

Программа:

 

#include <stdio.h>

#include <math.h>

main()

{

int n; /* количество чисел */

int a, /* очередное число */

s=0, /* сумма */

i; /* порядковый номер числа в посл-ти */

 

printf ("\nВведите количество чисел: ");

scanf ("%d",&n);

printf ("Введите числовую последовательноть:\n");

for (i=1; i<=n; i++)

{

scanf ("%d",&a);

if (abs(a) < i*i) s=s+a;

}

printf ("сумма=%d\n",s);

}

 

 

Тесты для проверки программы:

№ п/п n Исходная последовательность Ожидаемый результат
    1 -2 3 16 -5 40 -1 5 10 -20 сумма=-4 сумма=0

 

 

Результаты тестирования программы:

 

Введите количество чисел: 6

Введите числовую последовательноть:

1 -2 3 16 -5 40

сумма=-4

 

Введите количество чисел: 4

Введите числовую последовательноть:

-1 5 10 -20

сумма=0

 

Порядок выполнения работы

 

 

1. Получить задание у преподавателя.

2. Составить схему и программу на языке Си, подобрать тесты для проверки программы на компьютере.

3. Отладить программу на компьютере и показать результаты тестирования преподавателю.

4. Оформить и сдать отчет по лабораторной работе.

 

 

Задания

 

1. Даны натуральные числа n, A 1, A2,..., An. Определить количество членов Ak последовательности A1,..., An:

а) кратных 3 и не кратных 5;

б) имеющих четные порядковые номера и являющихся нечетными числами;

в) удовлетворяющих условию 2k < Ak < k!.

2. Даны натуральное число n, действительные числа A1,A2,...,An.Получить:

а) удвоенную сумму всех положительных членов последовательности A 1, A2,..., An

б) сумму отрицательных и количество положительных членов последотельности A 1, A2,..., An

в) min(|A1 |,..., |An |);

г) min(A1, A3,...) + max(A2, A4,...).

 

3. Даны натуральные числа A1, A2,.... Признак конца последовательности 0. Получить

а) количество и сумму тех членов последовательности, которые делятся на 5 и не делятся на 7;

б) наибольший член последовательности;

в) min(A1+ A2, A2 + A3,...).

 

4. Даны целые числа A1, A2,....Признак конца последовательности число 9999. Выяснить, составляют ли числа возрастающую последовательность.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: