Вы находитесь на странице: 1из 12

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное


учреждение высшего образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Инженерно-технологическая академия ЮФУ


Институт компьютерных технологий и информационной безопасности

Кафедра вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА № 2

по курсу: «Алгоритмизация и программирование»

на тему: «Работа с массивами и циклами»

Выполнила

студентка группы Ктбо1- 3 Я. Р. Чернова

Проверил

Ассистент кафедры ВТ А. С. Зачитайлов

«14» сентября 2023г.

г. Таганрог

Содержание
Введение...................................................................................................................3
1. Теоретическая часть............................................................................................4
1.1. Оператор while...............................................................................................4
1.2. Оператор for...................................................................................................4
1.3. Оператор do-while.........................................................................................5
1.4. Общие сведения о массивах.........................................................................6
1.5. Одномерные массивы...................................................................................6
2. Практическая часть.............................................................................................9
2.1. Блок-схема...................................................................................................9
2.2. Листинг кода.............................................................................................10
2.3. Отладка......................................................................................................10
Заключение............................................................................................................12

2
Введение
Цель лабораторной работы: изучить виды конструкций циклов, освоить
запись бесконечных циклов и их смысл, научиться работать с массивами.
Сегодня программирование является одним из базовых элементов
подготовки студентов направления «Информатика и вычислительная
техника».
Язык Си обеспечивает разнообразие типов данных. Базовыми типами
являются целые, вещественные числа и символы (литеры), разрешается
модификация базовых типов данных, а также создание пользовательских
типов. В языке используются стандартные типы данных: int, char, float,
double, а также используются массивы, структуры (записи), файлы. Кроме
того, имеется возможность конструирования очередей и списков.
Программы на языке Си компактны и гибки, в то же время в языке
отсутствуют средства контроля работы программиста. Язык Си как бы
«доверяет» разработчику и разрешает ему практически все действия. Из-за
этого Си нельзя считать языком надежного программирования, поскольку вся
ответственность за качество программы лежит на программисте. Поэтому
программист-разработчик должен хорошо знать особенности языка и его
реализации.

3
1. Теоретическая часть
В языке программирования Си операторы цикла служат для
многократного повторения последовательности операторов до тех пор, пока
выполняется условие. Цикл состоит из заголовка и тела цикла. Вход в цикл и
выход из цикла осуществляются через заголовок цикла. Рассмотрим виды
циклов.
1.1. Оператор while
Ключевое слово while позволяет выполнять оператор или группу
операторов до тех пор, пока условие не перестанет быть истинным. Формат
оператора имеет вид:
While (ЛВ) ОР;
где ЛВ - логическое выражение, ОР - тело цикла (простой или
составной оператор).
Действие оператора состоит в следующем:
1. если ЛВ истинно, то выполняется ОР, а затем снова проверяется ЛВ и
так далее;
2. если JIB ложно, то ОР пропускается, а управление передается
оператору, следующему за, телом цикла.
Поскольку проверка ЛВ выполняется перед телом цикла, то цикл while
называют циклом с предусловием. Если ЛВ изначально ложно, то тело цикла
не выполнится ни разу.
1.2. Оператор for
Оператор цикла for позволяет выполнять оператор или группу
операторов заранее заданное количество раз. Общий формат оператора имеет
вид:
for (VI; ЛВ; V2) ОР;
где VT - выражение, в котором производится присваивание
переменной, называемой параметром цикла, начального значения
(инициализация); ЛВ - условие, определяющее, следует ли в очередной раз
выполнять оператор (тело цикла); V2 - выражение, в котором производится
изменение переменной цикла (приращение); ОР - оператор или группа
операторов.
Принцип работы оператора состоит в следующем:
4
1. вычисляется VI;
2. вычисляется ЛВ;
3. если ЛВ истинно, выполняется ОР;
4. затем вычисляется V2;
5. проверка ЛВ далее ОР далее V2 и т. д.
Когда ЛВ становится ложным, осуществляется переход к оператору,
следующему за ОР. Если ОР - составной оператор, то его надо заключить в
{}.
Если ЛВ сразу ложно, то ни ОР, ни V2 не выполнятся.
Отметим две дополнительные возможности оператора for в сравнении с
оператором while:
1. возможность включения, инициализирующего выражения VI,
используемого один раз перед тем, как будет произведена оценка
условия;
2. возможность включения выражения V2, которое будет использоваться
после каждой итерации оператора ОР.
Следует иметь в виду, что все три выражения VI, ЛВ, V2 являются
необязательными. В качестве ОР может быть использован пустой оператор.
Возможны следующие конструкции оператора:
1. for (VI ;; V2) ОР (бесконечный цикл);
2. for(;ЛВ;) ОР ;
3. for (;;) (бесконечный цикл).
Заметим, что с помощью операторов for и while можно создавать
бесконечные циклы, если опустить все три выражения в операторе for и
использовать всегда истинное лв в while. Такие программы нельзя назвать
корректными, но существуют способы завершения самых некорректных
циклов.
Допускается использование оператора for, когда имеется несколько
начальных выражений вида VI, перечисленных через запятую, и несколько
выражений вида V2, также перечисленных через запятую. Конструкция
такого вида носит название «Операция запятая».
1.3. Оператор do-while
В цикле do-while проверка условия проводится после выполнения тела
цикла:

