Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
4. ЛИНЙНЫЕ ПРОГРАММЫ
Замечание:
Пустой оператор — ;
Пустой оператор — это оператор, состоящий только из точки с запятой. Он может появиться в любом месте программы, где по синтаксису требуется оператор.
Составной оператор –{...}
Действие составного оператора состоит в последовательном выполнении со-
держащихся в нем операторов, за исключением тех случаев, когда какой-либо
оператор явно передает управление в другое место
программы.
Функция getch() из библиотеки conio.h не имеет параметров и используется
для ввода с клавиатуры отдельного символа нажатой клавиши.
4.1. ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ В С++
Все переменные в языке C++ должны быть объявлены (определены) перед использованием. При использовании в программе ранее не объявленной перемен-
ной компилятор выдаст сообщение об ошибке.
Объявление переменной имеет следующий формат:
<имя_типа><идентификатор>;
Примеры:
int i; char p;double uspex;int a,age,kg,sum;
Инициатор задает начальное значение или список начальных значений, при-
сваиваемых переменной при объявлении.
Примеры инициализации переменных:
int i=5; float f=12.35; char ch='a';
Переменная любого типа может быть объявлена немодифицируемой, что
достигается добавлением ключевого слова const к спецификатору типа. Объекты с типом const представляют собой данные, используемые только для чтения, т. е.
этой переменной не может быть присвоено новое значение: напри-
мер, const int a=5.Отметим, что если после слова const отсутствует спецификатор типа, то подразумевается спецификатор типа int. Если ключевое слово const стоит
перед объявлением составных типов (массив, структура, объединение), то это при­водит к тому, что каждый элемент также должен являться немодифицируемым,
т. е. значение ему может быть присвоено только один раз.
Ключевое слово void означает отсутствие типа.
21
22
4.2. ПОТОКОВЫЙ ВВОДА-ВЫВОДА
В C++ за ввод и вывод информации отвечают потоки cin и cout. Они нахо-
дятся в библиотеке с заголовочным файлом . Обмен информацией с ЭВМ предпо­лагает использование определенных средств ввода-вывода. В ЭВМ основным средством ввода является клавиатура, вывода — дисплей.
Ввод информации осуществляется с помощью потока cin. В общем виде за-
писывается так:
cin>>a1>>a2>>a3>>...>>an;
Где a1, a2,..., an– имена переменных или строковые константы, которые нужно ввести в память компьютера. <<– операция извлечения.
Например:
float A; int B; char C;
cin >> A;
cin >> B;
cin >> C;
Вывод информации осуществляется с помощью потока cout. В общем виде
записывается так:
cout<<a1<<a2<<a3<<...<<an;
Где a1, a2,..., an– имена переменных или строковые константы, которые нужно вывести на монитор. >>– операция вставки.
Например:
cout << «Выходное значение: « << C;
В списке вывода этих операторов может быть либо одно выражение, либо
последовательность таких выражений, аналогично функции cin.
Замечание:
Директива — это указание компилятору языка С++ выполнить то или иное
действие в момент компиляции программы. Директивы препроцессора начинают-
ся со знака «диез» (#), который должен быть самым первым символом строки.
Комментарии в программе пишутся после// или между /* ... */ В первом слу-
чае их размер не должен превышать размера строки, во втором размер неограничен.
В С и С++ любая последовательность операторов заканчивается ';' — симво­лом точка с запятой.
4.3. СТРУКТУРА ПРОГРАММЫ
Любая программа, написанная на языке С++, представляет собой некоторую совокупность функций и обязательно должна содержать одну и только одну так называемую главную функцию. В случае консольного приложения главная функ-
ция имеет предопределенное имя main.
Сама по себе программа на языке С++ представляет собой текстовый файл, в котором представлены конструкции и операторы данного языка в заданном про-
граммистом порядке.
Кроме того, что в С++ предусмотрено объявление своих функций, также можно воспользоваться функциями определёнными в стандартных заголовочных
файлах языка программирования С++. Чтобы воспользоваться функцией, опреде-
лённой в заголовочном файле, нужно его подключить. Например, чтобы восполь­зоваться функцией, которая возводит некоторое число в степень, нужно подклю-
чить заголовочный файл <math> и в запустить функцию pow() в теле програм­мы. Структура программы на языке С++ выглядит примерно так:
Подключаемые внешние файлы (*.h, *.cpp) Обьявление глобальных переменных и функций int main(список аргументов)
{ последовательность операторов } тип_возвращаемого_значения имя_функции (список входных параметров) { последовательность операторов }
Главная функция программы
Функция main() — это главная функция программы, присутствие этой
функции в программе обязательно. Практически весь основной код программы должен быть описан в этой функции. Функцию нужно писать только малыми ла-
тинскими буквами, после слова main обязательно должны присутствовать круглые скобки — (). Основной код программы должен размещаться внутри фигурных скобок {}, которые пишутся сразу после main(). Всё что находится внутри фигур­ных скобок называется «телом функции».
Если перед именем главной функции программы будет написано сло-
во integer, то это означает, что функция, по завершению работы, должна вернуть
целое число, то есть целочисленный результат. Для возврата результата обяза-
тельно должно присутствовать зарезервированное слово return, после которого нужно написать переменную типа integer или целое число.
Если перед именем главной функции программы будет написано слово void,
то это означает, что функция ничего возвращать не будет и не должна. Ниже при-
ведены примеры написания главной функции программы.
23
24
int main() { <тело функции> return 0; }
main() {
<тело функ­ции>
return 0; }
void main() {
<тело функ­ции>
}
Пример простейший программы на C++:
/*first.cpp Первая программа*/ #include <iostream.h> int main() { cout << «Язык С++» << endl;
return 0; }
Строка 1 начинается с символов /*, которые показывают, что данная строка
является комментарием. Компилятор игнорирует комментарии и поэтому они предназначены только для того, чтобы программу можно было легче читать и по-
нимать.
Директива #include используется для подключения файла «iostream.h», кото-
рый находится в стандартной библиотеке языка и отвечает за ввод и вывод данных
на экран. Все то, что находится внутри фигурных скобок функции int main() {} бу­дет автоматически выполняться после запуска программы.
Строка cout << «Язык С++» << endl; говорит программе выводить сообще­ние с текстом «Язык С++» на экран.
Оператор cout предназначен для вывода текста на экран командной строки. После него ставятся две угловые кавычки (<<). Далее идет текст, который должен выводиться. Он помещается в двойные кавычки. Оператор endl переводит строку на уровень ниже.
Если в процессе выполнения произойдет какой-либо сбой, то будет сгенери-
рован код ошибки, отличный от нуля. Если же работа программы завершилась без
сбоев, то код ошибки будет равен нулю. Команда return 0 необходима для того, что- бы передать операционной системе сообщение об удачном завершении программы.
5. УПРАВЛЯЮЩИЕ СТРУКТУРЫ
Полная форма оператора
Краткая форма оператора
Вложенная форма оператора
if ( условие )
{
оператор_1;
оператор_2;
if ( условие ) оператор_1;
if ( условие1 )
{
if ( условие2 ) оператор_1;
else оператор_2;
Замечание:
Для организации разветвлений можно использовать оператор ? :
Условие? Выражение 1: Выражение 2;
Операция работает так. Если Условие истинно, то результатом бу­дет Выражение 1, в противном случае Выражение 2.
Например, оператор y=x<0 ? –x: x; записывает в переменную y модуль числа х.
5.1. УСЛОВНЫЙ ОПЕРАТОР IF-ELSE
В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех структур, называемых следова-
нием, ветвлением и циклом. Их называют базовыми конструкциями структурного программирования.
Следованием называется конструкция, представляющая собой последова- тельное выполнение двух или более операторов (простых или составных).
Ветвление задает выполнение либо одного, либо другого оператора в зави­симости от выполнения какого-либо условия.
Цикл задает многократное выполнение оператора (см. рис. 1).
Особенностью базовых конструкций является то, что любая из них имеет только один вход и один выход, поэтому конструкции могут вкладываться друг в
друга произвольным образом.
Оператор ветвления if в зависимости от условия позволяет выбрать одно из двух возможных продолжений программы.
Синтаксис:
25
26
Полная форма оператора
Краткая форма оператора
Вложенная форма оператора
...
}
else
{
оператор_3;
оператор_4;
...
}
}
else
{
if (условие3) оператор_3;
else оператор_4;
}
Здесь условие — это логическое выражение, переменная или константа.
Семантика: сначала вычисляется значения выражения, записанного в ви- де условия.
Если оно имеет значение истина (true), выполняется первый
блок: оператор_1, оператор_2.
В противном случае (значение ложное (false)) выполняется второй
блок: оператор_3, оператор_4.
Если вместо одного необходимо выполнить несколько операторов, то они
заключаются в фигурные скобки.
В операторе if слово else может отсутствовать.
В операторе if — else непосредственно после ключевых слов if и else долж-
ны следовать другие операторы. Если хотя бы один из них является оператором if,
его называют вложенным. Согласно принятому в языке Си соглашению слово else
всегда относится к ближайшему предшествующему ему if.
Замечание:
Оператор break служит для выхода из тела switch.
5.2. ОПЕРАТОР ВАРИАНТА SWITCH
Как мы уже выяснили, оператор if позволяет сделать выбор одного из двух возможных продолжений. Но это не всегда удобно. Когда счёт вариантов выбора идёт на десятки , то применение if становится неудобным. Для таких случаев ре-
комендуют использовать специальный оператор switch.
Синтаксис:
switch (выражение) { case константа_1: операторы_1;
break;
case константа_2: операторы_2;
break;
........ ........
default: операторы_default; }
Семантика.
Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается операторам, помеченным константным выражением, значение которого совпало с вычисленным, после чего последовательно выполняются все остальные ветви, если выход из переключателя
явно не указан.
Все константные выражения должны иметь разные значения, но быть одно­го и того же целочисленного типа. Несколько меток могут следовать подряд. Если совпадения не произошло, выполняются операторы, расположенные после сло-
ва default (а при его отсутствии управление передается следующему за switch оператору).
Пример (программа реализует простейший калькулятор на 4 действия):
#include <iostream> using namespace std;
int main() { int a, b, res; char op; cout << «\nВведите 1й операнд : «; cin >> a; cout << «\nВведите знак операции : «; cin >> op; cout << «\nВведите 2й операнд : «; cin >> b;
27
28
bool f = true; switch (op) { case '+': res = a + b; break; case '-': res = a — b; break; case '*': res = a * b; break; case '/': res = a / b; break; default: cout << «\nНеизвестная операция»; f = false; } if (f) cout << «\nРезультат : « << res; return 0; }
Выход из переключателя обычно выполняется с помощью операто-
ров break или return.
Замечание:
Операторы можно подразделить на: исполняемые — с их помощью реализу­ется алгоритм задачи, иописательные, необходимые для определения типов пользователя.
Исполняемые операторы можно разбить на: простые и структурированные.
Структурированные операторы — это операторы ветвление (if), выбора
(switch), цикла (for, while,do).
5.3. ОПЕРАТОРЫ ЦИКЛА:FOR, WHILE,DO WHILE
Цикл — это повторение одного и того же участка кода в программе. После-
довательность действий, которые повторяются, называют телом цикла. Один про-
ход цикла — это шаг или итерация. Переменные, изменяющиеся внутри цикла и влияющие на его окончание, называются параметрами цикла.
В C++ предусмотрены три оператора, реализующих циклический процесс:
while, do..while и for
Рассмотрим каждый из них.
Общий вид цикла for:
Оператор с предусловием: (while)
Цикл с посту-
словием:
(do…while)
for (инициализация;условие;измен ение)
{
оператор_1; оператор_2;
…
оператор_n; }
while (условие) {
оператор_1; оператор_2;
…
оператор_n; }
do {
оператор_1; оператор_2;
…
оператор_n; }
while условие;
Цикл for
Если известно точное количество действий (итераций) цикла, то можем ис-
пользовать цикл for.
Семантика:
1. Инициализация используется для объявления и присвоения начальных
значений величинам, используемым в цикле. В этой части можно записать не-
сколько операторов, разделенных запятой.
2. Вычисляется выражение, задающее условие окончания цикла. Если усло-
вие истинно, то выполняются операторы тела цикла.
3. После выполнения блока производится приращение счетчика и снова
проверяется условие. Если оно по-прежнему истинно, блок кода выполняется по-
вторно. Этот процесс продолжается до тех пор, пока не перестает выполняться
условие.
Пример кода.
Напишем программу, которая будет считать сумму всех чисел от 1 до 10.
#include <iostream> using namespace std;
int main() { int i; // счетчик цикла int sum = 0; // сумма чисел от 1 до 10.
for (i = 1; i <= 10; i++) // задаем начальное значение 1, конечное 10 и задаем шаг цикла — 1. { sum = sum + i; }
cout << «Сумма чисел от 1 до 10 = « << sum << endl; return 0; }
29
30
Если скомпилировать этот код и запустить программу, то она покажет нам
ответ: 55. Это и есть сумма всех целых чисел от 1 до 10.
Заметьте, что конечное значение счетчика задано нестрогим неравенством
( <= — меньше либо равно), поскольку, если поставить знак меньше, то цикл про-
извел бы 9 итераций, т.е. на одну меньше, чем требуется. Значение шага цикла за-
дано равное единице. i++ — это тоже самое, что и i = i + 1.
В теле цикла, при каждом проходе программа увеличивает значение пере-
менной sum на единицу. Еще один очень важный момент — в начале программы переменной sum присвоенно значение нуля. При объявлении переменной без ее инициализации эта переменная будет хранить «мусор».
Естественно к мусору мы ничего прибавить не можем. Некоторые компиля-
торы, такие как gcc, инициализирует переменную нулем при ее объявлении.
Цикл while
Когда мы не знаем, сколько итераций должен произвести цикл, нам понадо-
бится цикл while или do...while.
Семантика:
1. Вычисляется значение условия.
2. Если условие истинно, то выполняются операторы тела цикла и повторя-
ется шаг 1.
3. Если условие ложно, то цикл завершается и происходит переход к следу-
ющему за while оператору.
Данный цикл будет выполняться, пока условие, указанное в круглых скоб-
ках является истиной.
Решим ту же задачу с помощью цикла while. Хотя здесь мы точно знаем,
сколько итераций должен выполнить цикл, очень часто бывают ситуации, когда
это значение неизвестно.
Ниже приведен исходный код программы, считающей сумму всех целых чи-
сел от 1 до 10.
#include <iostream> using namespace std;
int main() {
int i = 0; // инициализируем счетчик цикла. int sum = 0; // инициализируем счетчик суммы. while (i < 10) { i++; sum += i; } cout << «Сумма чисел от 1 до 10 = « << sum << endl; return 0; }
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]