
- •Алгоритмизация и основы программирования
- •Оглавление
- •Библиографический список
- •Характеристики операций
- •Комментарии к операциям
- •Правила преобразований типов в выражениях
- •В присваиваниях
- •Характеристики операторов
- •Описания операторов Пустой оператор
- •Оператор безусловного перехода
- •Операторы условного перехода Оператор if
- •Оператор if-else if
- •Оператор переключатель switch
- •Операторы цикла Оператор цикла for
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием do-while
- •7. Основные типы данных
- •8. Приведение целых и вещественных типов
- •9. Приведение целых и вещественных выражений
- •10. Линейное уравнение
- •11. Ввод русской буквы
- •12. Таблица умножения
- •13. Ascii-таблица
- •14. Машинный ноль и машинный эпсилон
- •Дополнительные задания
- •Ответы к заданиям 1-9
Оператор цикла с постусловием 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;
}