Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по информатике9.doc
Скачиваний:
16
Добавлен:
02.05.2014
Размер:
333.31 Кб
Скачать
  1. Основные элементы языка С++: алфавит языка, идентификаторы, константы. Использование комментариев в тексте программы.

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

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

Кроме выделенных групп символов в языке СИ широко используются так называемые, управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность строится на основе использования обратной дробной черты (\) (обязательный первый символ) и комбинацией латинских букв и цифр

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

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

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

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

  • Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр

Если значение переменной в программе никогда не изменяется, то ее целесообразно защитить от случайного изменения с помощью служебного слова "const"

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

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

Особенности при выборе идентификатора:

  • идентификатор не должен совпадать с ключевыми словами, с зарезервированными словами и именами функций библиотеки компилятора языка СИ++.

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

  • на идентификаторы используемые для определения внешних переменных, должны быть наложены ограничения, формируемые используемым редактором связей.

Комментарий - это набор символов, которые игнорируются компилятором, на этот набор символов, однако, накладываются следующие ограничения. Внутри набора символов, который представляет комментарий не может быть специальных символов определяющих начало и конец комментариев, соответственно (/* и */).

Символы // начинают комментарий, который заканчивается в конце строки, на которой они появились.

2.Основные типы данных языка С++.

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

Правила Си++ требуют, чтобы в программе у всех переменных был задан тип данных.

Тип данных определяет:

внутреннее представление данных в памяти компьютера;

множество значений, которые могут принимать величины этого типа;

операции и функции, которые можно применять к величинам этого типа.

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

Все типы языка C++ можно разделить на основные исоставные. В языке C++ определено шесть основных типов данных для представленияцелых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятсямассивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.

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

В Си++ есть еще два целочисленных типа – short intиlong int. Они представляют, соответственно, более узкий и более широкий диапазон целых чисел, чем тип int.

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

Например:

unsigned short int year, age;

Правила, касающиеся записи целочисленных значений:

1) Нельзя пользоваться десятичной точкой. Значения 26 и 26.0 одинаковы, но "26.0" не является значением типа "int".

2) Нельзя пользоваться запятыми в качестве разделителей тысяч. Например, число 23,897 следует записывать как "23897".

3) Целые значения не должны начинаться с незначащего нуля. Он применяется для обозначения восьмеричных чисел, так что компилятор будет рассматривать значение "011" как число 9 в восьмеричной форме.

Границы диапазона целых чисел, которые можно хранить в переменных типа int, зависят от конкретного компьютера.

ТипРазмер в байтахДиапазон значений

char1 от-128 до 127

int2 или 4 какlongилиshort

short2 от -32768 до 32767

long4 от-2 147 483 648 до 2 147 483647

unsigned shar 1 от 0 до 255

unsigned int 2 или 4 как unsigned long или unsigned short

unsigned short 2 От 0 до 65535

unsigned long 4 от 0 до 4 294 967 295

Спецификатор типа char требуется для представления символьных переменных, которые в С++ могут использоваться как арифметические данные. Значением объекта типа char является код (размером 1 байт), соответствующий представляемому символу. Для представления символов русского алфавита необходимо использовать тип unsigned char, так как коды русских букв превышают величину 127.

Переменная типа "char" рассчитана на хранение только одного символа (например, буквы или пробела). В памяти компьютера символы хранятся в виде целых чисел. Соответствие между символами и их кодами определяется таблицей кодировки, которая зависит от компьютера и операционной системы. Самой распространенной таблицей кодировки является таблица символов ASCII.

В тексте программ символьные константы типа "char" надо заключать в одиночные кавычки. Например, 'A' является символьной константой, но A будет рассматриваться компилятором в качестве имени переменной. Аналогично, '9' является символом, а 9 – целочисленной константой.

В С++ разрешается использовать символы в арифметических выражениях.

Тип wchar_tпредназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например,Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типуshort. Строковые константы типаwchar_tзаписываются с префиксомL, например,L"Gates".

Для хранения вещественных чисел применяются типы данных floatиdouble.

