Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000101.doc
Скачиваний:
9
Добавлен:
30.04.2022
Размер:
370.18 Кб
Скачать

While(выражение) оператор;

Оператор тела цикла выполняется до тех пор, пока истинно выражение, записанное в скобках.

Выражение вычисляется до начала и после каждого прогона цикла. Цикл не выполняется ни разу, если выражение ложно (равно 0).

Фрагмент программы вычисления суммы чисел от 0 до 9:

#include <iostream.h>

void main() {

int counter=0, add_counter=0;

while(counter++<10) {

// тело цикла состоит не из одного оператора, поэтому заключено в { }

cout<<“Значение counter“<<counter<<endl; add_counter+=counter; }

cout<<“Значение суммы “<<add_counter<<endl; }

Цикл с пост-условием do while имеет вид:

do

оператор;

while(условие);

Оператор тела цикла выполняется до тех пор, пока истинно условие. Условие проверяется после выполнения оператора тела цикла.

Фрагмент программы копирования строки в строку:

void main() {

char *р, *s;

s=“string_s\0”; // строка заканчивается признаком конца - \0

do

*р++=*s++; // копирование строки

while(*s); } // завершение цикла по концу строки

Оператор continue возвращает управление на начало цикла, пропуская стоящие после него операторы цикла.

Оператором break можно завершить цикл.

Оператор безусловного перехода goto метка; передает управление на оператор, перед которым стоит метка. Метка представляет собой идентификатор с двоеточием и может стоять перед любым выполняемым оператором.

Контрольные вопросы

1. Чем отличаются циклы с пост- и предусловием?

2. Каковы отличия действий операторов break и continue?

3. Для чего применяется оператор switch ?

4. Приведите примеры использования операторов ветвления.

4. Сложные типы данных

4.1. Составные деклараторы

Справедлива формула:

декларатор + спецификатор типа = объявления

Объявление переменной любого типа состоит из спецификатора типа и декларатора. Составной декларатор - это идентификатор, определяемый более, чем одним модификатором массива, указателя или функции. Интерпретация составного декларатора подчиняется правилам:

1) квадратные и круглые скобки имеют одинаковый приоритет и рассматриваются слева направо;

2) приоритет скобок выше приоритета звёздочки;

3) спецификатор типа рассматривается на последнем шаге;

4) круглые скобки могут изменять порядок интерпретации.

Простые деклараторы: j, i[10], M[const1], *adr, f( ).

Составные деклараторы: *i[10], **рtr, (*j)[10].

Объявления: int j; float M[const1]; char *adr; void f(void);

char *i[10]; // массив указателей на переменные символьного типа

char **рtr; // указатель на указатель типа char

float (*j)[10]; // указатель на массив из 10 элементов типа float

4.2. Перечисления

Переменную типа перечисления можно описать одним из способов:

enum [tag] {список} идентификатор [, . . . , идентификатор];

enum tag идентификатор [, . . . , идентификатор];

В квадратных скобках здесь и далее указываются необязательные данные.

Переменная принимает значение одной из поименованных констант списка, принимающих целые значения. Переменной перечисления выделяется память, необходимая для целой переменной. Tag именует заданный тип.

Во втором варианте описания tag ссылается на тип перечисления, объявленный в другом месте. Если этого объявления нет, либо оно находится вне пределов видимости, то выдается сообщение об ошибке.

enum sр1{s1,s2,s3} id1; enum{s1,s2,s3} id2; enum{р1,р2,р3}id3, id4;

В списке перечисления константам могут присваиваться значения:

enum { р1= 0, р2 = 5, р3 } id4;

Если нет явного присваивания, то первой константе соответствует значение 0, второй - 1, т. е. каждый раз значение константы увеличивается на 1. Значения констант в списке могут совпадать, но имена должны быть уникальными. Имена не могут совпадать с именами в других списках перечислений, находящихся в зоне видимости.

enum day{sat, sun=0, mon, tuesday, wend, thursday, friday} workday;

enummodes{lastmode=-1,BW40=0,C40,BW80,C80,MONO=7}workmode;

По умолчанию sat=0; mon=1; tuesday=2; wend=3; thursday=4; friday=5.