Знаки пунктуации и специальные символы
Базовые компоненты программ
Здесь представлены базовые компоненты программ на С++. В их число входят типы данных, переменные, константы и выражения.
ИЗУЧАЕМЫЕ ПОНЯТИЯ
- Предопределенные типы данных в С++ включают в себя типы int, char,float, double и void. В языке С++ гибкость типов данных увеличивается благодаря применению модификаторов типов. Эти модификаторы изменяют точность представления и диапазон значений переменных. Модификаторами типа являются signed, unsigned, short и long.
- Идентификаторы в С++ могут иметь длину до 32 символов и
должны начинаться с буквы или подчеркивания. Последующие символы
идентификатора могут быть буквой, цифрой или подчеркиванием. Идентификаторы С++ чувствительны к регистру. Ограничение на 32 символа может быть, однако, изменено путем установки опций компилятора.
- Директива #include является специальной командой компилятора. Она предписывает компилятору включить в программу содержимое определенного файла, как если бы вы сами ввели его в текущий исходный файл.
- Объявление констант предусматривает использование директивы #define
для объявления констант, определенных при помощи макросов, или использование ключевого слова const для объявления формальных констант. Формальные константы требуют от вас определения их типа (значением по умолчанию является int), имени и ассоциированного с ними значения.
- Объявление переменной требует, чтобы вы задали ее тип и имя, С++ дает вам возможность инициализировать переменную при ее объявлении.
Вы можете объявить несколько переменных в одном операторе объявления.
- Арифметическими операциями являются +, -, *, / и % (деление по модулю).
- Арифметические выражения различаются по сложности. Самое простое выражение содержит единственный элемент данных (литерал, константу или переменную). Сложные выражения включают набор операций, функции, литералы, константы и переменные.
- Операции инкремента и декремента используются в префиксной и постфиксной формах. Язык С++ дает вам возможность применять эти операции к переменным, в которых хранятся символы, целые числа и даже числа с плавающей точкой.
- Арифметические операции присваивания дают вам возможность записывать более короткие арифметические выражения, в которых первый операнд является также переменной, принимающей результат вычислений.
- Оператор sizeof возвращает как для типов данных, так и для переменных
их размер в байтах.
- Механизм приведения типа дает вам возможность форсировать преобразование типа выражения.
- Операции отношений и логические операции дают вам возможность строить логические выражения.
- Булевы выражения объединяют операции отношений и логические операции для формулирования нетривиальных условий. Эти выражения позволяют программе принимать сложные решения.
- Условное выражение предлагает вам короткую форму для простого оператора if-else с двумя альтернативами.
Буквы и цифры
Множество символов С++ включает большие и малые буквы из английского алфавита и 10 десятичных арабских цифр:
-большие английские буквы:
A B C D E F G H I J K L M N O P Q R T U V W X Y Z
-малые английские буквы:
a b c d e f g h i j k l m n o p q r t u v w x y z
-десятичные цифры:
0 1 2 3 4 5 6 7 8 9
Буквы и цифры используются при формировании констант, идентификаторов и ключевых слов. Все эти конструкции описаны ниже. Компилятор С++ рассматривает одну и ту же малую и большую буквы как отличные символы. Если в данной записи использованы малые буквы, то замена малой буквы "a" на большую букву "A" сделает отличной данную запись от предшествующей.
Пробельные символы
Пробел, табуляция, перевод строки, возврат каретки, новая страница, вертикальная табуляция и новая строка- это сиволы, называемые пробельными, поскольку они имеют то же самое назначение, как и пробелы между словами и строками на печатной странице. Эти символы разделяют об"екты, определенные пользователем, такие, как константы и идентификаторы, от других об"ектов программы.
Символ CONTROL-Z рассматривается как индикатор конца файла. Компилятор игнорирует любой текст, следующий за символом CONTROL-Z.
Компилятор С++ игнорирует пробельные символы, если они не используются как разделители или как компоненты константы-символа или строковых литералов. Это нужно иметь в виду, чтобы дополнительно использовать пробельные символы для повышения наглядности программы
(например, для просмотра редактором текстов).
ESC- последовательности
ESC- последовательности- это специальные символьные комбинации, которые представляют пробельные символы и неграфические символы в строках и символьных константах.
Их типичное использование связано со спецификацией таких действий, как возврат каретки и табуляция, а также для задания литеральных представлений символов, таких как символ двойная кавычка. ESC-последовательность состоит из наклонной черты влево, за которой следует буква, знаки пунктуации ' " \ или комбинация цифр. В таблице приведен список ESC- последовательностей.
-------------------------------------------------
ESC- последовательность Наименование
-------------------------------------------------
\n Новая строка
\t Горизонтальная табу-
ляция
\v Вертикальная табуля-
ция
\b Пробел
\r Возврат каретки
\f Новая страница
\a Звонок(сигнал)
\' Одиночная кавычка
\" Двойная кавычка
\\ Наклонная черта влево
\ddd ASCII символ в восьми-
ричном представлении
\xdd ASCII символ в шестнад-
цатиричном представлении
Табл. ESC- последовательности
Если наклонная черта влево предшествует символу, не включенному в этот список, то наклонная черта влево игнорируется, а символ представляется как литеральный. пример, изображение \c представляет символ "c" в литеральной строке или константе-символе.
Последовательности \ddd и \xdd позволяют задать любой символ в ASCII (Американский стандартный код информационного интерфейса) как последовательность трех восьмеричных цифр или двух шестнадцатеричных цифр.
Например, символ пробела может быть задан как \010 или \x08. Код ASCII "нуль" может быть задан как \0 или \x0 . В восьмеричной ESC- последовательности могут быть использованы от одной до трех восьмеричных цифр. Например, символ пробела может быть задан как \10 . Точно так же в шестнадцатеричной ESC- последовательности могут быть пользованы от одной до двух шестнадцатеричных цифр. Так, шестнадцатеричная последовательность для символа пробела может быть задана как \x08 или \x8 .
Замечание:
Когда используется восьмеричная или шестнадцатеричная ESCпоследовательность в строках, то нужно полностью задавать все цифры ESC- последовательности (три цифры для восьмеричной и две цифры для шестнадцатеричной ESC- последовательностей). Иначе, если символ непосредственно следующий за ESC- последовательностью, случайно окажется восьмеричной или шестнадцатеричной цифрой, то он проинтерпретируется как часть последовательности. Например, строка \x7Bell при выводе на печать будет выглядеть как {ell , поскольку \x7B проинтерпретируется как символ левой фигурной скобки({) . Строка \x07Bell будет правильным представлением символа "звонок" с последующим словом Bell.
ESC- последовательности позволяют посылать неграфические управляющие символы к внешним устройствам. Например, ESC- последовательность\033 часто используется как первый символ команд управления терминалом и принтером. Неграфические символы всегда должны представляться ESC-последовательностями, поскольку, непосредственное использование в программах на Си неграфических символов будет иметь непредсказуемый результат. Наклонная черта влево (\) помимо определения ESC-последовательностей
используется также, как символ продолжения строки в препроцессорных определениях.
Если символ "новая строка" следует за наклонной чертой влево, то новая строка игнорируется и следующая строка рассматривается, как часть предыдущей строки.
Идентификаторы
Идентификаторы - это имена переменных, функций и меток, используемых в программе. Идентификатор создается об"явлением соответствующей ему переменной или функции. После этого его можно использовать в последующих операторах программы. Идентификатор- это последовательность из одной или более букв, цифр или подчерков(_), которая начинается с буквы или подчерка. Допускается любое число символов в идентификаторе, однако только первые 31 символ распознаются компилятором.
При использовании подчерков в идентификаторе нужно быть осторожным, поскольку идентификаторы, начинающиеся с подчерка, могут совпадать (войти в конфликт) с именами "скрытых" системных программ. Примеры идентификаторов:
temp1
toofpage
skip12
Компилятор С++ рассматривает буквы верхнего и нижнего регистров как различные символы. Поэтому можно создать отдельные независимые идентификаторы, которые совпадают орфографически, но различаются большими и малыми буквами. Например, каждый из следующих идентификаторов является уникальным:
add
ADD
Add
aDD
Компилятор не допускает идентификаторов, которые имеют ту же самую орфографию, что и ключевые слова.
Замечание:
По сравнению с компилятором, сборщик может в большей степени ограничивать количество и тип символов для глобальных идентификаторов, и в отличие от компилятора не делать различия между большими и малыми буквами. (Подробнее смотри руководство по пакету MSC).
Ключевые слова
Ключевые слова - это предопределенные идентификаторы, которые имеют специальное значение для компилятора С++. Их можно использовать только так, как они определены. Имена объектов программы не могут совпадать с названиями ключевых слов.
Список ключевых слов:
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof while
do if static volatile
Комментарии
Комментарий - это последовательность символов, которая воспринимается компилятором как отдельный пробельный символ или, другими словами, игнорируется.
Комментарий имеет следующую форму представления:
/*НН*/,
где НН может быть любой комбинацией символов из множества
представимых символов, включая символы новой строки, но исключая комбинацию */. Это означает, что комментарии могут занимать более одной строки, но не могут быть вложенными. Комментарии допускаются везде, где разрешены пробельные символы.
Компилятор игнорирует символы комментария, в частности, в комментариях допускается запись ключевых слов и зто не приведет к ошибке. Так как компилятор рассматривает комментарий как символ пробела, то комментарии не могут появляться внутри лексем.
Следующие примеры иллюстрируют некоторые комментарии:
/* Comments can separate and document
lines of a program. */
/* Comments can contain keywords such as for
and while */
/*******************************************
Comments can occupy several lines.
*******************************************/
Так как комментарии не могут содержать вложенных комментариев, то следующий пример будет ошибочным:
/* You cannot/* nest */ comments */
Компилятор распознает первую комбинацию */ после слова nest как конец комментария. Затем, компилятор попытается рабатывать оставшийся текст и выработает сообщение об ошибке. Чтобы обойти компиляцию комментариев больших размеров, нужно использовать директиву #if препроцессора.
Лексемы
Когда компилятор обрабатывает программу, он разбивает программу на группы символов, называемых лексемами. Лексема- это единица текста программы, которая имеет определенный смысл для компилятора и которая не может быть разбита в дальнейшем. Операции, константы, идентификаторы и ключевые слова, описанные в этом разделе,являются примерами лексем. Знаки пунктуации, такие как квадратные скобки ([]), фигурные скобки ({}), угловые скобки (<>), круглые скобки и запятые, также являются лексемами.
Границы лексем определяются пробельными символами и другими лексемами, такими как операции и знаки пунктуации. Чтобы предупредить неправильную работу компилятора, запрещаются пробельные символы между символами идентификаторов, операциями, состоящими из нескольких символов и символами
ключевых слов.
Когда компилятор выделяет отдельную лексему, он последовательно объединяет столько символов, сколько возможно, прежде чем перейти к обработке следующей лексемы. Поэтому лексемы, не разделенные пробельными символами, могут быть проинтерпретированы неверно.
Например, рассмотрим следующее выражение:
i+++j
В этом примере компилятор вначале создает из трех знаков плюс самую длинную из возможных операций (++), а затем обработает оставшийся знак +, как операцию сложения (+). Выражение проинтерпретируется как (i++)+(j), а не как (i)+(++j). В таких случаях необходимо использовать пробельные символы или круглые скобки, чтобы однозначно определить ситуацию.
Типы данных
Тип данного | Размер данного в байтах | Диапазон значений |
char (знаковый, символьный тип). | 1 байт | -128 - 127 |
unsigned char (беззнаковый, символьный тип). | 1 байт | 0 - 255 |
short (знаковый, целый короткий тип). | 2 байта | -32768 - 32767 |
unsigned short (беззнаковый, целый тип) | 2 байта | 0 - 65535 |
long (знаковый, длинный, целый тип). Или int | 4 байта | -2147483648 - 2147483647 |
unsigned long (беззнаковый, длинный, целый тип) или unsigned | 4 байта | 0 - 4294967295 |
float (числа с десятичной точкой) | 4 байта | 3.4Е-38 … 3.4Е38 |
double (числа с десятичной точкой двойной точности) | 8 байт | 1.7Е-308 … 1.7Е308 |
Константы языка С++
Константа- это число, символ или строка символов. Константы используются в программе как неизменяемые величины. В языке С++ различают четыре типа констант: целые константы, константы с плавающей точкой, константы-символы и строчные литералы.
Целые константы
Целая константа- это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину. Десятичная константа имеет следующий формат представления:
Х
где Х - это одна или более десятичных цифр от 0 до 9.
Восьмеричная константа имеет следующий формат представления:
0Х
где Х - это одна или более восьмеричных цифр от 0 до 7. Запись ведущего нуля необходима.
Шестнадцатеричная константа имеет один из следующих форматов представления:
0x*
0X*
где * одна или более шестнадцатеричных цифр. Шестнадцатеричная цифра может быть цифрой от 0 до 9 или буквой (большой или малой) от A до F. В представлении константы допускается "смесь" больших и малых букв. Запись ведущего нуля и следующего за ним символа x или X необходима.
Пробельные символы не допускаются между цифрами целой константы. В Табл. иллюстрируются примеры целых констант.
-----------------------------------------------------------
Десятичные Восьмеричные Шестнадцатеричные
константы константы константы
-----------------------------------------------------------
10 012 0xa или 0xA
132 0204 0x84
32179 076663 0x7dB3 или 0x7DB3
-----------------------------------------------------------
Табл. Примеры констант
Целые константы всегда специфицируют положительные величины. Если требуется отрицательные величины, то необходимо сформировать константное выражение из знака минус и следующей за ним константы. Знак минус рассматривается как арифметическая операция.
Каждая целая константа специфицируется типом, определяющим ее представление в памяти и область значений. Десятичные константы могут быть типа int или long.
Восьмеричные и шестнадцатеричные константы в зависимости от размера могут быть типа int, unsigned int, long или unsigned long. Если константа может быть представлена как int, она специфицируется типом int. Если ее величина больше, чем максимальная положительная величина, которая может быть представлена типом int, но меньше величины, которая представляется в том же самом числе бит как и int, она задается типом unsigned int. Наконец, константа, величина которой больше чем максимальная величина, представляемая типом unsigned int, задется
типом long или unsigned long, если это необходимо.
Программист может определить для любой целой константы тип long, приписав букву "l" или "L" в конец константы. В Табл. показаны примеры целых констант.
------------------------------------------------------------
Десятичные Восьмеричные Шестнадцатеричные
константы константы константы
------------------------------------------------------------
10L 012L 0xaL или 0xAL
79l 0115l 0x4fl или 0x4Fl
------------------------------------------------------------
Табл. Примеры целых констант типа long
Константа-символ
Константа-символ- это буква, цифра, знак пунктуации или ESC- символ, заключенные в одиночные кавычки. Величина константы-символа равна значению представляющего ее кода символа.
Константа-символ имеет следующую форму представления:
'?',
где ? может быть любым символом иэ множества представимых символов, включая любой ESC- символ, исключая одиночную кавычку ('), наклонную черту влево (\) и символ новой строки. Чтобы использовать одиночную кавычку или наклонную черту влево в качестве константы-символа, необходимо вставить перед этими знаками наклонную черту влево. Чтобы представить символ новой строки, необходимо
использовать запись '\n'.
----------------------------------------------
Константа Название величины
----------------------------------------------
'a' Малая буква а
'?' Знак вопроса
'\b' Знак пробела
'0x1B' ASCII ESC- символ
'\'' Одиночная кавычка
'\\' Наклонная черта влево
-------------------------------------------------
Табл. Примеры констант-символов.
Константы-символы имеют тип int.
Строковые литералы
Строковый литерал - это последовательность букв, цифр и символов, заключенная в двойные кавычки. Строковый литерал рассматривается как массив символов, каждый элемент которого представляет отдельный символ. Строковый литерал имеет следующую форму представления:
" " ,
где - это нуль или более символов из множества представимых
символов, исключая двойную кавычку ("), наклонную черту влево (\) и символ новой строки. Чтобы использовать символ новой строки в строковом литерале, необходимо напечатать наклонную черту влево, а затем символ новой строки.
Наклонная черта влево вместе с символом новой строки будут проигнорированы компилятором , что позволяет формировать строковые литералы, располагаемые более чем в одной строке. Например, строковый литерал:
"Long strings can be bro\
cken into two pieces."
идентичен строке:
"Long strings can be brocken into two pieces."
Чтобы использовать двойные кавычки или наклонную черту влево внутри строкового литерала, нужно представить их с предшествующей наклонной чертой влево, как показано в следующем примере:
"This is a string literal"
"First \\ Second"
"\"Yes, I do,\" she said."
"The following line shows a null string:"
""
Заметим, что ESC- символы (такие, как \\ и \") могут появляться в строковых литералах. Каждый ESC- символ считается одним отдельным символом.
Символы строки запоминаются в отдельных байтах памяти. Символ NULL (\0) является отметкой конца строки. Каждая строка в программе рассматривается как отдельный объект. Если в программе содержатся две идентичные строки, то каждая из них будет храниться в отдельном месте памяти.
Строчные литералы имеют тип char[]. Под этим подразумевается, что строка - это массив, элементы которого имеют тип char. Число элементов в массиве равно числу символов в строчном литерале плюс один, поскольку
символ NULL (отметка конца строки) тоже считается элементом массива.
Переменные языка С++
Переменная характеризуется типом, именем, значением, адресом.
Имя – набор букв и цифр, начинающийся с буквы. Значение выражается константой того же типа, что и переменная и является значением, которое хранится в ОП в данный момент времени. Адрес переменной – адрес первого байта ОП, выделенного под переменную. Тип присваивается переменной с помощью оператора объявления типа.
Например: переменную summa объявить числом с десятичной точкой
double summa;
Операции языка С++
Операции применяются для представления каких-либо действий над данными. Данные, участвующие в операции, называются операндами.
Компилятор интерпретирует каждую из этих комбинаций как самостоятельную единицу, называемую лексемой (token).
В Табл. (см. ниже) представлен список операций. Операции должны использоваться точно так, как они представлены в таблице: без пробельных символов между символами в тех операциях, которые представлены несколькими символами.
Замечание.
При выполнении операций данные должны быть одного типа, результат получается того же типа.
При смешивании типов происходит автоматическое выравнивание в сторону высшего (от низшего к высшему): char-int-long-float-double.
При этом:
2/3=0, 2./3=0.666666…
(тип) – операция тип приводит величину, стоящую справа к типу определенному ключевым словом, стоящему в скобках; Например: (int) 8.75, (float) sum.
Унарная операция определения адреса по имени переменной: &.
Операция присваивания =, с помощью которой можно изменить значение любой переменной. Например: а=7; (значение переменной а установить равной 7).
Операции += и *= увеличивают значение переменной на и в заданное количество раз. Например: а+=3; (значение переменной а увеличить на 3).
Операции -= и /= уменьшают значение переменной на и в заданное количество раз. Например: а-=3; (значение переменной а уменьшить на 3).
Выражения в языке С++
Выражение – это объединение операций и операндов. Каждое выражение имеет значение, которое определяется выполнением операций в порядке старшинства (приоритета операций). Для повышения приоритета операций используют круглые скобки.
Таблица приоритетов операций
Операции от высшего приоритета к низшему | Порядок выполнения операций |
(), {}, → | слева - направо |
!, ~, ++, --, &, sizeof * (тип) | справа - налево |
*, /, % | слева - направо |
+, - | слева - направо |
<< >> | слева - направо |
<, <=, >, >=. | слева - направо |
==, != | слева - направо |
& | слева - направо |
| | слева - направо |
&& | слева - направо |
|| | слева - направо |
?: | слева - направо |
^. | слева - направо |
=, +=, -=, *=, /=, % | справа - налево |
, | слева - направо |
Операторы языка С++
Операторы служат строительными блоками программы и являются командой компьютеру. Операторы делятся на: оператор выражения, пустой оператор, составной оператор (блок), оператор вызова функции, оператор, начинающийся с ключевого слова.
Оператор выражение – если в конце, какого либо выражения поставим ; получим оператор выражения.
Пустой оператор – не выполняет никакого действия. Обычно он используется там, где по синтаксису необходимо написать оператор, но никакого действия выполнять не нужно.; - пустой оператор;
Составной оператор – (блок) – это любая последовательность операторов заключенная в {}. Блок позволяет написать несколько операторов там, где по синтаксису необходимо написать один оператор.
{
u=b+c;
puts (“”);
}
Оператор вызова функций. .Функция – модуль, написанный ранее и спроектированный для решения конкретной задачи. Необходимо знать, чтобы вызвать готовую функцию:
имя функции,
количество, тип и порядок следования аргументов (исходных данных) функций,
тип возвращаемого функции значения
имя переменной для записи результата,
в каком заголовочном файле находится описание (или прототип) функции.
Синтаксис оператора:
result=name(arg1, arg2, …, argN);
где result – переменная под результат функции, name – имя функции, arg1, arg2, …, argN – аргументы функции. Если аргументов нет – пишутся пустые круглые скобки.
Например:
Y=sin(x);
F=pow(2., y+a);
Simv=getchar();
Scanf и printf
scanf вводит данные из stdin в форматированном виде.
Синтаксис вызова:
scanf(arg1, arg2...);
функция вводит различное количество данных разного типа.
– Где arg1 – управляющая строка - константа, содержащая только набор спецификаций формата, который отражает тип вводимых данных. Спецификации разделяются между собой пробелами или запятыми. Вводимые при выполнении программы значения так же разделяются этим же символом. Не ставить пробел в начале или в конце управляющей строки.
Основные спецификации формата:
%d – десятичное условие типа int.
%i – int (в любой системе счисления).
%u – unsigned.
%ld – long.
%c –один символ.
%s –строка символов без пробелов внутри (слово).
%f - float.
%lf – double.
%p –для вывода адреса переменной.
%e –для вывода очень больших или очень маленьких данных с десятичной точкой в экспоненциальной форме.
arg2... –адрес переменных, по которым записывается данное. При вводе строки символов & не пишется – только имя строки. Количество адресов совпадает с количеством спецификаций. В качестве результата функция возвращает качество результата операций качеством успешных операций. Например:
int a;
float b;
scanf(“%d %f”, &a,&b);
Функция вывода printf пишется по аналогичным правилам, только вместо адресов пишутся имена переменных и в управляющей строке можно писать комментирующий текст.
Например:
printf(“Ваши данные - %d и %f\n”, a,b);
Else
один оператор или блок
Слово elseнесет в себе вполне определенное условие которое можно сформировать как отрицание выражения !(выражение).
Конструкция else-if для трех и более альтернатив. Применяется в случае проверки двух или более взаимосвязанных условий.
Синтаксис: if (выражение 1)
один оператор или блок
else if(выражение 2)
один оператор или блок
Else
один оператор или блок
Ветвь else является не обязательной и служит для выражения действий, если выражения 1,2….. не выполняются.
Операция условия ?:Используется тогда когда есть некая переменная, которой можно присвоить одно из двух возможных значений.
Синтаксис: выражение 1 ? выражение 2 : выражение3
Если выражение 1 истина, то значением операции является выражение 2, иначе - выражение 3.
Пример:
x=(y>0)?y:-y;вычисляется модуль числа y.
Задача.Ракета запускается с Земли со скоростью v км/с в направлении движения Земли по орбите вокруг Солнца. Составьте алгоритм, определяющий результат запуска ракеты в зависимости от скорости. Известно, что при v < 7,8 ракета упадет на Землю, при 7,8 ≤ v < 11,2 ракета станет спутником Земли, при 11,2 ≤ v < 16,4 ракета станет спутником Солнца,
при v ≥ 16,4 ракета покинет Солнечную систему.
Текст функции mainбудет выглядеть так:
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "Rus.h" //прототип функции русификации
int main(void) //имя функции main
{
double v; //объявили переменную - скорость
//приглашение к вводу, текст выводится на экран монитора отдельной строкой
cout<<Rus("\n Введите скорость ракеты ");
//ввод скорости с клавиатуры в переменную v
cin>>v;
//схитрим немного: выведем общую часть сообщения один раз
cout<<Rus("Ракета, запущенная со скоростью ") << v;
//в зависимости от условия выводим на монитор то или иное сообщение
if(v<7.8)
cout<<Rus("км/сек, yпадет на Землю\n");
else if(v<11.2)
cout<<Rus("км/сек, cтанет спутником Земли\n");
else if(v<16.4)
cout<<Rus("км/сек, cтанет спутником Солнца\n");
else //условие по этой ветви неявно: во всех остальных случаях
cout<<Rus("км/сек, покинет Солнечную систему\n");
//оператор return завершает работу функции main
return 0;
}
Оператор switch. Оператор switch применяется для сравнения на равенство некоторого выражения или переменной целого типа с рядом констант. Замечание: анализируемое выражение или переменная должны быть типа intилиchar.
Синтаксис: switch (выражение)
{
case метка 1:
оператор
…………….
case метка 2:
оператор
……………
default:
оператор
……………
}
Под меткой (1,2...) подразумеваются константы соответствующего типа(int, char).Операторы выполняются последовательно, в том числе и под другими метками до тех пор, пока не будет встречен оператор break,который прерывает выполнение switch.
Задача 1. Вывести на экран монитора название времени года по его номеру:
1 – зима,
2 – весна,
3 – лето,
4 – осень.
В остальных случаях печатается сообщение об ошибке.
Текст функции mainбудет выглядеть так:
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "Rus.h" //прототип функции русификации
int main(void) //имя функции main
{
int n; //объявили переменную
//приглашение к вводу, текст выводится на экран монитора отдельной строкой
cout<<Rus("\n Введите номер времени года ");
//ввод исходных данных с клавиатуры
cin>>n ;
//вычисляем результат в зависимости от n
switch(n)
{
case 1:
cout<<Rus("Это зима!")<<endl;
break;
case 2:
cout<<Rus("Это весна!")<<endl;
break;
case 3:
cout <<Rus("Это лето!") <<endl;
break;
case 4:
cout<<Rus("Это осень!")<<endl;
break;
default:
cout<<Rus("Нет такого номера времени года") <<endl;
}
//оператор return завершает работу функции main
return 0;
}
Задача 2. Вывести на экран монитора название растения на букву d, независимо от того, большая она или маленькая.
Текст функции mainбудет выглядеть так:
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "Rus.h" //прототип функции русификации
int main(void) //имя функции main
{
char simvol; //объявили переменную
//приглашение к вводу, текст выводится на экран монитора отдельной строкой
cout<<Rus ("\n Введите букву ");
//ввод исходного данного с клавиатуры
cin>>simvol;
//вычисляем результат в зависимости от simvol
switch(simvol)
{
case 'd':
case 'D':
cout<<Rus("\nЭто дуб!")<< endl;
break;
default:
cout<<Rus("\nВведите букву d – получите ответ!")<< endl;
}
//оператор return завершает работу функции main
return 0;
}
Циклы в языке С++
Вычислительный процесс называется циклическим, если он содержит неоднократное выполнение одной и той же последовательности действий.
Число повторений цикла в некоторых случаях известно, в других – определяется в процессе выполнения цикла, на основе проверки некоторого условия.
Бывают циклы с проверкой условия перед началом выполнения цикла, или по окончанию выполнения цикла, или внутри цикла с помощью оператора передачи управления.
Итерация - выполнения цикла один раз.
Заголовок – некая конструкция, включающая в себя служебное слово.
Тело цикла – один оператор или блок, повторяющийся заданное количество раз.
Для построения цикла необходимо:
а)выделить переменную управляющую циклом, от значения которой зависит, выполняется цикл или нет.
б) до начала цикла присвоить ей правильное начальное значение.
в) построить условие, при истинности которого цикл выполнялся бы.
г) внутри цикла изменять переменную цикла так, чтобы он на определенном шаге завершился бы.
Цикл for
Рекомендуется применять, когда известно количество повторений цикла.
Синтаксис: for (инициализация; условие цикла; коррекция)
Цикл выполняется:
а) один раз до начала цикла выполняется инициализация – один или несколько операторов разделенных запятой.
б) если условие цикла истинно, выполняется пункт 3, если ложно цикл прекращается.
в) выполняется тело цикла.
г) выполняется коррекция – один оператор или несколько, разделенные запятой.
д) выполнение пункта б.
Любая из трех частей заголовка может отсутствовать но ;писать обязательно.
Примеры:
1. for (i=0; i<10; i++) //повтор 10 раз
cout<<“Это тело цикла”;
2. for(i=10; i>0; i--)
cout<<“Осталось ” <<i<<” секунд”;
3. for(cout<<“\nСчет десятками\n”, i=10; i<101; i+=10)
cout<<i<<endl;
4. for (i=0; i<10; i++)
{
…………………..
…………………..
}
Ввод -вывод символов.
Функция ввода fgetc – в качестве аргумента требует имя потока, а прочтенный символ возвращает в качестве результата. Переменная под символ должна быть объявлена типом int.
int simv;
simv = fgetс(in);
Если обнаружен конец файла
if (simv = = EOF)
{
// ситуация конца файла.
}
Функция вывода символа
fputc (simv, out);
fputc(‘*’, out);
Ввод - вывод строк с пробелами внутри.
Функция fgets имеет три аргумента:
· Имя строки, куда производится чтение.
· Размер строки.
· Имя потока.
charstr[80];
if (fgets (str,80,in) = = NULL)
{
// ситуация конец файла.
}
fputs – имеет два аргумента:
· Строка откуда производится запись.
· Имя потока.
fputs (str, out);
fputs (“Привет”, out);
Функция ввода- вывода слов fscanf.
char str [40];
inn;
n = fscanf(in,”%s”,str);
if (n = = NULL)
{
// ситуация конца файла.
}
fprintf(out,”%s_”, str);
fprintf(out, “Привет!\n”);
Ввод -вывод чисел.
float ch;
inn;
n = fscanf(in,“%f”,&ch);
if (n = = NULL)
{
// ситуация конца файла.
}
Прямой доступ к файлу. fseek – используется для перемещения управления потока в произвольное место в файле.
Функция имеет три аргумента:
· Имя потока.
· Данные типа long, показывающие, на сколько байт будет произведено смещение.
· Равен нулю если смещение относительно начала файла, единица, если смещение относительно текущей позиции и двойке, если смещение относительно конца файла.
Функция fseek не отcлtживает смещение за пределы конца файла.
Пример:
fseek (in,-1L,1); на один символ назад относительно текущей позиции.
Если файл открыт для чтения и записи то переход от чтения к записи и, наоборот, от записи к чтению происходит через функцию fseek, даже если реальное смещение не нужно.
Указатели
Указатель – это переменная, которая содержит адрес другой переменной соответствующего типа, или точнее говоря адрес первого байта памяти, выделенного под эту переменную.
Зачем нужны указатели:
· Применение указателей в некоторых случаях позволяет упростить алгоритм, делает его эффективнее.
· Обращение к памяти через адрес осуществляется быстрее, особенно для массива.
· С помощью указателей эффективней управляем операт