- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.д.).
- •Символ отображает хранимые данные в виде, пригодном для обработки. Носитель данных не определен. В схемах алгоритмов он предназначен для обозначения ввода-вывода данных в случае использования запоминающего устройства, управляемого процесса.
- •Тема 1. Основные этапы решения задач на ЭВМ
- •Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си
- •Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных
- •Данные регулярного типа (массивы)
- •Строки
- •Данные комбинированного типа (структуры)
- •Перечисления
- •Объединения
- •Указатели
- •Тема 7. Представление основных управляющих структур программирования
- •Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Операторы прерывания циклов
- •Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Вызов функций в языке Си
- •Рекурсивные функции
- •Тема 9. Файлы
- •Тема 10. Приемы программирования. Примеры алгоритмов
- •Алгоритмы сортировки
- •Алгоритмы поиска
- •Динамические структуры данных
- •Линейные списки
- •Стек, очередь, дек
- •Деревья
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Приложение 3. Лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы
Операторы прерывания циклов
В некоторых случаях необходимо прервать повторение цикла, проанализировав какие-то условия внутри тела цикла. Это может потребоваться
втех случаях, когда проверки условия для окончания цикла громоздкие, требуют многоэтапного сравнения и сопоставления каких-то данных, и все эти проверки просто невозможно разместить в выражении условия операторов while, do-while или for. Для этого можно использовать оператор break. Он прерывает выполнение тела любого цикла for, do-while или while и передает управление следующему за циклом выполняемому оператору. Еще один способ прерывания
– использование оператора goto, передающего управление какому-то оператору, расположенному вне тела цикла. Такой способ нарушает концепции структурного программирования и не рекомендуется к использованию.
Для прерывания циклов, размещенных в процедурах или функциях, можно воспользоваться стандартной процедурой exit. В отличие от оператора break, процедура exit прерывает не только выполнение цикла, но и выполнение той процедуры или функции, в которой расположен цикл.
Иногда внутри тела цикла возникает необходимость прервать только выполнение текущей итерации и перейти к следующей. В этом случае можно воспользоваться стандартной процедурой continue, которая передает управление
взаголовок цикла.
Пример 20. Написать программу, которая находит в массиве целых чисел первое отрицательное число и выводит его на экран.
const int n=10; int mas[n]; int i;
bool flag; //переменная–индикатор отсутствия отрицательных элементов в массиве flag=false;
for(i=0;i<n;i++)
{
}
printf("Введите %d элемент массива: ",i); scanf("%d",&mas[i]);
for (i=0;i<n;i++) //теперь ищем отрицательное число
{
if (mas[i] > 0) continue; // переходим в заголовок цикла
printf ("Первое отрицательное число = %d. Номер = %d\n",mas[i],i);
96
flag = true;
}
break; // отрицательное число найдено – можно прервать цикл
if (!flag) printf("Отрицательных чисел нет");
Форматированный ввод данных
Функция scanf() (прототип содержится в файле stdio.h) обеспечивает форматированный ввод. Ее можно записать в следующем формальном виде:
scanf ("<управляющая строка>", аргумент_1, аргумент_2,...);
Аргументы scanf() должны быть указателями на соответствующие значения. Для этого перед именем переменной записывается символ &. Назначение указателей будет рассмотрено далее.
Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться:
∙пробелы, символы табуляции и перехода на новую строку (все они игнорируются);
∙спецификации преобразования, состоящие из знака %, возможно, символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования;
∙обычные символы, кроме % (считается, что они должны совпадать с
очередными неизвестными символами во входном потоке).
Рассмотрим символы преобразования функции scanf() (указываются после символа %):
|
Таблица 9. |
|
Символы |
Символы преобразования функции scanf() |
|
Описание |
||
преобразования |
||
|
||
c |
на входе ожидается появление одиночного символа; |
|
d или i |
на входе ожидается десятичное целое число, и аргумент является |
|
указателем на переменную типа int; |
||
|
||
D или l |
на входе ожидается десятичное целое число, и аргумент является |
|
указателем на переменную типа long; |
||
|
||
е или Е |
на входе ожидается вещественное число с плавающей точкой; |
|
f |
на входе ожидается вещественное число с плавающей точкой; |
|
g или G |
на входе ожидается вещественное число с плавающей точкой; |
|
о |
на входе ожидается восьмеричное целое число, и аргумент является |
|
указателем на переменную типа int; |
||
|
97
О
s
x
Х
p
n
u
U [ ]
на входе ожидается восьмеричное целое число и аргумент является указателем на переменную типа long;
на входе ожидается появление строки символов; на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа int;
на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа long;
на входе ожидается появление указателя в виде шестнадцатеричного числа; применяется в операциях форматирования. Аргумент, соответствующий этому символу спецификации, должен быть указателем на целое. В него возвращается номер позиции (после ввода), в которой записана спецификация %n;
на входе ожидается беззнаковое целое число, и аргумент является указателем на переменную типа unsigned int;
на входе ожидается беззнаковое целое число и аргумент является указателем на переменную типа unsigned long;
сканирует входную строку для получения символов.
Перед некоторыми символами преобразования могут записываться следующие модификаторы:
|
Таблица 10. |
|
Модификаторы функции scanf() |
F |
изменяет указатель, заданный по умолчанию, на указатель типа far; |
N |
изменяет указатель, заданный по умолчанию, на указатель типа near; |
h |
преобразует аргумент к типу short int (может записываться перед символами d, i, о, u, х); |
l |
преобразует аргумент к типу long int (может записываться перед символами d, i, o, u, x); |
L |
преобразует аргумент к типу long double (может записываться перед символами е, f, g). |
|
Пример 21. Необходимо вести с клавиатуры целое число, символ и |
вещественное число.
int a; char b; float t;
scanf("%d", &a); scanf("%c", &b); scanf("%d%c%f",&a, &b, &t);
Пользователь осуществил ввод с клавиатуры в следующем виде:
431 <Enter>
W <Enter> 3.14 <Enter>
В этом случае, переменные получили следующие значения:
a → 431 b → ‘W‘ t → 3.14
98
Форматированный вывод данных
Функция printf() (прототип содержится в файле stdio.h) обеспечивает форматированный вывод. Ее можно записать в следующем формальном виде:
рrintf ("<управляющая строка>", аргумент _1, аргумент _2,...); Управляющая строка содержит компоненты трех типов: обычные
символы, которые просто копируются в стандартный выходной поток (выводятся на экран дисплея); спецификации преобразования, каждая из которых вызывает вывод на экран очередного аргумента из последующего списка; управляющие символьные константы.
Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом, задающим преобразование. Между знаком % и символом преобразования могут встречаться другие знаки в соответствии со следующим форматом:
% [признаки] [ширина_поля] [точность] [F|N|h|l|L] c_n
На месте параметра c_n (символ преобразования) могут быть записаны:
|
Таблица 11. |
|
Символы |
Символы преобразования функции printf() |
|
Описание |
||
преобразования |
||
|
||
с |
значением аргумента является символ; |
|
d или i |
значением аргумента является десятичное целое число; |
|
е |
значением аргумента является вещественное десятичное число в |
|
экспоненциальной форме вида 1.23e+2; |
||
|
||
Е |
значением аргумента является вещественное десятичное число в |
|
экспоненциальной форме вида 1.23E+2; |
||
|
||
f |
значением аргумента является вещественное десятичное число с |
|
плавающей точкой; |
||
|
||
g (или G) |
используется, как е или f, и исключает вывод незначащих нулей; |
|
о |
значением аргумента является восьмеричное целое число; |
|
|
значением аргумента является строка символов (символы строки |
|
s |
выводятся до тех пор, пока не встретится символ конца строки или же не |
|
|
будет, выведено число символов, заданное точностью); |
|
u |
значением аргумента является беззнаковое целое число; |
|
х |
значением аргумента является шестнадцатеричное целое число с цифрами |
|
0,..., 9, а, b, с, d, е, f; |
||
|
||
X |
значением аргумента является шестнадцатеричное целое число с цифрами |
|
0,..., 9, А, В, С, О, Е, F; |
||
|
||
р |
значением аргумента является указатель; |
|
n |
применяется в операциях форматирования. Аргумент, соответствующий |
|
|
этому символу спецификации, должен быть указателем на целое. В него |
|
|
возвращается номер позиции строки (отображаемой на экране), в которой |
99
записана спецификация %n.
Необязательные параметры в спецификации преобразования:
∙признак минус (-) указывает, что преобразованный параметр должен быть выровнен влево в своем поле;
∙признак плюс (+) требует вывода результата со знаком;
∙строка цифр, задающая минимальный размер поля (ширина поля). Здесь может так же использоваться символ *, который тоже позволяет задать минимальную ширину поля и точность представления выводимого числа;
∙точка (.), отделяющая размер поля от последующей строки цифр;
∙строка цифр, задающая максимальное число выводимых символов, или же количество цифр, выводимых справа от десятичной точки в значениях типов float или double (точность);
∙символ F, определяющий указатель типа far;
∙символ N, определяющий указатель типа near;
∙символ h, определяющий аргумент типа short int (используется вместе с символами преобразования d, i, о, u, х, Х);
∙символ l, указывающий, что соответствующий аргумент имеет тип long (в случае символов преобразования d, i, о, u, х, X) или double (в случае символов преобразования е, Е, f, g, G);
∙символ L, указывающий, что соответствующий аргумент имеет тип long double (используется вместе с символами преобразований е, Е, f, g, G);
∙символ #, который может встречаться перед символами преобразования g, f, е и перед символом х. В первом случае всегда будет выводиться десятичная точка, а во втором - префикс 0x перед соответствующим
шестнадцатеричным числом.
Если после знака % записан не символ преобразования, то он выводится на экран. Таким образом, строка %% приводит к выводу на экран знака %.
100