C. Бочков - Язык программирования Си для персонального компьютера
- Название:Язык программирования Си для персонального компьютера
- Автор:
- Жанр:
- Издательство:СП Диалог, Радио и связь
- Год:1990
- ISBN:5-256-00974-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
C. Бочков - Язык программирования Си для персонального компьютера краткое содержание
Книга содержит полное описание наиболее распространенных реализаций языка программирования Си на 16-разрядных микроЭВМ, совместимых с IBM PC. Приведено описание стандартных библиотек языка.
Для слушателей учебных курсов в области программирования, разработчиков программного обеспечения, а также студентов соответствующих специальностей вузов. Может быть использовано как техническая документация и справочное пособие для широкого круга программистов, как профессионалов, имеющих большой опыт работы на языке Си, так и начинающих программировать на Си.
Язык программирования Си для персонального компьютера - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Выполнение тела оператора-переключателя switchначинается с выбранного таким образом оператора и продолжается до конца тела или до тех пор, пока какой-либо оператор не передаст управление за пределы тела.
Оператор, следующий за ключевым словом default, выполняется, если ни одна из констант варианта не равна значению выражения переключения. Если же слово defaultопущено, то ни один оператор в теле переключателя не выполняется, и управление передается на оператор, следующий за переключателем в программе.
Выражение переключения должно иметь целочисленный тип. В версии 4 СП MSC этот тип не должен превышать по размеру int; в версии 5 СП MSC и в СП ТС это может быть любой целочисленный тип (в том числе enum). Однако в версии 5 СП MSC выражение переключения всегда преобразуется к типу int. Если при этом преобразовании возможна потеря значащих битов, то компилятор выдаст предупреждающее сообщение. Тип каждой константы варианта также приводится к типу выражения переключения.
Синтаксически конструкции caseи defaultявляются метками (однако, на них нельзя передать управление по оператору goto). Метки caseи defaultсущественны только при начальной проверке, когда выбирается оператор для выполнения в теле переключателя. Все операторы тела, следующие за выбранным, выполняются последовательно, как бы "не замечая" меток caseи default, если только какой-либо из операторов не передаст управление за пределы тела оператора switch. Для выхода из тела переключателя обычно используется оператор разрыва break. Одна из распространенных ошибок состоит в том, что программисты забывают разделять альтернативные операторы в теле переключателя операторами break.
В заголовок составного оператора, формирующего тело оператора switch, можно помещать объявления (см. раздел 5.3), но инициализаторы, включенные в объявления, не будут выполнены, поскольку при выполнении оператора switchуправление непосредственно передается на выполняемый оператор внутри тела, обходя строки, которые содержат инициализацию.
Примеры:
/* пример 1 */
switch (с) {
case 'А': capa++;
case 'a': lettera++;
default: total++;
}
/* пример 2 */
switch (i) {
case -1: n++;
break;
case 0: z++;
break;
case 1: p++;
break;
}
/* пример 3 */
switch (i) {
case 1: if(a > 0) {
case 2: b =3;
} else
case 3: k = 0;
}
В первом примере все три оператора в теле оператора switchвыполняются, если значение сравно 'А'. Передача управления осуществляется на первый оператор ( capa++;), далее операторы выполняются в порядке их следования в теле.
Если сравно 'а', те инкрементируются переменные letteraи total. Наконец, если сне равно 'А' или 'а', то инкрементируется только переменная total.
Во втором примере в теле оператора switchпосле каждого оператора следует оператор разрыва break, который осуществляет принудительный выход из тела оператора-переключателя switch. Если iравно -1, переменная nинкрементируется. Оператор break, следующий за оператором n++, вызывает передачу управления за пределы тела переключателя, минуя остающиеся операторы. Аналогично, если iравно нулю, инкрементируется только переменная z; если iравно 1, инкрементируется только переменная р. Передний оператор breakне является обязательным, поскольку без него управление все равно перешло бы на конец составного оператора, но он включен для единообразия.
В третьем примере при i, равном 1, будет выполнена следующая последовательность действий:
if(а > 0)
b =3;
else
k = 0;
При i, равном 2, переменной b будет присвоено значение 3. При i, равном 3, переменная k будет обнулена.
Оператор в теле переключателя может быть помечен множественными метками case, как показано в следующем примере:
switch (с) {
case 'а':
case 'b':
case 'с':
case 'd':
case 'e':
case 'i': hexcvt(c);
}
В этом примере, если выражение переключения примет любое из значений 'а', 'b', 'с', 'd', 'e', 'i', будет вызвана функция hexcvt.
Оператор разрыва break
Синтаксис:
break;
Действие:
Оператор разрыва breakпрерывает выполнение операторов do, for, whileили switch. Он может содержаться только в теле этих операторов. Управление передается оператору программы, следующему за прерванным. Появление оператора breakвне операторов do, for, while, switchкомпилятор рассматривает как ошибку.
Если оператор разрыва breakзаписан внутри вложенных операторов do, for, while, switch, то он завершает только непосредственно охватывающий его оператор do, for, while, switch. Если же требуется завершение более чем одного уровня вложенности, следует использовать операторы возврата returnи перехода goto.
Пример:
for(i = 0; i < LENGTH; i++) {
for(j = 0; j < WIDTH; j++)
if(lines[i][j] =='\0') break;
lengths[i] = j;
}
В вышеприведенном примере построчно обрабатывается массив строк переменной длины lines. Именованная константа LENGTH задает количество строк в массиве LINES. Именованная константа WIDTH задает максимально допустимую длину строки. Задача состоит в заполнении массива lengthsдлинами всех строк массива lines. Оператор разрыва breakпрерывает выполнение внутреннего цикла forпри обнаружении признака конца символьной строки ( \0'). После этого i-му элементу одномерного массива length [i]присваивается длина i-й строки в байтах. Управление передается внешнему оператору цикла for. Переменная iинкрементируется и процесс повторяется до тех пор, пока значение iне станет больше или равно значению константы LENGTH.
Оператор перехода goto
Синтаксис:
goto < метка >;
.
.
.
< метка >: < оператор >
Действие:
Оператор перехода gotoпередает управление непосредственно на < оператор >, помеченный < меткой >. Метка представляет собой обычный идентификатор, синтаксис которого описан в разделе 1.3. Область действия метки ограничивается функцией, в которой она определена; из этого следует, во-первых, что каждая метка должна быть отлична от других меток в той же самой функции; во-вторых, что нельзя передать управление по оператору gotoв другую функцию.
Помеченный оператор выполняется сразу после выполнения оператора goto. Если оператор с данной меткой отсутствует или существует более одного оператора, помеченного той же меткой, то компилятор сообщает об ошибке. Метка оператора имеет смысл только для оператора goto. При последовательном выполнении операторов помеченный оператор выполняется так же, как если бы он не имел метки.
Читать дальшеИнтервал:
Закладка: