Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Цикл с предусловием (цикл while)Содержание книги
Поиск на нашем сайте Циклом с предусловием называется такой цикл, в котором истинность условия проверяется каждый раз перед выполнением операторов тела цикла. Синтаксис цикла с предусловием в С++: while (условие) оператор; Понятно, что цикл с предусловием может не выполниться ни одного раза, если условие будет ложным на первом же шаге цикла. Обратите внимание, что условие обязано стоять в скобках, так же, как для оператора if. Если операторов тела цикла несколько, нужно ставить их в операторные скобки {...}. Цикл while выполняется до тех пор, пока истинно (не равно нулю) условие. Таким образом, в следующем фрагменте: int a=0; while (a<10) a++; // цикл №1 while (a>10) a--; // цикл №2 while (a<10) a=0; // цикл №3 цикл № 1 выполнится 10 раз, цикл № 2 ни одного раза, а цикл № 3 будет выполняться бесконечное количество раз. Бесконечным или вечнымциклом (зацикливанием) называется цикл, число шагов которого не ограничивается условием. В случае цикла с предусловием зацикливание может выглядеть так: while (1) оператор; Вечный цикл – не обязательно программистская ошибка. Иногда его вставляют в программу специально, хотя это не лучшая практика – снижается читабельность и надежность. Естественно, в этом случае нужно предусмотреть выход внутри тела цикла. Пример. Программа для подсчета отрицательных чисел. Командой выхода будет ввод нуля. #include <stdio.h> void main () { int x, count=0; printf("Вводите целые числа\n"); printf("Выход - по вводу нуля\n"); while (1) // используем вечный цикл { scanf("%d", &x); if (x<0) count++; if (x==0) break; // выходим из цикла } printf("Вы ввели %d отрицательных чисел\n", count); } Ту же задачу можно решить более изящным образом – без зацикливания: #include <stdio.h> void main () { int x=1, count=0; printf("Вводите целые числа \n"); printf("Выход - по вводу нуля\n"); while (x!=0) { scanf("%d", &x); if (x<0) count++; } printf("Вы ввели %d отрицательных чисел\n", count); } Пример. Программа для подсчёта количества и суммы цифр во введённом натуральном числе. #include <stdio.h> void main() { long int n; // n – вводимое число int k=0, S=0, p; // k – количество цифр, S – сумма цифр printf("Введите натуральное число\n"); scanf("%li", &n); while (n!=0) { p=n%10; S=S+p; k++; n/=10; } printf("В данном числе %d цифр\n", k); printf("Сумма цифр равна %d \n", S); } Пример. Программа для решения задачи: «Стоимость буханки хлеба на данный момент 4 рубля, пакета молока – 3 рубля. Каждый месяц цена на хлеб повышается на 10%, а на молоко – на 15%. Через сколько месяцев буханка хлеба будет стоить дешевле пакета молока?». #include <stdio.h> void main() { int n=0; float h=4.0, m=3.0; while (m<=h) { h=1.1*h; // тоже самое, что h=h+0.1*h m=1.15*m; // тоже самое, что m=m+0.15*m n++; } printf("Через %d месяцев\n", n); } Пример. Программа нахождения наибольшего общего делителя двух натуральных чисел. Алгоритм Евклида нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел: Пусть x и y – одновременно не равные нулю целые неотрицательные числа, и пусть x ≥ y. Если y = 0, то НОД(x, y) = x, а если y ≠ 0, то для чисел x, y и r, где r – остаток от деления x на y, выполняется равенство НОД(x, y) = НОД(y, r). Например, пусть x = 48, а y = 18. НОД(48, 18) = НОД(18, 12) = НОД(12,6) = НОД(6, 0) = 6. #include <stdio.h> void main() { int a, b; printf("Введите два натуральных числа \n"); scanf("%d%d",&a,&b); while (a!=0 && b!=0) if (a>b) a=a%b; else b=b%a; printf("НОД этих чисел равен %d\n", a+b); } Пример. Найти сумму ряда #include <stdio.h> void main() { int n=1; float S=0.0, eps; printf("Введите eps >0\n"); scanf("%f", &eps); while (1.0/(n*n)>eps) { S=S+1.0/(n*n); n++; } printf("Сумма ряда S = %f\n", S); } Результат работы программы: Введите eps >0 0.001 Сумма ряда S = 1.613191 Press any key to continue Введите eps >0 0.0001 Сумма ряда S = 1.634984 Press any key to continue 7.3. Цикл с постусловием (цикл do … while) Циклом с постусловием называется цикл, в котором истинность условия проверяется каждый раз после выполнения тела цикла. В языке С++ синтаксис цикла с постусловием таков: do оператор; while (условие); Как и для цикла while, условие обязательно ставится в скобки, а если в теле цикла несколько операторов, мы заключаем их в операторные скобки {...}. Даже если условие сразу окажется ложным, тело цикла мы выполняем еще до его проверки, значит, цикл с постусловием обязательно выполнится хотя бы один раз. Как цикл с предусловием, цикл do...while выполняется до тех пор, пока условие остается истинным. Таким образом, в следующем фрагменте: int a=0; do a++; while (a<10); // цикл №1 do a--; while (a>10); // цикл №2 do a=0; while (a<10); // цикл №3 В этом примере цикл №1 выполнится 10 раз, цикл №2 – один раз (!), а цикл №3 – опять вечный. Пример. Программа для подсчета нечетных чисел. Командой выхода будет ввод нуля. #include <stdio.h> void main () { int x, count=0; printf("Вводите целые числа, а я буду считать нечетные\n"); printf("Выход - по вводу нуля\n"); do { scanf("%d", &x); if (x%2!=0) count++; } while (x!=0); printf("Вы ввели %d нечетных чисел\n", count); } Пример. Программа поиска первого числа Фибоначчи, большего m (m >1). Последовательность Фибоначчи образуется так: первый и второй члены последовательности равны 1, каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, …). #include <stdio.h> void main() { int m, a=1, b=1, c; printf("Введите натуральное число, большее 1\n"); scanf("%d",&m); do { c=a+b; a=b; b=c; } while (c<=m); printf("Искомое число Фибоначчи равно %d\n", c); } Вложенные циклы Циклы можно вкладывать друг в друга, при этом на разных уровнях могут использоваться циклы разных типов. Для вывода таблиц, обработки значений функции двух переменных используются двойные циклы. Циклы закрываются по "принципу матрешки": первый цикл закрывается последним. Вот так: while (...) { // while-начало for (...) { // for-начало } // for-конец } // while-конец Пример. Вывод на экран таблицы чисел 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 #include <stdio.h> void main() { for (int i=1; i<=4; i++) // меняется по строкам { for (int j=1; j<=5; j++) // меняется по столбцам printf("%2d", j); // вывод нескольких столбцов printf("\n"); // переход на следующую строку } } Пример. Вывод на экран треугольной таблицы, состоящей из чисел:
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 #include <stdio.h> void main() { for (int i=1; i<=5; i++) { for (int j=1; j<=i; j++) printf("%2d", i); printf("\n"); } } Пример. Программа для вывода на экран всех трехзначных чисел, сумма цифр которых равна заданному натуральному числу n 1-й способ. Без использования вложенных циклов. #include <stdio.h> void main() { int n,x,a,b,c; // n – введенное число, x – трехзначное число printf("Введите 1<=n<=27\n"); scanf("%d",&n); for (x=100; x<=999; x++) { a=x/100; // a – число сотен b=x/10%10; // b – число десятков с=x%10; // c – число единиц if (a+b+c==n) printf("%4d", x); } printf("\n"); } 2-й способ. С использования вложенных циклов. #include <stdio.h> void main() { int n,a,b,c; printf("Введите 1<=n<=27\n"); scanf("%d",&n); for (a=1; a<=9; a++) for (b=0; b<=9; b++) for (c=0; c<=9; c++) if (a+b+c==n) printf("%4d", a*100+b*10+c); printf("\n"); } Пример. Программа для графического изображения делимости чисел от 1 до n (n задается). В каждой строке отображается очередное число и столько плюсов, сколько делителей у этого числа. Например, если задано число 4, на экран будет выведено: 1+ 2++ 3++ 4+++ #include <stdio.h> void main() { int n,i,d; printf("Введите натуральное число n\n"); scanf("%d",&n); for (i=1; i<=n; i++) { printf("%d",i); for (d=1; d<=i; d++) if (i%d==0) printf("+"); printf("\n"); } } Пример. Программа поиска простых чисел от 2 до 50. Простым является число, которое делится без остатка только на единицу и само себя. 1-й способ. Для каждого проверяемого числа num (внешний цикл от 2 до 50) вычисляется количество делителей (внутренний цикл от 1 до num). Если количество делителей равно двум, то это число простое, следовательно, оно выводится на экран. #include <stdio.h> void main() { int k; for (int num=2; num<=50; num++) // num – проверяемое число { k=0; // k – количество делителей числа // delit – возможные делители for (int delit=1; delit<=num; delit++) if (num%delit==0) k++; if (k==2) printf("%3d", num); } printf("\n"); } Результат работы программы: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 Press any key to continue 2- й способ. Для каждого числа num (внешний цикл от 2 до 50) ищется первый делитель, больший 1 (внутренний цикл). Если найденный делитель равен самому числу, то это число простое, следовательно, оно выводится на экран. #include <stdio.h> void main() { int delit; for (int num=2; num<=50; num++) { delit=1; do delit++; while (num%delit!=0); if (delit==num) printf("%3d", num); } printf("\n"); } Данный вариант программы выполняется быстрее, чем предыдущий.
|
||
|
Последнее изменение этой страницы: 2021-01-08; просмотров: 225; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.10 (0.009 с.) |