Лекция №5 Циклы Цикл while while (<выражение>) <инструкция> Пример: while (i > 0) { i--; printf("%d\n", i); } Выражение Да Инструкция Нет Цикл do…while do <инструкция> while (<выражение>); Пример: do { scanf("%d", &n); } while (n == 0); Инструкция Нет Выражение Да Цикл for for (<выражение 1>; <выражение 2>; <выражение 3>) <инструкция> Выражение 1 Выражение 2? Пример 1: for (i = 0; i < 7; i++) printf("%d", i); Пример 2: for (;;); Да Инструкция Выражение 3 Нет Цикл while Задача: вычислить xn x x2 xk e 1 ... ...; 1! 2! k! n 0 n! x i = 2; b = 1.0; r = x; while (r > eps || r < -eps) { b = b + r; r = r * x / i; i++; } Цикл do…while Задача: вычислить xn x x2 xk e 1 ... ...; 1! 2! k! n 0 n! x i = 1; b = 0.0; r = 1.0; do { b = b + r; r = r * x / i; i++; } while (r > eps || r < -eps) Цикл for Задача: вычислить b = r = for { b r } n 2 k x x x x e x 1 ... ...; 1! 2! k! n 0 n! 1.0; x; (i = 2 ; r > eps || r < -eps; i++) = b + r; = r * x / i; Цикл for Задача: вычислить n 2 k x x x x e x 1 ... ...; 1! 2! k! n 0 n! for (i=2, b=1.0, r=x ; r > eps || r < -eps; i++) { b = b + r; r = r * x / i; } Цикл for Задача: вычислить n 2 k x x x x e x 1 ... ...; 1! 2! k! n 0 n! for (i=2, b=1.0, r=x ; r > eps || r < -eps; b = b + r, r = r * x / i, i++); Инструкции break и continue Инструкция break вызывает немедленный выход из самого внутреннего из объемлющих ее циклов Инструкция continue вынуждает ближайший объемлющий ее цикл (for, while или dowhile) начать следующий шаг итерации. Инструкции break и continue Пример использования break: for (i = 0; i < 10; i++) { scanf("%d", &n); if (n == 0) { printf("Ошибка!\n"); break; } } Пример использования continue: i = 1; while (i <= 10) { printf(“%d-е число:",i); scanf("%d", &n); if (n == 0) continue; i++; } Массивы (arrays) Индексные массивы Индексный массив — структура данных, предназначенная для хранения набора единиц данных, каждая из которых идентифицируется индексом или набором индексов. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Объявление массива Синтаксис: <тип> <переменная>[<размер массива>] Пример: int a[10]; Определяет массив a размера 10, т. е. блок из 10 последовательных объектов типа int с именами a[0], a[1], ..., a[9]. a: a[0] a[1] … a[9] Работа с массивами Пример: int a[10]; int i; printf("Введите 10 значений"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); int max = a[0]; int sum = a[0]; for (i = 1; i < 10; i++) { if (max < a[i]) max = a[i]; sum += a[i]; } printf("Максимальное значение: %d. Среднее значение: %.2f", max, sum / 10); Инициализация массивов int month[12]; month[0] = 31; month[1] = 28; month[2] = 31; month[3] = 30; month[4] = 31; month[5] = 30; month[6] = 31; month[7] = 31; month[8] = 30; month[9] = 31; month[10] = 30; month[11] = 31; int month[12] = {31,28,31,30,31,30,31, 31,30,31,30,31};