Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРограмирование 1 блок.docx
Скачиваний:
6
Добавлен:
31.07.2019
Размер:
194.07 Кб
Скачать

22. Возможности использования оператора цикла for.

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i. Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i, выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. С каждой итерацией мы подходим к нему все ближе и ближе. С другим принципом вычислений в программировании – рекурсией – мы познакомимся в разделе, описывающем функции.

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

int sum = 0;

int i = 1;

for (; i <= 100; ) {

sum = sum + i;

i = i + 1;

}

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:

int sum = 0;

int i = 1;

for (; ;) {

if (i > 100)

break;

sum = sum + i;

i = i + 1;

}

В последнем примере мы опять встречаем оператор break. Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue. Оператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;

for (int i = 1; i <= 100; i = i+1) {

if ( i % 7 == 0)

continue;

sum = sum + i;

}

23. Операторы циклы while и do while.

Цикл while в C++

Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

// форма записи цикла while

while (/*условие продолжения цикла while*/)

{

/*блок операторов*/;

/*управление условием*/;

}

Условие продолжения цикла должно быть истинно "true", как только условие стало ложным, выполняется выход из цикла. Также как и в условных операторах выбора, фигурные скобочки могут опускаться в том случае, если тело цикла - это один оператор. Но как правило в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.

Рассмотрим применение цикла while на примере движения автомобиля. На псевдокоде, то это будет так:

// Пока скорость движения автомобиля меньше 60 км/ч, продолжать наращивать скорость.

Истинным условием цикла, в данном случае, является скорость автомобиля меньше 60 км/ч, а ложным - скорость автомобиля больше или равно 60 км/ч. Повторение цикла будет продолжаться до тех пор пока скорость автомобиля не станет больше или равно 60 км/ч, после наступления этого момента условие цикла станет ложным, и программа выйдет из цикла. Рассмотрим фрагмент кода на C++ с циклом while решающим поставленную задачу.

int speed = 5; // начальная скорость автомобиля

while ( spped < 60 ) // заголовок цикла while

speed += 10; // тело цикла

Для начала в строке 1 была объявлена и инициализирована переменная speed. В строке 2 программа проверяет условие цикла while, 5 < 60 = true. Программа входит в цикл и выполняет оператор в строке 3. Теперь уже speed = 15. Опять выполняется проверка 15 < 60 = true. Условие истинно, значение в переменной изменяется, speed = 25. Таким образом, выполняются последовательные повторения цикла, переменная speed ещё принимает такие значения: 35, 45, 55, 65. Последнее изменение переменной speed приводит к тому, что условие в цикле while становится ложным 65 < 60 = false, и производится выход из цикла while. Таким образом, выполнилось 6 повторений, при этом speed = 65; - с таким значением переменной закончилась работа цикла while. Давайте запрограммируем эту задачу, и убедимся в достоверности всего выше сказанного.

// while.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

int speed = 5, count = 1;

while ( speed < 60 )

{

speed += 10; // приращение скорости

cout << count <<"-speed = " << speed << endl;

count++; // подсчёт повторений цикла

}

system("pause");

return 0;

}

Итак, в строке 14 добавил переменную-счётчик, для подсчёта прохождений цикла. Тело цикла увеличилось, поэтому пришлось поставить фигурные скобочки.

Цикл do while в C++

Цикл do while отличается от цикла while тем, что в цикле do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности цикл do while называют циклом с постусловием. Таким образом, если условие цикла do while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while выполнится. В итоге цикл do while отличается от цикла while структурой. Если в цикле while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while работает с точностью да наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while, хотя бы раз, выполнится.

// форма записи оператора цикла do while:

do // начало цикла do while

{

/*блок операторов*/;

}

while (/*условие выполнения цикла*/); // конец цикла do while

В начале цикла do while пишется зарезервированное слово do, после идут фигурные скобочки, которые можно опускать, в случае использования одного оператора в теле цикла do while. После закрывающей фигурной скобочки, обозначающей конец тела цикла do while, стоит условие цикла do while, после которого обязательно нужно ставить точку с запятой. Рассмотрим программу на С++ с циклом do while, которая выполняет некоторые транзакции с денежным счётом в банке.

// do_while.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

int main(int argc, char* argv[])

{

srand(time(0));

int balance = 8; // баланс

do // начало цикла do while

{

cout << "balance = " << balance << endl; // показать баланс

int removal = rand() % 3; // переменная, для хранения вычитаемого значения

cout << "removal = " << removal << endl; // показать вычитаемое значение

balance -= removal; // управление условием

}

while ( balance > 0 ); // конец цикла do while

system("pause");

return 0;

}

строке 11 объявлена переменная balance, она отвечает за остаток денежных средств на счету. С 12-й по 19-ю строки записан цикл do while. В цикле do while выполняются все транзакции со счётом balance, а именно - перевод денежных средств на какой-то другой счёт, строка 17. Строка 14 показывает остаток денежных средств на счету balance. В строке 15 объявлена переменная, в которой хранится вычитаемое значение, причём это значение генерируется случайно в интервале [0;2]. Переменная removal один раз объявляется в теле цикла do while, и каждый раз при повторении цикла эта переменная не переобъявляется. А вот её значение меняется, в зависимости от того, какое число сгенерировалось. В строке 19 записано условие цикла do while, как только условие станет ложным, программа передаст управление следующему оператору, после цикла do while, строка 20.