Величина с типа floatзанимает 4 байта. Из них 1 байт отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы. Диапазон значений переменной с плавающей точкой приблизительно равен от 3.14E-38 до 3.14E+38.

Величина типа doubleзанимает 8 бит в памяти. Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы. Диапазон значений равен от 1.7E-308 до 1.7E+308.

В С++ также допускается запись в формате с плавающей запятой (в экспоненциальном формате) в виде мантиссы и порядка.

Например, 523.5 можно записать в виде "5.235e+02" (т.е. 5.235*102), а -0.0034 в виде "-3.4e-03".

Bool Величины логического типа могут принимать только значенияtrueиfalse, являющиеся зарезервированными словами. Внутренняя форма представления значенияfalse— 0 (нуль). Любое другое значение интерпретируется какtrue.

При преобразовании к целому типу trueимеет значение 1.

Для описания набора связанных по смыслу констант типа "int" в С++ есть оператор перечисления. Например, описание вида

enum { MON, TUES, WED, THURS, FRI, SAT, SUN };

3.Структура программы на языке С++.

Программа на языке C++ состоит из функций, описаний идиректив препроцессора .

Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Простейшее определение функции имеет следующий формат:

Тип_возвращаемого_значения имя ([ параметры ]){

операторы, составляющие тело функции

}

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

□ если функция не должна возвращать значение, указывается тип void:

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

□ функции не могут быть вложенными;

□ каждый оператор заканчивается точкой с запятой (кроме составного оператора).

4.Директивы препроцессора: #include, #define, #undef

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

Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:

#include " имя_файла "

#include <имя_файла>

Имя файла должно соответствовать соглашениям с операционной системой и может состоять либо только из имени файла, либо из имени файла с указанием маршрута до него.

Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии - в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых в файле AUTOEXEC командой PATH.

Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на С++ начинаются с этой директивы.

Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями, причем макроопределения могут иметь аргументы.

Директива #define имеет две синтаксические формы:

#define идентификатор текст

#define идентификатор(список параметров) текст

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

Директива #undef используется для отмены действия директивы #define. Синтаксис этой директивы следующий:

#undef идентификатор

Директива отменяет действие текущего определения #define для указанного идентификатора. Не является ошибкой использование директивы #undef для идентификатора, который не был определен директивой #define.

Пример:

#undef WIDTH

#undef MAX

Эти директивы отменяют определение именованной константы WIDTH и макроопределения MAX.

5.Основные операции языка С++: арифметические, логические, отрицания. Примеры.

Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операции определяют действия, которые должны быть выполнены над операндами. В простейшем случае операнд - это переменная или константа. В общем случае операндом может быть выражение. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.

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

Например:

(а + 5)/7; /* бессмыслица */

b = 5; /* b присвоить 5 */

t++; /* к t прибавить 1 */

