![](/user_photo/2706_HbeT2.jpg)
- •Ю.А Петров Программирование на языке высокого уровня
- •Часть 1
- •Введение
- •Задание
- •Комментарии
- •Идентификаторы
- •Ключевые слова
- •Константы
- •Управляющие последовательности
- •Строковые литералы
- •Константные выражения
- •Пунктуаторы
- •Операции
- •Задание на лабораторную работу 2 разработка программы линейной структуры Цель работы
- •Отчет по лабораторной работе должен содержать:
- •Задание
- •Замечания
- •Варианты заданий
- •Классификация ошибок
- •Ошибки, не обнаруженные компилятором
- •Ситуации, возникающие при неверных результатах
- •Отладка программы
- •Предупреждения
- •Первое сообщение об ошибке
- •Использование команд Find и Replace
- •Быстрое обнаружение ошибочных строк
- •Продолжение отладки
- •Использование встроенного отладчика
- •Разница между командами Step Into и Step Over
- •Дополнительные средства отладки
- •Работа с точками останова
- •Краткая характеристика объектов
- •Формат 1:
- •Стиль программирования
- •Задание на лабораторную работу 4 объекты и их характеристики Цель работы
- •В отчете по лабораторной работе следует представить:
- •5 Структурное программирование
- •Пример1
- •Пример 2
- •Задание на лабораторную работу 5 разработка программы со структурой «развилка» Цель работы
- •Задание:
- •Варианты задания
- •Задание на лабораторную работу 6 создание цикловых программ с фиксированным числом повторений Цель работы
- •Задание
- •Варианты задания
- •Задание на лабораторную работу 7 создание программ с итерационными циклами Цель работы
- •Задание
- •Варианты задания
- •Пояснения к выполнению лабораторной работы 7
- •6 Агрегаты данных
- •Структура
- •Объединения
- •Перечисления
- •Int array[3]; // Объявление определения;
- •Многомерные массивы
- •Вывод в файловый поток
- •Чтение из входного файлового потока
- •Чтение целой строки файлового ввода
- •Определение конца файла
- •Проверка ошибок при выполнении файловых операций
- •Закрытие файла
- •Управление открытием файла
- •Выполнение операций чтения и записи
- •Задание на ргз 1 использование структур данных при решении задач Цель работы
- •Задание
- •Варианты задания
- •7 Модульное программирование
- •Задание на ргз 2 использование модульного программирования при решении задач
- •Перемещаемые панели инструментов
- •Меню File
- •Меню Edit
- •Меню View
- •Меню Insert
- •Меню Project
- •Меню Build
- •Меню Tools
- •Меню Window
- •Список открытых окон
- •Меню Help
- •Приложение 2 Некоторые функции языка с
- •Используемая литература
- •Оглавление
- •5 Структурное программирование 53
Константные выражения
Константное выражение – это выражение, вычисление которого дает в результате константу (причем лежащую в диапазоне, определенном для констант данного типа). Вычисление константных выражений выполняется так же, как и вычисление обычных выражений. Константные выражения можно использовать везде, где допускается использование самих констант (например, если требуется вычислить границы массива, в выражениях case, для задания длины битового поля) как инициализирующие значения элемента перечисления (выражения, вычисление которых дает в результате целочисленные константы). Константные выражения не могут содержать следующих операций, если только они не содержатся в операнде sizeof():
присваивание;
запятая;
декремент;
инкремент;
вызов функции.
Пунктуаторы
Пунктуаторы, также называемые разделителями, определяются следующим образом:
пунктуатор: одно из [ ] ( ) { } , ; : ... * = #
Открывающая и закрывающая квадратные скобки – [ ] содержат индексы одно- и многомерных массивов, например:
char ch, str[ ] = "Stan"; /* объявлена строка символов*/
int mat[3][4]; /* объявлена матрица 3 x 4 */
ch = str[3]; /* переменной ch присваивается 4 – й символ из строки str */
Открывающая и закрывающая круглые скобки – ( ) меняют приоритеты операций в выражении, содержат условия условных выражений и указывают на вызовы функций и параметры функций, например:
d = c * (a + b); /* изменение приоритета */
if (d == z) ++x; /* содержит условие условного оператора */
func(); /* вызов функции без аргументов */
int (*fptr)(); /* объявление указателя функции */
fptr = func; /* отсутствие () означает указатель функции */
void func2(int n); /* объявление функции с аргументами */
Рекомендуется использовать круглые скобки в макроопределениях, что позволяет избежать возможных проблем с приоритетами операций во время расширения, например:
#define CUBE(x) ((x) * (x) * (x))
Открывающие и закрывающие фигурные скобки – { } обозначают начало и конец составного оператора, например:
if (d == z)
{
++x;
func();
}
Закрывающая фигурная скобка служит концом составного оператора, поэтому точка с запятой (;) после фигурной скобки (}) не требуется, за исключением структур или объявлений классов. Часто точка с запятой не допустима, как, например, в следующем случае
if (оператор)
{}; /* недопустимое использование точки с запятой */
else …
Запятая (,) отделяет элементы списка аргументов функции, например:
void func(int n, float f, char ch);
Запятая часто используется как операция в выражениях. Смешивание различного использования запятой допустимо, но чтобы их различать, необходимо применять круглые скобки. Например:
func(i, j); /* вызов функции с двумя аргументами */
func((exp1, exp2), (exp3, exp4, exp5)); /* вызов функции с 2 аргументами */
Точка с запятой (;) указывает на конец оператора (конец предложения). Любое допустимое выражение языка С или С++ (включая и пустое выражение), за которым следует (;), интерпретируется как оператор, называемый оператором выражения. Выражение вычисляется, а его значение отбрасывается. Если такое выражение не имеет побочных эффектов, то компилятор языка C++ может его проигнорировать. Например:
a + b; /* a + b вычисляется, но полученное значение теряется */
++a; /* имеется побочный эффект для a */
; /* пустое выражение = нулевой оператор */
Точки с запятой часто используются для создания пустых операторов:
for (i = 0; i < t; i++)
{
;
}
Двоеточие (:) служит для обозначения метки оператора, например:
start:x=0;
...
goto start;
...
или
switch (a) {
case 1: puts("Первый"); break;
case 2: puts("Второй"); break;
...
default: puts("Ни тот, ни другой!"); break;
}
Многоточие (...) представляет собой три последовательно расположенные точки без пробелов между ними. Многоточие используется в списках формальных аргументов прототипов функций для обозначения переменного числа аргументов, либо аргументов с изменяющимся типом. Например:
void func(int n, char ch,...);
Данное объявление указывает, что func будет определена таким образом, что вызовы ее должны содержать, как минимум, два аргумента, int и char, но также могут иметь и любое число дополнительных аргументов.
В языке С++ запятую, предшествующую многоточию, можно опустить.
Звездочка (*) в объявлении переменной обозначает создание указателя на тип, например:
char *char_ptr; /* объявление указателя на тип char */
Можно объявить указатели с несколькими уровнями вложенности, что обозначается соответствующим количеством звездочек:
int ** int_ptr; /* указатель на указатель на тип int */
double *** double_ptr /* указатель на указатель на указатель на тип double */
Звездочка также используется в качестве операции обращения по адресу, либо операции умножения:
i = *int_ptr; /* переменной i присваивается значение, содержащееся по адресу int_ptr */
a = b * 3.14; /* операция умножения */
Знак равенства (=) разделяет объявления переменных от списков инициализации:
int x = 5; // инициализация переменной x;
char array[5] = { 1, 2, 3, 4, 5 }; // инициализация массива array;
В языке С++ объявления любого типа могут находиться (с некоторыми ограничениями) в любой точке внутри кода. В функциях языка С никакой код не может предшествовать никаким объявлениям переменных.
В списке аргументов функции С++ знак равенства указывает на значение параметра по умолчанию, например:
int f(int i = 0) { ... } /* параметр i имеет значение по умолчанию ноль */
Знак равенства используется также как операция присвоения в выражениях:
a = b + c;
ptr = malloc(sizeof(float)*100);
Знак фунта (#) означает директиву препроцессора, если она является первым непробельным символом в строке.
Двойной знак фунта (##) используется как операция слияния лексем на фазе сканирования кода препроцессором, например:
#define VAR(i,j) (i##j) /* создание нового идентификатора ij */