24. Приоритет операций.

25. Понятие идентификатора, переменной.

Имена

Для символического обозначения величин, имен функций и т.п. используются имена или идентификаторы .

Идентификаторы в языке Си++ – это последовательность знаков, начинающаяся с буквы или знака подчеркивания. В идентификаторах можно использовать заглавные и строчные латинские буквы, цифры и знак подчеркивания. Длина идентификаторов произвольная. Примеры правильных идентификаторов:

abc A12 NameOfPerson BYTES_PER_WORD

Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и строчные буквы различаются. Примеры неправильных идентификаторов:

12X a-b

Ряд слов в языке Си++ имеет особое значение и не может использоваться в качестве идентификаторов. Такие зарезервированные слова называются ключевыми.

Список ключевых слов:

№ п/п Ключевое слово Описание

1 and альтернатива оператору &&

2 and_eq альтернатива оператору &=

3 asm вставить код на ассемблере

4 auto объявить локальную переменную

5 bitand альтернатива оператору bitwise &

6 bitor альтернатива оператору |

7 bool объявить булеву переменную

8 break выйти с цикла

9 case определенная ветка в операторе ветвления switch

10 catch обработать исключение от throw

11 char объявить символьную переменную

12 class объявить класс

13 compl альтернатива оператору ~

14 const объявить неизменяемые данные или функцию, которая не изменяет данных

15 const_cast приведение типа от константной переменной

16 continue пропустить код до конца цикла и начать новую итерацию

17 default вариант по умолчанию в switch

18 delete освобождение памяти, выделенной new

19 do оператор цикла

20 double объявить вещественное число двойной точности

21 dynamic_cast выполнить приведение типов во время выполнения

22 else ветка оператора if, которая выполняется при ложном условии

23 enum создание перечисляемого типа

24 explicit использовать данный конструктор только при полном соответствии типов

25 export позволить разделить объявление и реализацию шаблона

26 extern указание компилятору, что переменная объявлена в другом файле

27 false константа для ложного значения булевой переменной

28 float объявить вещественную переменную

29 for оператор цикла

30 friend разрешить другим функциям доступ к приватным данным класса

31 goto безусловный переход

32 if оператор условия

33 inline оптимизация вызовов для функций (встраиваемые функции)

34 int объявить переменную целого типа

35 long объявить следующий тип длинным

36 mutable перекрыть константность

37 namespace определить новое пространство имен

38 new выделить динамическую память под новую переменную

39 not альтернатива оператору !

40 not_eq альтернатива оператору !=

41 operator создание перегруженных операторов

42 or альтернатива оператору ||

43 or_eq альтернатива оператору |=

44 private объявить приватное поле класса

45 protected объявить защищенное поле класса

46 public объявить общее поле класса

47 register запрос компилятору на оптимизацию переменной по скорости

48 reinterpret_cast изменить тип переменной

49 return возврат из функции

50 short объявить короткое целое

51 signed сделать данный целый тип знаковым

52 sizeof возвратить размер переменной или типа

53 static создать статическую переменную

54 static_cast сделать не полиморфное приведение типов

55 struct определить новую структуру

56 switch оператор ветвления

57 template создать шаблонную функцию

58 this указатель на текущий объект

59 throw выбросить исключение

60 true константа для истинного значения булевой переменной

61 try выполнить код, который может выкинуть исключение

62 typedef создание нового типа с существующего

63 typeid задать описание объекта

64 typename объявить класс или иной новый тип данных

65 union структура, содержащая несколько переменных в одной области памяти

66 unsigned объявить беззнаковое целое

67 using импортировать полностью или частично указанное пространство имен внутрь текущего блока

68 virtual создать виртуальную функцию

69 void объявить функцию или переменную без типа

70 volatile предупреждение компилятору, что переменная может измениться сама

71 wchar_t объявить переменную типа wide-character

72 while оператор цикла

73 xor альтернатива оператору ^

74 xor_eq альтернатива оператору ^=

В следующем примере

int max(int x, int y)

{

if (x > y)

return x;

else

return y;

}

max, x и y – имена или идентификаторы. Слова int, if, return и else – ключевые слова, они не могут быть именами переменных или функций и используются для других целей.

Переменные

Программа оперирует информацией, представленной в виде различных объектов и величин. Переменная – это символическое обозначение величины в программе. Как ясно из названия, значение переменной (или величина, которую она обозначает) во время выполнения программы может изменяться.

С точки зрения архитектуры компьютера, переменная – это символическое обозначение ячейки оперативной памяти программы, в которой хранятся данные. Содержимое этой ячейки – это текущее значение переменной.

В языке Си++ прежде чем использовать переменную, ее необходимо объявить. Объявить переменную с именем x можно так:

int x;