5
do OP while (ЛВ);
Данный оператор работает следующим образом: выполняется ОР,
далее, если ЛВ истинно, то повторяется выполнение' ОР, в противном случае
осуществляется переход к оператору, следующему за while.
Если в цикле должно выполняться несколько операторов, они
заключаются в {}. Данный цикл носит название цикла с постусловием, т.е.
при любом ЛВ тело цикла выполняется хотя бы один раз.
1.4. Общие сведения о массивах
Массив — это тип данных, представляющий собой ограниченный
набор упорядоченных элементов одного и того же типа, имеющих одно и то
же имя. Аналогами массивов в математике являются вектора, матрицы,
таблицы и т.д. Иногда элементы массива называют переменной с индексами.
Количество элементов массива задается заранее при объявлении
массива. Все элементы массива упорядочены по индексам. Доступ к
конкретному элементу массива осуществляется с помощью имени массива и
индексов. В языке Си все массивы располагаются в непрерывной области
памяти. Первый элемент массива имеет наименьшее значение индекса, а
последний - наибольшее. Стоит помнить, что начальное значение индекса
элемента массива в языке Си - нуль.
Элементы массива могут быть как простыми, так и составными
переменными. Элемент массива может иметь несколько индексов.
Количество индексов переменной определяет размерность массива.
Размерность массивов в языке Си не ограничена, но чаще используются
одномерные и двумерные массивы.
1.5. Одномерные массивы
Существует несколько способов объявления массива. Общая форма
объявления одномерного массива имеет следующий вид:
тип имя [размер]
где:
класс - необязательный элемент, определяющий класс памяти (extern,
static, register);
тип - базовый тип элемента массива;
имя - идентификатор массива;
6
размер - количество элементов в массиве.
Доступ к элементу массива осуществляется с помощью имени массива
и индекса. Индекс элемента массива помещается в квадратных скобках после
имени. Например, элементами массива, состоящего из N элементов, являются
переменные с индексами вида:
а[0] , а[1], ..., a[N-l].
Обратите внимание, что N в описании является целой положительной
константой.
Рассмотрим следующий пример, пусть требуется написать программу,
вычисляющую следующую сумму для N=15:

Пример программного кода на языке Си будет иметь следующий вид:

Объем памяти, необходимый для хранения массива, определяется


типом массива и количеством его элементов. Так, для одномерного массива
необходимый объем памяти вычисляется по следующей формуле:
объем памяти в байтах = sizeof х длина массива.
Следует иметь ввиду, что при исполнении программы не проверяется
соблюдение границ массива и его содержимого. Функция проверки данных
на корректность возложена на программиста.

