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

книги / Проектирование программ и программирование на C++. Структурное программирование

.pdf
Скачиваний:
4
Добавлен:
12.11.2023
Размер:
3.86 Mб
Скачать

Если в определении перечислимых констант опустить знаки = и числовые значения, то значения будут приписываться по умолча­ нию. При этом самый левый идентификатор получит значение О, а каждый последующий будет увеличиваться на 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;

Соседние файлы в папке книги