- •Ю.А Петров Программирование на языке высокого уровня
- •Часть 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
Пример1
#include<stdio.h>
void main(void)
{
enum color {red,yellow,green};
int col=0;
switch(col)
{
case red: puts("Stop! Color is red"); break;
case yellow: puts("Warning! Color is yellow"); break;
case green: puts("Go! Color is green"); break;
default: puts("No working"); break;
}
}
Структура «повторение» (см. рис. 5.1, г) реализуется операторами итерации. Операторы итерации позволяют организовывать циклическое выполнение набора операторов программы. Язык C++ имеет три формы операторов итерации: циклы while, do и for. Общий формат оператора while следующий:
while (условное_выражение) оператор_пока_"истина";
Оператор_пока_"истина" будет циклически повторяться до тех пор, пока вычисление условного_выражения не даст значения ноль (ложь). Условное_выражение вычисляется и проверяется первым. Если это значение ненулевое (истина), то выполняется оператор_пока_"истина". Если не встречен оператор перехода, выполняющий выход из цикла, то условное_выражение вычисляется снова. Цикл повторяется до тех пор, пока условное_выражение не даст значения 0.
Как и в случае оператора if, выражения типа указателя могут сравниваться с пустым указателем, так что while (ptr) ... эквивалентно while (ptr != NULL)...
Цикл while представляет собой удобный способ сканирования строк и других заканчивающихся пустым символом структур данных. Например:
char str[10]="Borland";
char *ptr=&str[0];
int count=0;
//...
while (*ptr++) // цикл до конца строки
count++;
При отсутствии операторов перехода оператор_пока_"истина" должен некоторым способом воздействовать на значение условного_выражения, либо последнее должно изменяться во время его вычисления, чтобы предотвратить зацикливание.
Общий формат оператора do while следующий:
do выполняемый_оператор while (условное_выражение);
Выполняемый_оператор циклически повторяется до тех пор, пока вычисление условного_выражения не даст 0 (ложь). Главное отличие этого оператора от оператора while состоит в том, что условное_выражение здесь проверяется не до, а после первого выполнения тела цикла. Гарантировано как минимум одно его выполнение.
Формат оператора for в языке С следующий:
for(<выражение_инициализации>;<выражение_проверки>;
<выражение_инкремента>) оператор;
В языке С++ <выражение_инициализации> может быть как выражением, так и объявлением.
Последовательность действий при выполнении данного оператора следующая:
выполняется вычисление выражения_инициализации, если таковое задано. Как следует из его названия, это выражение обычно инициализирует один или несколько счетчиков цикла, но его синтаксис в действительности позволяет любую степень сложности (включая объявления в случае языка С++);
выражение_проверки вычисляется по правилам, приводимым для циклов while. Если выражение_проверки ненулевое (истина), то оператор тела цикла выполняется. Пустое выражение трактуется в данном случае как while(1), то есть, как если бы условие проверки выполнялось всегда. Если выражение_проверки дает значение ноль (ложь), то цикл for прекращается;
выражение_инкремента выполняет приращения одного или нескольких цикловых счетчиков;
выражение "оператор" (возможно, пустое) вычисляется, после чего управление возвращается на шаг 2.
Если какие-либо из опциональных элементов опущены, то вместо них должны быть заданы соответствующие точки с запятой, например:
for (;;) {
// то же, что и for (;1;) – вечный цикл
}
Правила для операторов for в языке С применимы и в языке С++. Однако выражение_инициализации в языке С++ может также включать в себя и объявление. Контекст объявленного идентификатора продолжается до конца данного оператора, не далее. Например:
for (int i = 1; i < j; ++i)
{
if (i ...) ... // здесь обращаться к значению i можно
}
if (i ...) // а здесь нельзя : i вне контекста
Использование операторов итерации рассмотрим позже.
При изменении порядка выполнения операторов используются операторы перехода, реализуемые в структурах «развилка» и «повторение». Существует четыре таких оператора: break, continue, goto и return.
Синтаксис оператора break следующий:
break;
Его можно использовать только внутри операторов итерации (while, do и for – циклы) или с оператором switch. Он прекращает выполнение итерации или оператора switch. Поскольку операторы итерации и оператор switch могут комбинироваться и иметь любую глубину вложенности, следует обращать особое внимание на то, чтобы оператр break выполнял выход именно из нужного цикла или оператора switch. Сущеествует правило, которое состоит в том, что оператор break заканчивает выполнение ближайшего к нему объемлющего цикла итерации или оператора switch.
Синтаксис оператора continue следующий:
continue;
Он может быть использован только внутри оператора итерации и передает управление на проверку условия циклов while и do, либо на выражение инкремента цикла for. При вложенности циклов итерации оператор continue считается принадлежащим ближайшей объемлющей итерации.
Синтаксис оператора goto следующий:
goto метка;
Оператор goto передает управление оператору, имеющему указанную «метку», которая должна находиться в пределах той же функции.
Оператор с меткой имеет имя (метку), поэтому к нему можно обращаться с помощью оператора безусловного перехода goto. Формат оператора с меткой:
Идентификатор_метки : оператор;
Идентификатор метки используется оператором goto безусловного перехода. Идентификаторы меток имеют свое собственное пространство имен в контексте функции. Язык С++ дает возможность устанавливать метки любому oператору. Например, бесконечный цикл
for(;;)
{
printf("\nУкажите значение N (меньше 32766) > ");
scanf("%d",&N);
if(N<32766) break;
}
можно записать с использованием метки следующим образом:
met: printf("\nУкажите значение N (меньше 32766) > ");
scanf("%d",&N);
if(N>32766) goto met;
В языке С++ допустимо обойти объявление с явным или неявным инициализатором, если это объявление не находится во внутреннем блоке, который также обходится.
Если тип возврата функции не равен void, то тело функции должно содержать как минимум один оператор return следующего формата:
return выражение_возврата;
где выражение_возврата должно быть типа type или типа, преобразуемого при присвоении к типу, заданному type. Значение выражения возврата и есть значение, возвращаемое данной функцией.
Выполнение вызова функции заканчивается, когда встретился оператор return; если оператор return отсутствует, то выполнение «проваливается» к последней закрыващей фигурной скобке тела функции.
Если тип возврата void, то оператор return можно записать без выражения_возврата, либо оператор return вообще может быть опущен, например:
{
...
return;
}
Наконец, в языке С++ можно использовать объявления объектов внутри блоков, что дает возможность более рационально расходовать оперативную память ЭВМ.