7
В языке Си массивы при объявлении можно инициализировать. Общая
форма инициализации массива аналогична инициализации переменной и
имеет вид:
<класс> тип имя [размер] = {список значений};
Список значений представляет собой список констант, перечисленных
в фигурных скобках через запятую. Типы констант должны быть совместимы
с типом массива. Первая константа присваивается первому элементу массива,
имеющему индекс нуль, вторая - второму и так далее. После закрывающей
фигурной скобки точка с запятой обязательна:
static float х[5]={7.5,0,-3.2,0,4} ;
В нашем случае объявлен массив из 5 элементов, значения которых
указаны в списке примера. Если в списке инициализации задать количество
элементов меньше, чем задано в объявлении массива, то остальные элементы
принимаются равными нулю. Если в списке инициализации задать
количество элементов больше, чем задано в 42 объявлении массива, это
вызовет ошибку при компиляции программы.
При инициализации также допустима следующая форма объявления:
<класс> тип имя [] = {а0, а1, … ,аn};
При таком объявлении компилятор сам создает массив из М элементов
со значениями а0, al, ... , аМ-1.

8
2. Практическая часть
Задание для выполнения:
1) Построить блок-схему, описать выполнение программы на
неформальном языке;
2) Реализовать программу на языке Си в соответствии с вариантами
заданий, предусмотреть защиту от некорректно введенных
значений.
Вариант 4: вычислить сумму всех положительных элементов массива.
Массив и его длина вводятся пользователем.
2.1. Блок-схема
Для решения задачи построю блок-схему (Рисунок 1).

9
Рисунок 1 – Блок-схема для решения задачи.
Перед тем как создать массив с количеством элементов n нужно
проверить входные данные на корректность. В моем случае, некорректным
входным значением длинны массива будет отрицательное значение, поэтому
после ввода длинны создам условие для проверки на отрицательность, если
ввод не корректен, то окончание программы.
Для того чтобы найти положительные числа в массиве нужно создать
массив длиной n, заполнив его с клавиатуры, как сказано в условии, методом
перебора элементов. Для создания и дальнейшего перебора массива я
использую функцию for, а для проверки значений на отрицательность
использую функцию if.
Параллельно перебору массива с условием в созданную переменную
sum буду прибавлять значение элемента массива, не удовлетворившего
условие, так как я ищу сумму положительных элементов. По окончанию
перебора и выходу из цикла выведу значение переменной sum.
2.2. Листинг кода
#include <iostream>
#include <vector>
using namespace std;

int main()
{
int n, sum = 0;
cin >> n;
if (n < 0) {
cout << "error";
return 0;
}

vector<int> m = vector<int>(n);

for (int i = 0; i < n; i++) {


cin >> m[i];
}

for (int i = 0; i < n; i++) {


if (m[i] > 0) {
sum = sum + m[i];
}
}
10
cout << endl << "sum = " << sum;
return 0;
}
2.3. Отладка
Чтобы судить о правильности работы программы введем значения
корректные и некорректные.
1) Корректные данные (Рисунок 2).

Рисунок 2 – Ввод массива и вывод суммы.


2) Некорректные данные (Рисунок 3).

Рисунок 3 – Ввод длины массива и ошибка ввода.


Программа работает, верно судя по тестам. Поставленная задача
выполнена.

11
Заключение
В ходе лабораторной работы получены базовые сведения о средах и
средствах разработки языка программирования Си, структурах программ,
типах данных, массивах и работе с ними, строках, массивах символов,
файлах данных, простейших арифметических операциях, циклах, операциях
ввода/вывода, функциях, которые составляют основные структурные
компоненты языка для написания программ на языке Си. Язык
программирования Си занимает промежуточное положение между языками
высокого уровня и машинно-ориентированными языками и рассмотрены
особенности конструирования исходного кода программ. Выработаны
практические навыки программирования благодаря использованию
теоретических элементов к лабораторным работам. Приобретены первичные
технологические приемы программирования на языке Си.

12

Вам также может понравиться