printf(“\n %s", mes); /* печать сообщения */

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

У логических выражений в С++ есть еще одно важное свойство: истинное значение ("true") представляется в виде целого числа 1 (большинство компиляторов любое положительное число считают истинным значением), а ложное значение ("false") в виде значения 0. Это может привести к ошибкам. Например, легко напечатать "=" вместо "==", что будет приводить к ошибкам вывода данных.

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

double b = 5;

b = -b; /* переменной b присваивается значение, равное отрицанию ее предыдущего значения, т.е. b принимает значение -5 */

Результатом операции логического отрицания "НЕ" ( ! ) является значение 0, если операнд не нулевой, и значение 1, если операнд равен нулю. Результат имеет тип int. Операнд должен быть целого или действительного типа или типа указатель.

int i, j;

j=0;

i= ! j; /* переменная i получит значение равное 1, так как переменная j имела значение равное 0 */

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

unsigned char s, b;

s=‘\0301’;

b= ~a;

В данном примере b будет иметь значение, равное ‘\076’ в восьмеричном коде. В двоичном представлении s и b будут выглядеть так:

11000001 - для значения переменной s,

00111110 - для значения переменной b.

6.Основные операции языка С++: взятия адреса и разадресации, определения размера, сдвига. Примеры.

Данные операции используются для работы с переменными типа указатель.

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

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

int t, f ;

int * adress;

f=5;

adress = &t; /* переменной adress, объявленной как указатель, присваивается адрес переменной t*/

* adress =f; /* ячейке памяти с адресом, хранящимся в переменной adress, присваивается значение переменной f, т.е. 5 , что эквивалентно t = f */

С помощью операции sizeofможно определить размер памяти (в байтах), которая необходима для хранения элемента с соответствующим идентификатором или определенного типа. Операция sizeof имеет следующий формат:

sizeof выражение

sizeof ( тип )

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

Операции сдвига осуществляют смещение операнда влево ( << ) или вправо ( >>) на число битов, задаваемое вторым операндом. Оба операнда должны быть целыми величинами. При сдвиге влево правые освобождающиеся биты устанавливаются в нуль. При сдвиге вправо метод заполнения освобождающихся левых битов зависит от типа первого операнда. Если тип unsigned, то свободные левые биты устанавливаются в нуль. В противном случае они заполняются копией знакового бита. Результат операции сдвига не определен, если второй операнд отрицательный.

Отметим, что сдвиг влево соответствует умножению первого операнда на степень числа 2, равную второму операнду, а сдвиг вправо соответствует делению первого операнда на 2 в степени, равной второму операнду.

Примеры 25:

int i, j, k ;

i=0x1234

k = i << 4 ; /* k = 0x0234 */

j = i << 8 ; /* j = 0x3400 */

i = j >> 8 ; /* i = 0x0034 */

7.Основные операции языка С++: поразрядные операции, условная операция, преобразование типов. Примеры

К поразрядным операциям относятся: операция поразрядного логического "И" ( &), операция поразрядного логического "ИЛИ" (|), операция поразрядного "исключающего ИЛИ" (^).

Операнды поразрядных операций могут быть любого целого типа.

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

Операция поразрядного логического ИЛИ( | )сравнивает каждый бит первого операнда с соответствующим битом второго операнда. Если любой (или оба) из сравниваемых битов равен 1, то соответствующий бит результата устанавливается в 1, в противном случае результирующий бит равен 0.

Операция поразрядного исключающего ИЛИ ( ^ )сравнивает каждый бит первого операнда с соответствующими битами второго операнда. Если один из сравниваемых битов равен 0, а второй бит равен 1, то соответствующий бит результата устанавливается в 1, в противном случае, т.е. когда оба бита равны 1 или 0, бит результата устанавливается в 0.

int i, j;

char m;

i=0x45FF, /* i= 0100 0101 1111 1111 */

j=0x00FF; /* j= 0000 0000 1111 1111 */

m = i ^ j; /* m=0x4500 = 0100 0101 0000 0000 */

m = i | j; /* m=0x45FF = 0100 0101 0000 0000 */

m = i & j; /* m=0x00FF = 0000 0000 1111 1111 */

В языке СИ имеется одна тернарная операция - условная операция, которая имеет следующий формат:

операнд1 ? операнд2 : операнд3

Операнд1 должен быть целого или действительного типа или быть указателем. Он оценивается с точки зрения его равенства логическому 0 («ложь»). Если операнд1 не равен 0, то результатом операции является операнд2. Если операнд1 равен 0, то результатом операции является операнд3.

int b, d, m;

b=7;

d=4;

m = (d<=b) ? b : d; /* m присваивается значение меньшей из двух переменных, т.е. 4*/

8.Основные операции языка С++: операторы инкремента и декремента, простое и составное присваивание. Примеры

++а Пре –инкремент Увеличивает а на единицу и возвращает а(а=4;b=++а;// a=5, b=4)

а++ Пост-инкремент Возвращает а, затем увеличивает а на единицу(b=а++;// a=6, b=6)

--а Пре-декремент Уменьшает а на единицу и возвращает а (b= --а;// a=5, b=6)

а-- Пост-декремент Возвращает а, затем уменьшает а на единицу(b=а--;// a=4, b=4)

Операция простого присваивания используется для замены значения левого операнда значением правого операнда. При присваивании производится преобразование типа правого операнда к типу левого операнда по правилам, описанным раньше. Левый операнд должен быть модифицируемым.

a=f+3.4*b;

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

(операнд1) (бинарная операция) = (операнд2)

Составное присваивание по конечному результату эквивалентно следующему простому присваиванию:

(операнд1) = (операнд1) (бинарное операция) (операнд2)

В программах часто встречаются операторы присваивания, в которых справа стоит выражение, модифицирующее текущее значение переменной, например:

number = number + 1;

Переменным часто присваиваются значения, вычисленные на основе их старых значений.

Пример: Эквивалентное выражение:

number = number + 1; number += 1;

amount = amount * (count1 + count2); amount *= count1 + count2;

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

  • Явное преобразование типов может быть осуществлено посредством операции приведения типов, которая имеет формат:

( имя-типа ) операнд

В приведенной записи имя-типа задает тип, к которому должен быть преобразован операнд.

(int)c=b/6;

12.Операторы языка С++: оператор выражение, пустой оператор, составной оператор, операторы потокового ввода-вывода. Дополнительные возможности потокового ввода-вывода. Управление точностью значений с плавающей точкой. Примеры.

Любое выражение, которое заканчивается точкой с запятой, является оператором выражением.

Выполнение оператора выражения заключается в вычислении выражения. Полученное значение выражения никак не используется, поэтому, как правило, такие выражения вызывают побочные эффекты. (Заметим, что вызов функции, не возвращающей значения, можно осуществить только при помощи оператора выражения.) Например:

clrscr();/* - вызов функции *

Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в операторах do, for, while, if в строках, когда оператора не требуется, но по синтаксису требуется наличие хотя бы одного оператора. Синтаксис языка С++ требует, чтобы после метки обязательно следовал оператор. Например, фигурная скобка оператором не является. Поэтому, если надо передать управление на фигурную скобку, необходимо перед ней использовать пустой оператор.

Составной оператор представляет собой один или несколько операторов и объявлений заключенных в фигурные скобки:

{ [объявление]…оператор; [оператор];…} или

{ оператор

оператор

оператор

. . .

}

В конце составного оператора точка с запятой не ставятся. Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов, например, {r=s;s=t;t=r;}

int main () {

int q,b; double t,d;

if(...)

{ int c,g; double f,q; /* начало блока */

e=b+t-d;

g=++e;

f=q=e/g; } /* конец блока */

return 0;

}

#include <iostream.h>

main() {

cout<< "Здравствуй, мир\n";

}

Программа начинается с оператора #include <iostream.h>. В эту программу включается файл iostream.h, содержащий описания функций стандартной библиотеки ввода/вывода для работы с клавиатурой и экраном.

Кроме потокового ввода-вывода с помощью cin, cout можно использовать форматированный ввод-вывод с использованиемscanf,printfв стиле языкаC. Для этого следует подключить библиотекуstdio.h(#include <stdio.h>) который обеспечивает независимость кода программы от особенностей ввода информации на конкретной электронно-вычислительной машине.

Для ввода исходных данных используется функция scanf().В ней требуется указать формат вводимых значений, а также адреса переменных, которым они будут присвоены. Параметры любой функции перечисляются через запятую. В первом параметре функции scanf в виде строкового литерала задается спецификация формата вводимой величины, соответствующая типу переменной. Спецификация%fсоответствует типу float,%d- типуint,%c– типуchar. В качестве второго параметра функции передается адрес переменной, по которому будет помещено вводимое значение. Операция взятия адреса обозначается &.

scanf(“%d”,&h);

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

printf(“%d”,h);

В данном примере выводится значение целочисленной переменной h. Все символы литерала, кроме спецификации формата%d, выводятся на дисплей без изменений. При выводе форматные спецификации будут заменены конкретными значениями переменных.

Для оформления вывода используются также специальные знаки (\t-знак табуляции, \n- переход на другую строку и др).

Например,

printf(“%d\t”,h);

printf(“%d\n”,a);

printf(“%d”,b);

9.Условные операторы языка С++. Примеры

Формат оператора условия (условного перехода) имеет следующий вид: