Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРабота 02-Операции и операторы.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
278.53 Кб
Скачать

Оператор цикла с постусловием do-while

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do тело while (выражение);

Схема выполнения оператора do while :

1. Выполняется тело цикла (которое может быть составным оператором).

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Операторы while и do while могут быть вложенными.

Пример:

int i,j,k;

...

i=0; j=0; k=0;

do { i++;

j--;

while (a[k] < i) k++;

}

while (i<30 && j<-30);

Практические задания

Убираем оператор goto

Запишите без оператора goto следующий фрагмент

m: if(A)

{

B;

goto m;

}

Упрощаем логические выражения

Перепишите операторы условного перехода так, чтобы их условия не содержали логических операций.

if(A && B || !C)

D;

else if(B || C)

E;

else

F;

Взаимозаменяемость циклов

Вычислить факториал n! тремя способами с помощью трех видов цикла.

Компактный for

Запишите двойной цикл

for (int i = 0; i<5; i++)

{

printf(“\n”);

for (int j = 0; j<4; j++)

printf(“%3d”, i*j);

}

с помощью одинарного цикла с теми же счетчиками i, j.

Обходимся без операторов условного перехода

Замените оператор

if(A)

B;

Эквивалентным оператором цикла for.

Лабораторные задания

Лабораторные задания

1. Основные арифметические операции

Что напечатает следующая программа?

#include <stdio.h>

main()

{

int x;

x= -3 + 4 * 5 - 6; printf("%d\n",x);

x= 3 + 4 % 5 - 6; printf("%d\n",x);

x= -3 * 4 % - 6 / 5 ; printf("%d\n",x);

x= (7 + 6) % 5 / 2 ; printf("%d\n",x);

return 0;

}

2. Операции присваивания.

Что напечатает следующая программа ?

#include <stdio.h>

#define PRINTX printf("%d\n",x)

main()

{

int x=2,y,z;

x *= 3 + 2; PRINTX;

x *= y = z =4 ; PRINTX;

x = y == z; PRINTX;

x == (y = z); PRINTX;

return 0;

}

3. Логические операции и операции инкремента.

Что напечатает следующая программа ?

#include <stdio.h>

#define PRINT(int) printf("%d\n",int)

main()

{

int x,y,z;

x=2; y=1; z=0;

x = x && y || z; PRINT(x);

PRINT(x || ! y && z);

x=y=1;

z = x ++ - 1; PRINT(x);

PRINT(z);

z += - x ++ + ++ y; PRINT(x);

PRINT(z);

z = x / ++ x; PRINT(z);

return 0;

}

4. Поразрядные операции.

Что напечатает следующая программа ?

#include <stdio.h>

#define PRINT(int) printf("%d\n",int)

main()

{

int x,y,z;

x=03; y=02; z=01;

PRINT( x | y & z );

PRINT( x | y & ~z );

PRINT( x ^ y & ~z );

PRINT( x & y && z );

x=1; y=-1;

PRINT( ! x | x );

PRINT( ~ x | x );

PRINT( x ^ x );

x <<= 3; PRINT(x);

y <<= 3; PRINT(y);

y >>= 3; PRINT(y);

return 0;

}

5. Отношения и условия

Что напечатает следующая программа ?

#include <stdio.h>

#define PRINT(int) printf("%d\n",int)

main()

{

int x=1,y=1,z=1;

x += y += z;

PRINT( x < y ? y : x );

PRINT( x < y ? x ++ : y ++ );

PRINT(x);

PRINT(y);

PRINT( z += x < y ? x ++ : y ++);

PRINT(y);

PRINT(z);

x=3; y=z=4;

PRINT( (z >= y >= x) ? 1 : 0);

PRINT( z >= y && y >=x );

return 0;

}

6. Выполнение операций и их приоритеты

Что напечатает следующая программа ?

#include <stdio.h>

#define PRINT(x,y,z) printf("x=%d\t y=%d\t z=%d\n",x,y,z)

main()

{

int x,y,z;

x=y=z=1;

++ x || ++ y && ++ z; PRINT(x,y,z);

x=y=z=1;

++ x && ++ y || ++ z; PRINT(x,y,z);

x=y=z=1;

++ x && ++ y && ++ z; PRINT(x,y,z);

x=y=z=-1;

++ x && ++ y || ++ z; PRINT(x,y,z);

x=y=z=-1;

++ x || ++ y && ++ z; PRINT(x,y,z);

x=y=z=-1;

++ x && ++ y && ++ z; PRINT(x,y,z);

return 0;

}