- •Т.Э. Шульга программирование.
- •Глава 1. Основы программирования на языке высокого уровня 6
- •Глава 2. Динамические структуры данных 40
- •Глава 3. Основы объектно-ориентированного программирования 53
- •Введение
- •Глава 1. Основы программирования на языке высокого уровня
- •Void main()
- •Задания
- •1.2. Переменные. Основные типы данных
- •Ввод – вывод значений переменных
- •Форматирование данных при обменах с потоками ввода-вывода
- •Void main()
- •Void main()
- •Преобразование типов
- •Задание 1. Описание переменных и преобразование типов
- •Задание 2. Форматирование вывода
- •1.3. Основные операции
- •Void main ()
- •Задания
- •1.4. Конструкции выбора
- •Void main()
- •Void main()
- •Void main()
- •Задание 1. Обработка введенного символа
- •Задание 2. Вычисление значения функции
- •Задание 3. Применение разветвляющихся алгоритмов при решении простейших задач
- •Задание 4. Mультиветвление
- •1.5. Конструкции цикла и передачи управления
- •Void main()
- •Задание 1. Детерминированные циклы. Простейшие задачи
- •Void main()
- •Задание 2. Итерационные циклы. Простейшие задачи
- •Void main()
- •Int last;
- •Задание 3. Одномерные массивы
- •Void main ()
- •Int a[100],n,max,imax;
- •Задание 4. Вложенные циклы
- •Void main ()
- •Задание 5. Двумерные массивы
- •Void main ()
- •Задание 6. Посимвольная обработка строк
- •Void main()
- •Задание 7. Сортировка массива
- •Void main ()
- •1.6.Функции
- •Int oct (int a)// определение функции
- •Void main()
- •Void main()
- •Int strcmp(const char *str1, const char* str2);
- •Int fclose (file * stream);
- •Int feof(file *stream);
- •Int fseek ( file* stream, long offset, int origin);
- •Задание 1. Определение и вызов функций
- •Задание 2. Рекурсивные функции
- •Задание 3. Использование библиотечных функций string.H
- •Void main()
- •Задание 4. Использование библиотечных функций stdio.H
- •Void main ()
- •Глава 2. Динамические структуры данных
- •Int year;
- •Int children;
- •Задание 1. Структуры
- •Int year;
- •Int month;
- •Int visokos(int year)
- •Vivod (date d)
- •Int day_number(date d)
- •Vivod(mas[I]);
- •Vivod (min(mas,n));
- •Задание 2. Динамический список
- •Int mark;
- •Void vvod ()
- •Void vivod()
- •If (begin)
- •Void vivod_f()
- •If (begin)
- •Void add()
- •Void udol () //
- •If (begin)
- •Void del()
- •Void main ()
- •Задание 3. Использование стеков и очередей
- •Глава 3. Основы объектно-ориентированного программирования
- •Void empty();
- •If (len) delete []s;
- •Void cStr::empty()
- •Задание 1 . Описание простейшего класса
- •Задание 2 . Класс string
- •Void main()
- •Void main ()
- •Задание 3. Класс fstream
- •Задание 4. Наследование
- •Список литературы
Задания
Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1–10.
Используя esc-последовательности, выведите на экран следующий текст.
-
Это строка, иначе –“стринг”, иначе – “строковый литерал”
-
Это звуковой сигнал! (Сопроводите вывод строки звуковым сигналом)
-
Это строка? “Да!”
-
Вывод очень- очень- очень- очень- очень-очень- очень- очень- очень- очень длиной строки можно обеспечить, используя символ \
-
“ – это двойные кавычки ‘ – это апостроф
-
Это “строка”? Это “строка”! (Используя символ возврата на шаг, во второй строке удалите восклицательный знак)
-
Это строка? Это строка! (Замените слово “Это” во второй строке словом “Да”, используя возврат каретки)
-
\\Это комментарий? //Нет, это комментарий
-
Используя шестнадцатеричные коды символов, выведите на экран текст: “Это строка”
-
Используя восьмеричные коды символов, выведите на экран текст: “Это строка”
-
Используя шестнадцатеричные коды символов, выведите на экран текст: “Hello, world”
-
Используя восьмеричные коды символов, выведите на экран текст: “Hello, world”
1.2. Переменные. Основные типы данных
Любая программа, суть которой не есть вывод на экран некоторой текстовой информации, содержит описание переменных. Переменная - это пара “имя” - “значение”. Имени соответствует адрес участка памяти, выделенной переменной, а значением является содержимое этого участка. Именем переменной служит идентификатор. В С++ идентификатор - это последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры. Прописные и строчные буквы различаются. Примеры идентификаторов:
i, i2, i_2, stroka, STROKA, F_I_O .
На длину различаемой части идентификатора конкретные реализации компилятора накладывают свои собственные ограничения. Например, компилятор фирмы Borland различают не более 32-х первых символов любого идентификатора.
Каждая переменная и каждое выражение в программе имеет тип, определяющий операции, которые могут над ними производиться. Все типы языка С++ делят на основные и производные. Переменные типизируются с помощью описаний. Для описания переменных основных типов используют ключевые слова, содержащиеся в таблице 2.
Описание переменных заданного типа имеет следующий формат:
тип имя1 [иницал._выражение1], имя2 [иницал._выражение2],…; где
тип – один из основных типов (таблица 2);
имя – идентификатор;
инициал._выражение – необязательный инициализатор, определяющий начальное значение соответствующего объекта.
Синтаксис инициализатора переменной:
= инициал._выражение
либо
(инициал._выражение).
Таблица 2. Основные типы данных
Тип данных |
Диапазон значений |
char (символьный) |
-128…127 |
short (короткий целый) |
-32768…32767 |
int (целый) |
-32768…32767 |
long (длинный целый) |
-2147483648…2147483647 |
unsigned char (беззнаковый символьный) |
0…255 |
unsigned int (беззнаковый целый) |
0…65535 |
unsigned long (беззнаковый длинный целый) |
0…4294967295 |
float (вещественный) |
3.4Е-38…3.4Е+38 |
double (вещественный с удвоенной точностью) |
1.7Е-308…1.7Е+308 |
long double (длинный вещественный с удвоенной точностью) |
3.4Е-4932…3.4Е+4932 |
Приведем несколько примеров.
int i,j,k,n=10; // Определены целые переменные i,j,k,n и только n
//инициализирована значением 10;
char simbol1= ‘\n’;// Определена символьная переменная simbol1 co
// значением ‘\n’
double pi=3,1415926535897932385; // Определена вещественная
//переменная pi с удвоенной точностью co
//значением 3,1415926535897932385
К основному типу можно применять спецификатор const. Это дает тип, имеющий те же свойства, что и исходный тип, за исключением того, что значение переменных типа const не может изменяться после инициализации. Например,
const float pi = 3,14;
const char plus = '+';
В данном случае говорят, что описаны константы. Символ, заключенный в одинарные кавычки, является символьной константой. Константа должна инициализироваться при описании. Для переменных инициализация необязательна, но настоятельно рекомендуется. Оснований для введения локальной переменной без ее инициализации очень немного.
Кроме типов, приведенных в таблице 2, к основным типам относят логический тип bool, перечислимый тип enum и тип void (отсутствие значения).
Логические переменные (типа bool) могут принимать одно из двух значений: истина (true) или ложь (false). Логические переменные используются для выражения результатов логических операций. Например,
bool b1=a==b; //= означает присваивание, == проверка равенства
Если а и b имеют одинаковые значения, то b1 будет равно true, в противном случае – false. По определению true имеет значение 1 при преобразовании к целому типу, а false ‑ 0. При преобразовании целочисленного значения к логическому типу 0 преобразуется в false, а число, отличное от нуля – в true.
Перечислимый тип, который вводится с помощью служебного слова enum, по существу описывает целые константы (типа int), которым приписаны уникальные и удобные для использования имена. Например,
enum {one=1,two=2,three=3};
Здесь one, two, three – произвольным образом выбранные программистом идентификаторы для обозначения констант 1,2,3. После такого определения в программе наряду, например, с константой 2 можно использовать ее обозначение two. Если в определении перечислимых констант опустить знаки “=” и не указывать числовых значений, то они будут присваиваться идентификаторам по умолчанию следующим образом: самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на 1. Имена перечислимых констант должны быть уникальными, однако к значениям констант это не относится. Одно значение могут иметь разные константы. Для перечислимых констант можно ввести имя типа, соответствующего приведенному списку констант, например, определение
enum week {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
не только определяет константы Sunday==0, Monday==1,…, но и вводит перечислимый тип с именем week, который может в дальнейшем использоваться в определениях и описаниях других типов.
Тип void можно использовать только для определений некоторых производных типов. Объектов типа void не существует, то есть описание void i; недопустимо.
Из основных типов с помощью операций *, &, [], () и механизмов определения структурированных типов (классов, структур, объединений) можно конструировать множество производных типов. Приведем несколько примеров:
int ar [5]; - массив, состоящий из пяти объектов типа int, доступ к которым обеспечивают индексированные переменные ar[0], ar[1], ar[2] ar[3], ar[4];
char t[]= “текст”; – массив, состоящий из пяти объектов типа char;
void a1 (double); – функция, не возвращающая никакого значения и имеющая аргумент типа double;
char *a2; – указатель на объекты типа char (значением указателей являются адреса участков памяти, выделенных для объектов конкретного типа);
long a3;
long &a4=a3; – инициализированная ссылка на объект типа long ;
int *a5[];– массив указателей на объекты типа int;
int (*a5)[]; – указатель на массив объектов типа int.
Обратите внимание, что строка может быть описана как массив типа char. Подробно назначение и синтаксис таких типов данных как указатели, массивы, ссылки, структуры данных и классы будет описаны в следующих главах пособия.
Кроме того, используя спецификатор typedef, можно вводить в программе удобные обозначения для сложных описаний типов. Например,
typedef unsigned char UC;
UC simbol;
Здесь вводится новый тип UC и переменная этого типа simbol, значениями которой являются беззнаковые числа в диапазоне от 0 до 255.
Для определения размера (в байтах) области памяти, выделяемой для переменной определенного типа, в С++ используется операция sizeof. Разрешены два формата операции
sizeof (имя_переменной)
или
sizeof (тип данных).
Например, пусть определена переменная int i. Тогда операция sizeof(i) определит, сколько байт выделено для переменой i.
Соотношение между основными типами можно записать так:
1==sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <=sizeof(float) <= sizeof(double)
Каждый, описанный в программе объект (в частности, переменная), имеет следующие основные характеристики:
-
область действия идентификатора – эта та часть программы, в которой идентификатор может быть использован для доступа к связанному с ним объекту (обычно имя переменной действует с места ее определения и до конца блока {}, в котором она была определена);
-
видимость объекта (данное понятие необходимо в связи с возможностью повторных определений идентификатора внутри вложенных блоков);
-
продолжительность существования, которая определяет период, в течение которого идентификаторам в программе соответствуют конкретные объекты в памяти. Определены три вида продолжительности: статическая, локальная и динамическая;
-
класс памяти – определяет размещение объекта в памяти и продолжительность его существования.