Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 357.docx
Скачиваний:
27
Добавлен:
30.04.2022
Размер:
1.75 Mб
Скачать

7.2. Приемы эффективного построения циклов

Язык Си обеспечивает широкие возможности по организации циклов, поэтому при написании программ трудно определить, какой оператор следует выбрать. Все, что можно сделать с помощь while можно сделать и с for. Применение цикла for предпочтительно, когда явно используется инициализация и модификация переменной, а while удобнее, когда этого не требуется.

Если обязательно следует выполнить цикл хотя бы раз – лучше использовать do-while.

Оператор break следует использовать, если необходимо выйти из цикла в произвольной точке тела цикла.

Оператор continue – если следует продолжить повторение, но в некоторой итерации требуется пропустить часть операторов цикла.

В некоторых случаях для управления выходом из цикла очень удобны флаги. Флагом принято называть переменную, принимающую значение 1, если выполнено некоторое условие или произошло определенное событие.

Рис. 7.2. Управление циклом с операторами break и continue

7.3. Примеры построения циклов

Пример 1. Программа вычисления 100 чисел Фибоначчи

Числа Фибоначчи — элементы числовой последовательности, в которой каждое последующее число равно сумме двух предыдущих чисел:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, …

Такую программу легко реализовать в цикле. Две переменные используются для хранения двух предшествующих элементов, третья – в качестве счетчика элементов последовательности. В теле цикла каждый следующий элемент вычисляется как сумму предшествующих и осуществляется замена предшествующего значения вычисленным.

int main (void)

{

int f,g,h;

g=0; h=1;//инициализированы первые два числа

printf(“%d \t%d \t ”,g,h);//вывод первых элементов

for (int i=2;i<100;i++)

{

f=g+h;//вычисление суммы предшествующих чисел

printf(“%d \t”,f);//вывод числа

h=g;//сдвиг последовательности

g=f;//текущее значение становится предшествующими

}

return 0;

}

Пример 2. Программа-счетчик повторений

#include<stdio.h> //Для printf и puts

#include <process.h> //Для system

int main (void)

{

int MyTik=0; //Счетчик остановок работы

puts ("Остановка работы на 5 тактов");

//Цикл на пять тактов

while (MyTik<5)

{

//Вывод оставшегося времени до возобновления работы

printf ("Осталось %d такт.\n",5-MyTik);

//Приостановка работы до нажатия клавиши

system("pause");

//Увеличение на 1 счетчика приостановок

MyTik++;

}

//Вывод сообщения о возобновлении работы

puts ("Работа возобновлена");

return 0;

}

Эта же задача с использованием цикла for:

intmain (void)

{

puts ("Остановка работы на 5 тактов");

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

{

printf ("Осталось %d такт.\n",5-MyTik);

system("pause");

}

puts ("Работа возобновлена");

return 0;

}

Пример 3. Программа, иллюстрирующая универсальность цикла for.

#include <stdio.h>

main(void) {

int num=0;

for(printf("Запоминайте введенные числа!\n"); num != 5; scanf(" %d", &num));//!пустой оператор в теле цикла

printf("Это как раз то, что я хочу!\n");

return 1;

}

Пример 4. Программа, определяющая, есть ли во введённом пятнадцатизначном числе цифра 5.

main()

{

long long int i;

puts("Введите число\n");

scanf("%lld", &i);

while (i!=0)

{

if (i % 10 == 5)

{

puts("Да, цифра 5 имеется в числе\n");

system("pause");

return;

}

i = (int)(i / 10);

}

printf("Нет, цифры 5 в числе нет\n");

system("pause");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]