- •Введение
- •Тема 1.1.Лексические основы языка программирования Общие сведения о программах, лексемах и алфавите
- •Тема 1.2.Концепция типа данных Понятие переменной
- •Основные типы данных
- •Указатели
- •Перечисления (перечислимый тип)
- •Массивы
- •Тема 1.3.Основные управляющие структуры программирования Понятие алгоритма
- •Свойства алгоритма:
- •С помощью языка программирования. Управляющие структуры и основные конструкции языков программирования
- •Тема 1.4.Основы модульного программирования
- •Подпрограммы
- •Рекурсивные функции
- •Раздел 2.Технология создания программ Тема 2.1.Интегрированная среда программирования
- •Трансляторы
- •Тема 2.2.Жизненный цикл программного обеспечения (Этапы подготовки и решения задач на эвм)
- •Анализ требований (постановка задачи, обследование)
- •Определение спецификаций
- •Кодирование
- •Тестирование, отладка и оптимизация
- •Внедрение и сопровождение
- •Раздел 3.Основные парадигмы программирования Тема 3.1.Генезис языков программирования.
- •Основные вехи в истории развития языков программирования
- •Классификация языков программирования
- •Уровни языков программирования
- •Поколения языков программирования
- •Тема 3.2.Основные парадигмы (технологии) программирования
- •Структурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Объектно-ориентированное программирование (ооп)
- •Основные свойства ооп
- •Структуры (записи)
- •Объединения (запись с вариантами)
- •Как массив символов
- •Как указатель на строковую константу
Перечисления (перечислимый тип)
Перечислимый тип по существу описывает целые константы (типа int), которым приписаны уникальные и удобные для использования имена.
Формат описания:
enum [имя типа] {список констант}
где константы могут быть инициализированы обычным образом.
Например,
enum digit {one=1,two,three};
Здесь one, two, three – произвольным образом выбранные программистом идентификаторы для обозначения констант 1,2,3. После такого определения в программе наряду, например, с константой 1 можно использовать ее обозначение one. Фактически такая запись равносильно записи
const int one=1;
const int two=2;
const int three=3;
Обычно перечислимый тип используется для задания числовых рядов или стандартных рядов, таких как месяцы, дни недели.
Если в определении перечислимых констант опустить знаки “=” и не указывать числовых значений, то они будут присваиваться идентификаторам по умолчанию следующим образом: самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на 1. Имена перечислимых констант должны быть уникальными, а их значения могут совпадать.
Имя типа указывают, если требуется вводить в программе переменные этого типа. Например
digit d1,d2;
Компилятор обычно обеспечивает, чтобы эти переменные принимали значения только из списка констант.
Массивы
Массив - самая распространенная структура данных, реализованная практически во всех языках программирования. Массив – это именованная совокупность однотипных элементов, расположенных в памяти компьютера последовательно. Тип элементов массива называют базовым. К любому элементу массива можно обращаться произвольным образом, так как он имеет определенный номер, называемый индексом.
Описание массива в общем случае имеет формат:
[класс памяти] [const] тип имя [константное выражение][={список инициализирующих элементов}];
Константное выражение представляет собой количество элементов массива (размерность массива). Если массив объявлен без инициализирующего списка, то задание размерности массива обязательно. Например,
int a[10]; - массив из 10 целых чисел
int n=10; int a[n]; - недопустимо, так как n – не константа
int a[]; - недопустимо, так как нет ни размерности ни инициализирующего списка.
Предпочтительнее задавать размерность массива с помощью именованных констант. Например,
const int n=10;
int mas[n];
Когда массив объявлен без указания размера, но при этом инициализирован списком, его размер вычисляется путем подсчета числа элементов этого списка. Например
int a []={1,2,3,4};//размерность массива равна 4
Явная инициализация массива разрешена только при его определении и возможна двумя способами: либо с указанием размера массива в квадратных скобках, либо без его явного указания, например,
int а[6]={1,2,3,4};//массив из 6 целых чисел с инициализацией первых четырех, остальные будут обнулены.
char str1[]={‘a’, ‘b’, ‘c’};// массив из 3 элементов типа char
Число элементов в инициализирующем списке должно быть меньше и равно указанной размерности массива, то есть запись int a[3]={1,2,3,4}; недопустима.
Доступ к элементам массива осуществляется с помощью комбинации имя массива + индекс элемента следующими двумя способами.
С помощью записи имя_массива[индекс элемента]. То есть, чтобы обратится к i- тому элементу массива а, используют запись а[i], при этом первый элемент массива имеет индекс 0.
С помощью записи *(имя_массива+индекс элемента) Важно понимать, что имя массива является указателем-константой на его первый элемент. То есть, если описан массив int a [n], то для обращения к его i-ому элементу наряду с записью a[i], можно использовать запись *(a+i).
Работа с элементами массива организовывается обычно в цикле.
Для ввода и вывода элементов массива а можно использовать записи
cin>>a[0]>>a[1]>>[3];
cout<<a[0]<<a[1]<<a[3];
соответственно, при условии, что количество элементов точно известно и невелико. На практике так поступают редко.
При записи cout<<a; на экране появится адрес памяти, по которому расположен первый элемент массива a, а запись cin>>a; вызовет ошибку времени выполнения.
Исключение составляют только массивы символов (char), для которых переопределены объекты cin и cout.
Например, пусть описан массив
char s[255]=”Hello”;/*обратите внимание, что массив типа char допустимо инициализировать не только списком элементов в скобках {}, но и строковой константой*/
cout<<s; //на экран выведется, не адрес памяти, а вся строка
cin>>s; // с клавиатуры считаются все символы до первого пробельного разделителя.
Операция new, используемая для инициализации указателей, позволяет определять массив еще одним способом (это так называемый динамический массив):
int k;
cin>>k;
int *a=new int [k];
Память, зарезервированная под динамический массив, должна освобождаться явным образом оператором delete [], например delete [] a;
Многомерные массивы описываются как массивы массивов, например,
int a2[3][2] //массив из 3 массивов, содержащих по 2 целых элемента.
Для обращения к элементу двумерного массива используется два индекса, например, a2[i][j]. Для работы с двумерными массивами используется конструкция вложенных циклов.
Задание для самостоятельной работы! Придумать, как двумерный массив задать динамически.