- •ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ С И С++
- •СОДЕРЖАНИЕ
- •ВВЕДЕНИЕ
- •1. ЛЕКСИКА ЯЗЫКА C
- •1.1. РАЗДЕЛИТЕЛИ
- •1.2. КОММЕНТАРИИ
- •2. ДАННЫЕ И ОПЕРАЦИИ
- •2.1. БАЗОВЫЕ ТИПЫ ДАННЫХ
- •Наименование
- •Диапазон
- •2.2. КОНСТАНТЫ
- •Целые константы
- •Константы с плавающей точкой
- •Символьные константы
- •2.3. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ И ТИПИЗИРОВАННЫХ КОНСТАНТ
- •2.4. ОДНОМЕРНЫЙ МАССИВ
- •2.5. СТРОКИ, СТРОКОВЫЕ КОНСТАНТЫ
- •2.6. УКАЗАТЕЛИ
- •2.7. ПЕРЕИМЕНОВАНИЯ ТИПОВ
- •2.8. СТРУКТУРЫ
- •2.9. МАССИВЫ СТРУКТУР
- •2.10. МНОГОМЕРНЫЕ МАССИВЫ
- •2.11. ОБЪЕДИНЕНИЕ
- •2.12. ПЕРЕЧИСЛЕНИЕ
- •2.13. БИТОВОЕ ПОЛЕ ( ЗАПИСЬ )
- •3. ОПЕРАЦИИ И ВЫРАЖЕНИЯ
- •3.1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
- •3.2. ОПЕРАЦИИ СРАВНЕНИЯ
- •3.3. ЛОГИЧЕСКИЕ ОПЕРАЦИИ
- •3.4. ПОБИТОВЫЕ (ПОРАЗРЯДНЫЕ) ОПЕРАЦИИ
- •3.5. ОПЕРАЦИИ ПРИСВАИВАНИЯ
- •3.6. АДРЕСНЫЕ ОПЕРАЦИИ
- •3.7. ДОСТУП К ПОЛЯМ СТРУКТУР, ОБЪЕДИНЕНИЙ И ЗАПИСЕЙ
- •3.8. ДРУГИЕ ОПЕРАЦИИ
- •3.9. ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАЦИЙ В ВЫРАЖЕНИИ
- •4. ОПЕРАТОРЫ
- •4.1. ОПЕРАТОР-ВЫРАЖЕНИЕ
- •4.2. ПУСТОЙ ОПЕРАТОР
- •4.3. СОСТАВНОЙ ОПЕРАТОР
- •4.4. УСЛОВНЫЕ ОПЕРАТОРЫ
- •4.5. ОПЕРАТОРЫ ЦИКЛА
- •while( выражение) оператор;
- •do оператор while ( выражение );
- •for( выражение1; выражение2; выражение3 ) оператор;
- •4.6. ОПЕРАТОРЫ ПЕРЕХОДА
- •break;
- •switch
- •continue;
- •goto метка;
- •5. ФУНКЦИИ. КЛАССЫ ПАМЯТИ
- •5.1. ФУНКЦИИ
- •5.2. КЛАССЫ ПАМЯТИ
- •класс памяти
- •ключевое слово
- •существование
- •видимость
- •5.3. ВОЗВРАЩЕНИЕ ЗНАЧЕНИЙ
- •5.4. АРГУМЕНТЫ ФУНКЦИИ
- •6. ФУНКЦИИ ВВОДА С КЛАВИАТУРЫ И ВЫВОДА НА ДИСПЛЕЙ
- •6.1. ФОРМАТИРОВАННЫЙ ВЫВОД
- •6.2. ФОРМАТИРОВАННЫЙ ВВОД
- •6.3. ВВОД СТРОКИ
- •6.4. ВЫВОД СТРОКИ
- •6.5. ВВОД СИМВОЛА
- •6.6. ВЫВОД СИМВОЛА
- •7. ПРЕПРОЦЕССОР
- •7.1. ВКЛЮЧЕНИЕ ФАЙЛОВ
- •7.2. ВЫПОЛНЕНИЕ ПОДСТАНОВОК
- •7.3. УСЛОВНАЯ КОМПИЛЯЦИЯ
- •8. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ, СПИСКИ
- •8.1. ВЫДЕЛЕНИЕ И ОСВОБОЖДЕНИЕ ДИНАМИЧЕСКОЙ ПАМЯТИ
- •8.2. СПИСКИ
- •Рис.1. Структура однонаправленного линейного списка
- •9. ФАЙЛЫ
- •9.1. ОТКРЫТИЕ И ЗАКРЫТИЕ ФАЙЛОВ
- •9.2. ЧТЕНИЕ И ЗАПИСЬ В ФАЙЛ
- •9.3. ПРОИЗВОЛЬНЫЙ ДОСТУП К ФАЙЛУ
- •10. ЛАБОРАТОРНЫЕ РАБОТЫ
- •10.1. МАССИВЫ И СИМВОЛЬНЫЕ СТРОКИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.2. ФУНКЦИИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.3. СТРУКТУРЫ И МАССИВЫ СТРУКТУР
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.4. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ, СПИСКИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •10.5. РАБОТА С ФАЙЛАМИ
- •Цель работы
- •Пример выполнения работы
- •Варианты заданий
- •11. ВВЕДЕНИЕ В C++
- •12. КЛАССЫ
- •12.1. ОБЩИЕ ПОЛОЖЕНИЯ
- •12.2. КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
- •12.3. СОЗДАНИЕ И ВЫЗОВ ОБЪЕКТОВ
- •12.4. ДРУЖЕСТВЕННЫЕ ФУНКЦИИ
- •12.5. ПЕPЕГPУЖЕННЫЕ ОПЕPАЦИИ И ФУНКЦИИ
- •12.6. ПАРАМЕТРИЗИРОВАННЫЕ КЛАССЫ
- •12.7. ПРЕОБРАЗОВАНИЕ ТИПОВ
- •12.8. СТАТИЧЕСКИЕ КОМПОНЕНТЫ КЛАССА
- •13. ПРОИЗВОДНЫЕ КЛАССЫ, НАСЛЕДОВАНИЕ
- •13.1. ИЕРАРХИЯ КЛАССОВ
- •13.2. ДОСТУП К НАСЛЕДУЕМЫМ КОМПОНЕНТАМ
- •Доступ в базовом классе
- •Модификатор доступа
- •14. ВИРТУАЛЬНЫЕ ФУНКЦИИ
- •14.1. ОБЩИЕ ПОЛОЖЕНИЯ
- •14.2. ВИРТУАЛЬНЫЕ ДЕСТРУКТОРЫ
- •14.3. АБСТРАКТНЫЕ КЛАССЫ
- •15.1. ВЫВОД ДАННЫХ
- •15.2. ВВОД ДАННЫХ
- •15.3. ВВОД-ВЫВОД ДАННЫХ, ОПРЕДЕЛЕННЫХ ПОЛЬЗОВАТЕЛЕМ
- •15.4. РАБОТА С ДИСКОВЫМИ ФАЙЛАМИ
- •15.5. ОБРАБОТКА ИСКЛЮЧЕНИЙ
- •ЛИТЕРАТУРА
– 8 –
today.date=30;
gets(today.name);
•с помощью указателей.
Впоследнем случае надо объявить указатель типа структуры и присвоить ему значение адреса структурной переменной; доступ к элементу этой переменной осуществляется через выражение
указатель -> имя элемента или (*указатель).имя элемента struct day today, *ptr; ptr=&today;
ptr->date=29;
gets( ptr->name); // gets, puts -функции ввода данных с клавиатуры и вывода puts((*(ptr.name));// значений на дисплей соответственно
Замечание 1. Иногда удобно ввести в шаблон имя переменной struct day {
int date; char name[10]; } today;
Замечание 2. В некоторых случаях целесообразно использовать оператор переименования типа – typedef. Например, применив
typedef struct { int year ; char *month; int dat;
char *day_week; } Data;
мы получим возможность делать в программе объявления вида Data day1;
2.9.МАССИВЫ СТРУКТУР
Объявление массива структур имеет следующий вид:
struct имя_шаблона имя_переменной[n];
Массив структур может быть проинициализирован.
struct day week[7]={{24, “понедельник”},{25, “вторник”},} {26, “среда”},{27,“четверг”}, {28, “пятница”}, {29, “суббота”}, {25, “воскресенье”}};
Первая структура массива имеет имя week[0], вторая – week[1] и т.д. Обращение к элементам массива следующее: week[0].date, week[0].name; Имя массива структур является указателем на этот массив.
2.10. МНОГОМЕРНЫЕ МАССИВЫ
Многомерный массив объявляется следующим образом:
[класс_памяти] тип имя [n1][n2]..[nm];
где m – число измерений массива, ni – число элементов в i-ом измерении.
Например, согласно объявлению int matr[3][4] двумерный массив целых чисел содержит три строки и четыре столбца.
© 1998 Калачев Д.П., Лутай В.Н.
– 9 – int matr[3][4]={ {1,2,3,5},{2,3,4,5}{4,5,6,7} };
Так же, как и в одномерном случае, имя многомерного массива является его адресом или, что то же самое, адресом его первого элемента. Из этого следует, что, добавив к имени массива соответствующее число адресных единиц, можно получить ссылку на любой элемент массива. Например, выражение (matr+1) указывает на элемент matr[0][1], выражение (matr+4) указывает на элемент matr[1][0]. Это означает, что *(matr+1) – содержи-
мое ячейки matr[0][1].
Рассмотрим следующие выражения : matr[0], matr[1], matr[2]. Первое указывает на 1-ый элемент 1-ой строки, второе – на 1-ый элемент 2-ой строки, третье – на 1-ый элемент 3- ой строки. Это обстоятельство позволяет определять двумерные массивы как одномерные массивы указателей, трехмерные массивы как двумерные массивы указателей и т.п. Напри-
мер
char *matr[3]={{"moon","ground","exit"}};
Здесь двумерный массив состоит из 3-х строк.
Ввод-вывод элементов массива может производиться как поэлементно, так и построчно.
Пример: main (){
char *symb[12];
for (i=0; i<12; i++){ gets(symb[i]);
...
}
...
for (i=0; i<12; i++){ puts(symb[i]);
...
}
}/* main */
Вязыке С допускаются достаточно сложные объявления :
•int **ptr – двумерный массив ; ptr-указатель на указатель типа int;
•int (*mas)[10] – указатель на 10-элементный массив;
•int *mas[3][4] – 3 элементный массив указателей на 4 элементный массив типа int.
•int(*buf )[3][4] – указатель на массив 3 на 4 типа int.
При составлении подобных объявлений надо помнить, что приоритет [] выше, чем у *, а приоритет () самый высокий.
2.11. ОБЪЕДИНЕНИЕ
Объединение (смесь) объявляется следующим образом:
union имя_шаблона {список элементов};
Пример:
union trans { |
// занимает |
2 |
байта |
|
int |
i; |
|||
double |
n2; |
// занимает |
8 |
байтов |
char |
str[6]; // занимает |
6 |
байтов |
|
}; |
|
|
|
|
union trans table;
© 1998 Калачев Д.П., Лутай В.Н.