книги / Проектирование программ и программирование на C++. Структурное программирование
.pdfЕсли в определении перечислимых констант опустить знаки = и числовые значения, то значения будут приписываться по умолча нию. При этом самый левый идентификатор получит значение О, а каждый последующий будет увеличиваться на 1.
enum {ten=10, three=3, four, five, six}; enum {Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};
Символьные константы - это один или два символа, заключен ные в апострофы. Символьные константы, состоящие из одного сим вола, имеют тип char и занимают в памяти один байт, символьные константы, состоящие из двух символов, имеют целый тип и занима ют два байта. Последовательности, начинающиеся со знака \, назы ваются управляющими, они используются:
- |
для представления символов, не имеющих графического ото |
|
бражения, например: |
||
\ а |
- звуковой сигнал; |
|
\Ь - возврат на один шаг; |
||
\п - |
перевод строки; |
|
\t - |
горизонтальная табуляция; |
|
- |
представления символов: \ , ’ ?, ” ( \\, V ,\? ,\” ); |
|
- |
представления символов с помощью шестнадцатеричных или |
восьмеричных кодов (\073, \0xF5);
Строковая константа - это последовательность символов, за ключенная в кавычки. Внутри строк также могут использоваться управляющие символы. Например:
"ХпНовая строка", "\п\"Алгоритмические языки программирования""
Типы данных C/C++ можно разделить на простые и составные. К простым типам относят типы, которые характеризуются одним значением. В языке С определено четыре, а в C++ - шесть простых
типов данных: int (целый)
char (символьный)
wchar_t (расширенный символьный) (C++) bool (логический) (C++)
float (вещественный)
double (вещественный с двойной точностью)
Существует четыре спецификатора типа, уточняющих внутрен нее представление и диапазон стандартных типов:
short (короткий); long (длинный); signed (знаковый);
unsigned (беззнаковый).
Тип int. Значениями этого типа являются целые числа.
Размер типа int не определяется стандартом, а зависит от ком
пьютера и компилятора. Для 16-разрядного процессора под него от водится 2 байта, для 32-разрядного - 4 байта.
Если перед int стоит спецификатор short, то под число отво дится 2 байта, а если спецификатор long, то 4 байта. От количества отводимой под объект памяти зависит множество допустимых значе ний, которые может принимать объект:
short int - |
занимает 2 байта, следовательно, имеет диапазон |
-32768...+32767; |
|
long int - |
занимает 4 байта, следовательно, имеет диапазон |
-2 147 483 648...+2 |
147 483 647. |
Тип int совпадает с типом short int на 16-разрядных ПК |
|
и с типом long int на 32-разрядных ПК. |
Модификаторы signed и unsigned также влияют на множе ство допустимых значений, которые может принимать объект:
unsigned short int - занимает 2 байта, следовательно, имеет диапазон 0...65536;
unsigned long int - занимает 4 байта, следовательно, име ет диапазон 0...+4 294 967 295.
Тип char. Значениями этого типа являются элементы конечного упорядоченного множества символов. Каждому символу ставится в соответствие число, которое называется кодом символа. Под вели чину символьного типа отводится 1 байт. Тип char может использо ваться со спецификаторами signed и unsigned. В данных типа
signed char можно хранить значения в диапазоне от -128 до 127. При использовании типа unsigned char значения могут находиться в диапазоне от 0 до 255. Для кодировки используется код ASCII (American Standard Code for International Interchange). Символы с ко дами от 0 до 31 относятся к служебным и имеют самостоятельное значение только в операторах ввода-вывода.
Величины типа char также применяются для хранения чисел из указанных диапазонов.
Тип wchar__t. Предназначается для работы с набором симво лов, для кодировки которых недостаточно 1 байта, например Uni code. Размер этого типа, как правило, соответствует типу short. Строковые константы такого типа записываются с префиксом
L: I/'String #1"
Тип b o o l . Тип bool называется логическим. Его величины мо
гут принимать значения true и false. Внутренняя форма представле ния false - 0, любое другое значение интерпретируется как true.
Типы с плавающей точкой. Внутреннее представление веще ственного числа состоит из двух частей: мантиссы и порядка. В ШМ-совместимых ПК величины типа float занимают 4 байта, из которых один разряд отводится под знак мантиссы, 8 разрядов под порядок и 24 - под мантиссу.
Величины типа double занимают 8 байтов, под порядок и ман тиссу отводятся 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка его диапазон.
Вели перед именем типа double стоит спецификатор long, то под величину отводится 10 байтов.
Тцп vo id . К основным типам также относится тип void. Мно жество значений этого типа - пусто.
Переменная в C++ - именованная область памяти, в которой
хранятся данные определенного типа. У переменной есть имя и зна чение. Имя служит для обращения к области памяти, в которой хра нится значение. Перед использованием любая переменная должна
быть описана.
i n t a ; f l o a t х;
Общий вид оператора описания:
[к ласс п а м я т и ][ c o n s t] тип имя [и н и ц и ал и зат о р ];
Класс памяти определяет время жизни и область видимости переменной. Время жизни может быть постоянным - в течение вы полнения программы или временным - в течение блока. Область ви
димости - это та часть программы, из которой можно обратиться к переменной обычным образом. В зависимости от области действия переменная может быть локальной и глобальной. Локальная пере менная определена внутри блока (т.е. внутри оператора {...}), область ее действия от точки описания до конца блока. Глобальная перемен
ная определена вне блока, область ее действия от точки описания до конца файла. Класс памяти может принимать значения: a u to , e x
t e r n , s t a t i c , r e g i s t e r . Если класс памяти не указан явно, то
компилятор определяет его исходя из контекста объявления. Классы памяти:
a u to - автоматическая локальная переменная. Спецификатор a u to может быть задан только при определении объектов блока, на пример в теле функции. Этим переменным память выделяется при входе в блок и освобождается при выходе из него. Вне блока такие переменные не существуют.
e x te r n - глобальная переменная, она находится в другом месте программы (в другом файле или далее по тексту). Используется для создания переменных, которые доступны во всех файлах программы. s t a t i c - статическая переменная, она существует только в пре
делах того файла, где определена переменная.
r e g i s t e r - аналогичны a u to , но память под них выделяется в регистрах процессора. Если такой возможности нет, то переменные обрабатываются как a u to .
int а;//глобальная переменная void main()
{
int b;//локальная переменная
extern int x;//переменная x определена в другом //месте,память не выделяется
static int с;//локальная статическая переменная
а=1;//присваивание |
глобальной |
переменной |
|
int а;//локальная |
переменная |
а |
|
а=2;//присваивание |
локальной |
переменной |
|
::а=3;//присваивание |
глобальной переменной |
||
} |
|
и инициализация х |
|
int х = 4 ; //определение |
|||
В примере переменная а определена вне всех блоков. Областью |
действия переменной а является вся программа, кроме тех строк, где используется локальная переменная а. Переменные b и с - локаль ные, область их видимости - блок. Время жизни различно: память под b выделяется при входе в блок (так как по умолчанию класс па мяти auto), освобождается при выходе из него. Переменная с (static) существует, пока работает программа.
Если при определении начальное значение переменным не задает ся явным образом, то компилятор обнуляет глобальные и статические переменные. Автоматические переменные не инициализируются.
Имя переменной должно быть уникальным в своей области действия.
Описание переменной может быть выполнено или как объявле ние, или как определение. Объявление содержит информацию о клас се памяти и типе переменной, определение вместе с этой информаци ей дает указание выделить память. В примере extern int х; - объявление, а остальные - определения.
const - показывает, что эту переменную нельзя изменять (име нованная константа).
При описании можно присвоить переменной начальное значение (инициализация).
const num=10;
Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение представля ет собой правило вычисления нового значения. Каждое выражение состоит из одного или нескольких операндов, символов операций и ограничителей. Если выражение формирует целое или веществен ное число, то оно называется арифметическим. Пара арифметиче ских выражений, объединенная операцией сравнения, называется отношением. Если отношение имеет ненулевое значение, то оно истинно, иначе-ложно.
В языке C/C++ нет встроенных средств ввода и вывода - он осу ществляется с помощью функций, типов и объектов, которые нахо дятся в стандартных библиотеках. Существует два основных способа: функции С и объекты C++.
Для ввода-вывода данных в стиле С используются функции, ко торые описываются в библиотечном файле s t d i o . h .
•p r i n t f (форматная строка, список аргументов).
Форматная строка - строка символов, заключенных в кавычки, ко торая показывает, как должны быть напечатаны аргументы. Например:
p r i n t f ("Зн ач ен и е чи сла Пи равн о % f\n ", p i ) ; Форматная строка может содержать:
-символы, печатаемые текстуально;
-спецификации преобразования;
-управляющие символы.
Каждому аргументу соответствует своя спецификация преоб разования:
%d , %i - десятичное целое число; %f - число с плавающей точкой;
%е, %Е - число с плавающей точкой в экспоненциальной форме; %и —десятичное число в беззнаковой форме; %с —символ;
%s - строка.
В форматную строку также могут входить управляющие символы:
\п —управляющий символ новая строка;
\t - табуляция;
\а - звуковой сигнал и др.
Также в форматной строке могут использоваться модификаторы формата, которые управляют шириной поля, отводимого для разме щения выводимого значения. Модификаторы - это числа, которые указывают минимальное количество позиций для вывода значения и количество позиций для вывода дробной части числа:
%[-]т[.р]С,
где [ - ] задает выравнивание по левому краю; m - минимальная шири на поля; р - количество цифр после запятой для чисел с плавающей точкой и минимальное количество выводимых цифр для целых чисел
(если цифр в числе меньше, чем значение р, то выводятся начальные
нули); С - спецификация формата вывода. |
|
|
|||
p r i n t f ( " ХпСпецификации ф о р м а та: \п% 1 0 . 5d - |
ц ел о е, |
||||
\n \ \ % 1 0 .5 f |
- |
с |
плавающей т о ч к о й \\п |
% 10.5е - \ \ |
|
в эксп о н ен ц и ал ьн о й |
форме\п% 10з - с т р о к а " , |
10, |
|||
10.0, 10.0, " 10"); |
|
|
|
||
Будет выведено: |
|
|
|
|
|
Спецификации |
ф о р м а та: |
|
|
||
00010 |
- |
ц ел о е |
|
|
|
1 0 .0 0 0 0 0 |
- |
с |
плавающей то ч ко й |
|
|
1 .0 0 0 0 0 е+ 0 0 1 |
- |
в эк сп о н ен ц и ал ьн о й |
форме |
|
10- с т р о к а .
•s c a n t (форматная строка, список аргументов).
В качестве аргументов используются адреса переменных. Например:
s c a n t (" %d%f " , & х,& у);
При использовании библиотеки классов C++ используется биб лиотечный файл io s t r e a m . h , в котором определены стандартные потоки ввода данных от клавиатуры c in и вывода данных на экран
сo u t, а также соответствующие операции:
<<- операция записи данных в поток;
>> - операция чтения данных из потока.
# i n c l u d e d o s t ream . h>;
c o u t |
<< "Х пВ ведите к о л и ч е с т в о эл ем ен то в : |
c i n » |
n ; |
10.1. Базовые конструкции структурного программирования
В теории программирования доказано, что программу для ре шения задачи любой сложности можно составить только из трех структур: линейной, разветвляющейся и циклической. Эти структу ры называются базовыми конструкциями структурного программи рования (рис. 7).
Линейной называется конструкция, представляющая собой по следовательное соединение двух или более операторов.
Ветвление - задает выполнение одного из двух операторов, в за висимости от выполнения какого-либо условия.
Цикл - задает многократное выполнение оператора.
Целью использования базовых конструкций является получение программы простой структуры. Такую программу легко читать, от лаживать и при необходимости вносить в нее изменения. Структур ное программирование также называют программированием без goto, так как частое использование операторов перехода затрудняет пони мание логики работы программы. Но иногда встречаются ситуации, в которых применение операторов перехода, наоборот, упрощает структуру программы.
Операторы управления работой программы называют управ ляющими конструкциями программы. К ним относят:
-составные операторы;
-операторы выбора;
-операторы циклов;
-операторы перехода.
Любое выражение, заканчивающееся точкой с запятой, рассмат ривается как оператор, выполнение которого заключается в вычисле нии этого выражения. Частным случаем выражения является пустой оператор « ;» (точка с запятой).
i++;
а+=2;
х=а+Ь;
10.3.Составные операторы
Ксоставным операторам относят собственно составные операто ры и блоки. В обоих случаях это последовательность операторов, заключенная в фигурные скобки. Блок отличается от составного опе ратора наличием определений в теле блока.
{ |
//это составной оператор |
п++; |
|
summa+=n; |
|
int |
n=0; |
п++; |
//это блок |
summa+=n;
}
10.4. Операторы выбора
Операторы выбора - это условный оператор и переключатель. I. Условный оператор имеет полную и сокращенную форму,
if (выражение-условие) оператор;//сокращенная форма
В качестве <выражения-условия> могут использоваться арифме тическое выражение, отношение и логическое выражение. Если зна чение выражения-условия отлично от нуля (т.е. истинно), то выпол няется оператор.
if (x<y&&x<z)min=x;
if (выражение-условие) оператор1;//полная форма else оператор2;