Лысаков. Основы программирования (Лекции (2017)), страница 5
Описание файла
Файл "Лысаков. Основы программирования" внутри архива находится в следующих папках: Лекции 2017, Лекции 2017. PDF-файл из архива "Лекции (2017)", который расположен в категории "". Всё это находится в предмете "программирование" из 2 семестр, которые можно найти в файловом архиве НГУ. Не смотря на прямую связь этого архива с НГУ, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 5 страницы из PDF
Цикл while2.8.Цикл while — это цикл с предусловием, то есть перед каждойитерацией проверяется условие, и только если оно истинно, то происходитвыполнение тела цикла. Он имеет следующий вид:Массивы данныхВ случае, если программы обрабатывает множество однотипныхданных, именовать каждую переменную не только неудобно, но порой ипросто невозможно из-за их большого количества. Для обработкиwhile (выражение условия цикла)однотипныхданныхприменяютсямассивы,которыепозволяюткомпоновать переменные.Тело циклаНаиболее наглядными примерами применения массивов являютсяПриведем фрагмент кода, который также распечатывает все числа,которые делятся на 2 до введенного пользователем значенияi = 0;while(i <= Max){if(i%2 == 0)cout << i << endl;задачи статистической обработки данных.
Также можно упомянутьобработку векторов различной размерности.Для определения массива необходимо указать, какой тип будут иметьего элементы, и количество этих элементов:int mas[10];Таким образом, определен одномерный массив, состоящий из целыхi++;чисел, имеющий 10 элементов. Элементы в массиве нумеруются начиная}с 0, поэтому в приведенном примере массив содержит элементы сКак видно из примера, условие цикла записывается в более наглядномвиде, чем при использовании for. Но при таком описании довольно частовозникают ошибки связанные с тем, что необходимо явно описыватьномерами от 0 до 9.
Обращаться к его элементам следует следующимобразом:mas[i]Ниже приведен фрагмент кода, в котором пользователь задает 10инкрементацию счетчика цикла.значений, а программа выводит их сумму.2.7.3. Цикл do-whileЦикл do — это цикл с постусловием, то есть проверка условия циклапроисходит после каждой итерации. Это обеспечивает, по крайней мере,одну итерацию выполнения вне зависимости от условий. Он имеетследующий вид:doТело циклаwhile (выражение условия цикла);37int mas[10];int i;for(i=0; i < 10; i++){cout << "a[" << i << "] = ";cin >> mas[i];}int Sum = 0;for(i=0; i < 10; i++)38www.phys.nsu.ruSum += mas[i];Необходимо помнить, что в отличие от объявления переменных, вcout << "Summa = " << Sum << endl;Из примера видно, что работа с элементами массивов мало чемотличается от работы с любыми другими переменными.2.9.Функциисписке параметров функции недопустимо перечислять несколько именпеременных одного типа – для каждой переменной должен быть явноуказан тип.Реализация функции всегда должна происходить после ее объявления.В ряде случаев (например когда вся программа состоит только из одногофайла), допускается не делать отдельных объявлений функций.Теперь некоторые пояснения к самой программе.
Любая программа наязыке С, состоит из одной или более "функций", указывающихфактические операции компьютера, которые должны быть выполнены. Посвоей сути, в функции перечисляется порядок действий, а также заводятсяпеременные для хранения данных.Функция с именем main – особенная. Именно выполнение этойфункции и происходит при запуске любой программы. Это означает, чтокаждая программа должна в каком-то месте содержать функцию с именемmain. Для выполнения определенных действий функция main обычнообращается к другим функциям, часть из которых находится в той жесамой программе, а часть - в библиотеках, содержащих ранее написанныефункции.Действия, выполняемые при обращении к функции, задает ее тело,которое выделяется фигурными скобками { }.
Структура определенияфункции имеет вид:Тип_результата Имя функции (список_параметров);Реализация функции происходит следующим образом:Тип_результата Имя_Функции (список_параметров){...}39Помните, что объявление (или реализация, если объявления несуществут) должно производится до того места, где функция вызывается!То есть если создается пользовательская функция, которая будетвызываться из функции main, то она должна быть описана до функцииmain.Если не указан тип возвращаемого значения, по умолчанию считается,что функция возвращает тип int.
Для возврата значения используетсякоманда return (она может быть выполнена в любом месте кода тела, новыполнение функции после этого заканчивается). Если функция невозвращает никаких значений, то используется специальный тип void.В качестве примера рассмотрим программу, в которой описанапользовательская функция для вычисления дискриминанта квадратногоуравнения, видаax 2 + bx + c = 0 :#include <iostream>using namespace std;double Discr_Calc(int a, int b, int c){double D;D = b*b - 4*a*c;return D;}void main(){40www.phys.nsu.ruint a, b, c;double D;a = 1;b = 5;c = 3;переменная с именем D является глобальной. При этом к ней обращаютсядве различные функции, для которых эта переменная является общей.#include <iostream>using namespace std;D = Discr_Calc(a, b, c);}double D = 0;cout << "D = " << D << endl;void Discr_Calc(int a, int b, int c){D = b*b - 4*a*c;}Функция может возвращать только одно значение.Обычно функции используются для написания более простых длячтения программ.
Так программа, которая содержит только функциюvoid main(){int a, b, c;a = 1; b = 5; c = 3;main(), состоящую из 13 окон теста, очень трудна для понимания, темболее сторонним человеком. Поэтому часто используется негласноесоглашение, что текст любой функции не должен превышать по размеруDiscr_Calc(a, b, c);cout << "D = " << D << endl;одного экрана — размера, которые человек может охватить взглядом. Привыборе имен функций программист также должен руководствоваться темпринципом, чтобы постороннему человеку стало интуитивно понятно, чтоделает функция.}2.10.2.Локальные переменныеЛокальные переменные обладают ограничением области видимости –2.10.
Локальные и глобальные переменныеони видны и доступны только внутри того блока, в котором они созданы.Все создаваемые в программе переменные, имеют определеннуюВажно помнить, что локальные переменные перестают существовать приобласть видимости. Для переменных выделяют две основных областивидимости: локальные и глобальные.выходе из блока, в котором они были объявлены.Блоками, ограничивающими видимость, могут являться функции, либопросто набор действий, выделенных в отдельное тело.2.10.1.Глобальные переменныеТаким образом, если бы в тесте предыдущей программы описатьфункцию вычисления дискриминантом следующим образом:Из названия этого класса переменных становится понятно, что онидоступны всем.
Под всеми подразумеваются все функции проекта.Для того чтобы переменная была глобальная, она должна бытьобъявлена вне функций. Ниже приведен текст программы, в которойvoid Discr_Calc(int a, int b, int c){double D;D = b*b - 4*a*c;}4142www.phys.nsu.ruТо в ней существует собственная локальная переменная D, котораяПеременные, перечисленные в списке параметров функции, такжеперестает существовать, как только исполнение программы выходит изявляются локальными для этой функции. Их отличие от описанных в телеэтой функции. Другими словами, локальные переменные перекрываютфункции только в том, что они будут гарантированно инициализированы кглобальные, в результате чего, выполнение описанный программы смоменту вызова функции.такими изменениями приведет к тому, что на экран всегда будетвыводиться НОЛЬ!Нижеприведенпримерещеоднойнеправильнонаписаннойпрограммы, которая не сможет быть даже скомпилирована.#include <iostream>using namespace std;void Discr_Calc(int a, int b, int c){D = b*b - 4*a*c;}void main(){int a, b, c;double D;a = 1;b = 5;c = 3;Discr_Calc(a, b, c);cout << "D = " << D << endl;}В приведенной программе ошибка заключается в том, что переменная сименем D определена в функции main(), и не существует за ее пределами.Таким образом, в функции Discr_Calc() происходит обращение кнесуществующей переменной D.4344www.phys.nsu.ru3.
Работа с динамической памятьюРабота с динамической памятью позволяет программисту решатьзадачи с неизвестным количеством исходных данных, позволяя добавлятьновые возможности в функционал программ.Основными понятиями для работы с динамической памятью являютсяуказатели и ссылки. Именно с помощью переменных этих типовПри определении указателя необходимо обозначать, на какой типданных указывает эта переменная. Здесь и далее при объявленииуказателей будем использовать символ «р» в названиях указателей. Этопозволит легко отличать в тексте программы указатели, от собственнопеременных. Примеры определения указателя и присваивания емузначения:int Ch = 14;int* pCh = NULL;pCh = &Ch;осуществляется управление памятью, ее выделение и освобождение.3.1.Указатели и работа с нимиКаждая переменная представляет собой именованный участок памятиПК, в котором хранится ее значение.
При этом, чтобы получить доступ кЧтобы получить значение, которое находится по указанному адресу,применяется операция разыменования – «*»:значению переменной, необходимо обратиться к ней по ее имени.int Ch = 14;int* pCh = &Ch;int a;a = 1;cout << *pCh;Для того чтобы получить значение адреса в памяти, по которому3.2.Арифметика указателей и массивынаходится значение конкретной переменной, необходимо произвестиВ языке С допустимы только две арифметические операции надунарную операцию разыменования &. Выражение &a позволяетуказателями: суммирование и вычитание.