Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект Лекций «программирование На Языке Высокого Уровня Си» По Информатике (Попов Д. И.).pdf
Скачиваний:
157
Добавлен:
07.10.2014
Размер:
1.31 Mб
Скачать

Операторы прерывания циклов

В некоторых случаях необходимо прервать повторение цикла, проанализировав какие-то условия внутри тела цикла. Это может потребоваться

втех случаях, когда проверки условия для окончания цикла громоздкие, требуют многоэтапного сравнения и сопоставления каких-то данных, и все эти проверки просто невозможно разместить в выражении условия операторов 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