В объявлении первым стоит название типа переменной int (целое число), а затем идентификатор x – имя переменной. У переменной x есть тип – в данном случае целое число. Тип переменной определяет, какие возможные значения эта переменная может принимать и какие операции можно выполнять над данной переменной. Тип переменной изменить нельзя, т.е. пока переменная x существует, она всегда будет целого типа.

Язык Си++ – это строго типизированный язык. Любая величина, используемая в программе, принадлежит к какому-либо типу. При любом использовании переменных в программе проверяется, применимо ли выражение или операция к типу переменной. Довольно часто смысл выражения зависит от типа участвующих в нем переменных.

Например, если мы запишем x+y, где x – объявленная выше переменная, то переменная y должна быть одного из числовых типов.

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

Переменной можно присвоить какое-либо значение с помощью операции присваивания. Присвоить – это значит установить текущее значение переменной. По-другому можно объяснить, что операция присваивания запоминает новое значение в ячейке памяти, которая обозначена переменной.

int x; // объявить целую переменную x

int y; // объявить целую переменную y

x = 0; // присвоить x значение 0

y = x + 1; // присвоить y значение x + 1,

// т.е. 1

x = 1; // присвоить x значение 1

y = x + 1; // присвоить y значение x + 1,

// теперь уже 2

26. Задание констант в программе.

Константы

Константами называются перечисление величин в программе. В языке программирования С разделяют четыре типа констант: целые константы, константы с плавающей запятой, символьные константы и строковыми литералы.

Целая константа: это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину в одной из следующих форм: десятичной, восьмеричной или шестнадцатеричной.

Десятичная константа состоит из одной или нескольких десятичных цифр, причем первая цифра не должна быть нулем (в противном случае число будет воспринято как восьмеричное).

Восьмеричная константа состоит из обязательного нуля и одной или нескольких восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так как эти цифры не входят в восьмеричную систему счисления).

Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шеснадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

Примеры целых констант:

Десятичная Восьмеричная Шестнадцатеричная

константа константа константа

16 020 0x10

127 0117 0x2B

240 0360 0XF0

Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом). Например: -0x2A, -088, -16 .

Каждой целой константе присваивается тип, определяющий преобразования, которые должны быть выполнены, если константа используется в выражениях. Тип константы определяется следующим образом:

- десятичные константы рассматриваются как величины со знаком, и им присваивается тип int (целая) или long (длинная целая) в соответствии со значением константы. Если константа меньше 32768, то ей присваивается тип int в противном случае long.

- восьмеричным и шестнадцатеричным константам присваивается тип int, unsigned int (беззнаковая целая), long или unsigned long в зависимости от значения константы согласно табл 5.

Для того чтобы любую целую константу определить типом long, достаточно в конце константы поставить букву "l" или "L". Пример:

5l, 6l, 128L, 0105L, OX2A11L.

Константа с плавающей точкой - десятичное число, представленное в виде действительной величины с десятичной точкой или экспонентой. Формат имеет вид:

[ цифры ].[ цифры ] [ Е|e [+|-] цифры ] .

Число с плавающей точкой состоит из целой и дробные части и (или) экспоненты. Константы с плавающей точкой представляют положительные величины удвоенной точности (имеют тип double). Для определения отрицательной величины необходимо сформировать константное выражение, состоящее из знака минуса и положительной константы.

Примеры: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2

Символьная константа - представляется символом заключенном в апострофы. Управляющая последовательность рассматривается как одиночный символ, допустимо ее использовать в языке программирования Смвольных константах. Значением символьной константы является числовой код символа. Примеры:

' '- пробел ,

'Q'- буква Q ,

'\n' - символ новой строки ,

'\\' - обратная дробная черта ,

'\v' - вертикальная табуляция .

Символьные константы имеют тип int и при преобразовании типов дополняются знаком.

Строковая константа (литерал) - последовательность символов (включая строковые и прописные буквы русского и латинского а также цифры) заключенные в кавычки (") . Например: "Школа N 35", "город Тамбов", "YZPT КОД".

Отметим, что все управляющие символы, кавычка ("), обратная дробная черта (\) и символ новой строки в строковом литерале и в языке программирования Смвольной константе представляются соответствующими управляющими последовательностями. Каждая управляющая последовательность представляется как один символ. Например, при печати литерала "Школа \n N 35" его часть "Школа" будет напечатана на одной строке, а вторая часть "N 35" на следующей строке.

Символы строкового литерала сохраняются в области оперативной памяти. В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.

Строковый литерал имеет тип char[] . Это означает, что строка рассматривается как массив языке программирования Смволов. Отметим важную особенность, число элементов массива равно числу символов в строке плюс 1, так как нулевой символ (символ конца строки) также является элементом массива. Все строковые литералы рассматриваются компилятором как различные объекты. Строковые литералы могут располагаться на нескольких строках. Такие литералы формируются на основе использования обратной дробной черты и клавиши ввод. Обратная черта с символом новой строки игнорируется компилятором, что приводит к тому, что следующая строка является продолжением предыдущей. Например:

"строка неопределенной \n

длины"

полностью идентична литералу

"строка неопределенной длинны" .

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