Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная для Вт-207 (Си).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
354 Кб
Скачать
☆

Тема №4 Программы циклической структуры

ОСНОВНЫЕ СВЕДЕНИЯ

4.1. Операторы циклов

В языке Си существует 3 вида циклов: 1) цикл с параметром или цикл типа for; 2) цикл с предусловием или цикл типа while, 3) цикл с постусловием или цикл типа do ... while . Во всех этих циклах условие продолжения цикла заключается в круглые скобки. В циклах типов for и while повторяющаяся часть состоит из одного оператора, если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор. В цикле с постусловием тело цикла помещается между словами do и while. В отличие от цикла с предусловием, цикл с постусловием выполнится хотя бы один раз. Циклы с пред- и постусловием продолжаются, если условие продолжения истинно.

4.2 Цикл с параметром

Цикл for используется тогда, когда количество повторений цикла заранее известно или может быть вычислено. Цикл for состоит из заголовка и тела цикла. В заголовке после слова for в круглых скобках записываются через точку с запятой три выражения:

А) начальные значения: операторы присваивания, которые выполняются один раз перед выполнением цикла;

В) условие, при котором выполняется следующий шаг цикла; если условие неверно, работа цикла заканчивается; если оно неверно в самом начале, цикл не выполняется ни одного раза (говорят, что это цикл с предусловием, то есть условие проверяется перед выполнением цикла);

С) действия в конце каждого шага цикла (в большинстве случаев это операторы присваивания).

В каждой части заголовка может быть несколько операторов, разделенных запятыми.

Примеры заголовков:

for ( i = 0; i < 10; i ++ ) { ... }

for ( i = 0, x = 1.; i < 10; i += 2, x *= 0.1 ){ ... }

• Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить.

• В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»).

• Для того, чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа (запись «лесенкой»).

Пример вычисления суммы квадратов натурального ряда чисел от 1 до n.

S= = 12 + 2 2 + . . . + n 2.

//lab3_1 сумма квадратов натурального ряда

#include <stdio.h>

main()

{ int S,n,i;

printf(“Введите n ”); scanf(“%d”,&n);

for (S=0, i=1; i<=n; i++)

S+=i*i; // соответствует S=S+i*i

printf (“n=%d S=%d”,n,S);

}

В разделе инициализации присваиваются начальные значения переменным S и i. При i, не превышающем n, цикл повторяется, иначе выполняется выход из цикла. Оператор инкремента i++ (или декремента i--), эквивалентен i=i +1 (i=i-1). Для досрочного выхода из цикла и перехода на следующий оператор после цикла используется оператор break. Для пропуска всех операторов, оставшихся до конца тела цикла и перехода к следующему повторению цикла используется оператор continue.

4.3 Циклы с неизвестным количеством повторений

Циклы while или repeat используются тогда, когда количество повторений цикла заранее неизвестно и не может быть вычислено.

Цикл while состоит из заголовка и тела цикла.

В заголовке после слова while в круглых скобках записывается условие, при котором цикл продолжает выполняться. Когда это условие нарушается (становится ложно), цикл заканчивается.

В условии можно использовать знаки логических отношений и операций

> < больше, меньше

>= <= больше или равно, меньше или равно

== равно

!= не равно

Если условие неверно в самом начале, то цикл не выполняется ни разу (это цикл с предусловием). Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается; в таком случае говорят, что программа «зациклилась» — это серьезная логическая ошибка. В языке Си любое число, не равное нулю, обозначает истинное условие, а ноль - ложное

Условие

while ( 1 ){ ... } // бесконечный цикл

while ( 0 ){ ... } // цикл не выполнится ни разу

Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить. В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»). Для того, чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа.

Цикл do-while также используется тогда, когда количество повторений цикла заранее неизвестно и не может быть вычислено.

Цикл do-while состоит из заголовка do, тела цикла и завершающего условия.

Условие записывается в круглых скобках после слова while, цикл продолжает выполняться, пока условие верно; когда условие становится ложным, цикл заканчивается. Условие проверяется только в конце очередного шага цикла (это цикл с постусловием),

таким образом, цикл всегда выполняется хотя бы один раз. Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается, т.е. программа зацикливается. Тело цикла также заключается в фигурные скобки; если в теле цикла стоит всего один оператор,

скобки можно не ставить. В тело цикла могут входить любые другие операторы, в том числе и другие циклы.

Рассмотрим пример из предыдущей работы - вычисление суммы квадратов натурального ряда чисел от 1 до n.

S= = 12 + 2 2 + . . . + n 2.

Изменим условие в этом примере: Определить число n, при котором сумма чисел S предыдущего ряда не превысит величину K, введенную с клавиатуры. Такую программу можно реализовать с помощью циклов предусловия или постусловия следующим образом:

// циклы while и do…while

#include<stdio.h>

#include<conio.h>

main()

{int K,S, i;

clrscr(); // очистка экрана перед выводом

printf (“Введите К ”); scanf (“%d”, &K);

// цикл с предусловием //цикл с постусловием

S=0; S=0; i=0;

i= 0; do

while ( S<K) { i++ ; S+=i*i }; { i++; S+=i*i; }

while ( S<K) ;

printf (“n=%d S=%d\n”, i, S);

getch();

}

Отличие этих программ: если ввести К<1, то в программе с предусловием получим S=0, i=0 ; а в программе с постусловием S=1, i=1.

СПИСОК ЗАДАЧ

Использовать цикл с параметром

  1. Составьте программу, выводящую на экран квадраты чисел от 10 до 20.

  2. Составьте программу, которая вычисляет сумму чисел от 1 до 100.

  3. Составьте программу, которая вычисляет сумму чисел от 1 до N. Значение N вводится с клавиатуры.

  4. Составьте программу, которая вычисляет произведение чисел от 1 до N. Значение N вводится с клавиатуры.

  5. С клавиатуры вводятся N чисел. Составьте программу, которая определяет количество отрицательных, количество положительных и количество нулей среди введенных чисел. Значение N вводится с клавиатуры.

  6. Дано натуральное число n. Получить все пифагоровы тройки натуральных чисел, каждое из которых не превосходит n, т.е. все такие тройки натуральных чисел a, b, c, что a2 + b2 = c2.

  7. Два натуральных числа называют дружественными, если каждое из них равно сумме всех делителей другого, кроме самого этого числа. Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300.

  8. Составьте программу, которая печатает таблицу перевода расстояний из дюймов в сантиметры (1 дюйм = 2,5 см) для значений длин от 1 до 20 дюймов.

  9. Составить алгоритмы и программы перевода старинных русских мер длины, торгового и аптекарского веса (счетчик цикла меняется от 1 до 10):

  • драхм в граммы (1 драхма равна 3,7325 г)

  • унций в граммы (1 унция равна 29,86 г)

  • фунтов в килограммы (1 фунт равен 0,40951 кг)

  1. Даны натуральные числа от 20 до 50. Напечатать те из них, которые делятся на 3, но не делятся на 5.

  2. Даны натуральные числа от 35 до 87. Найти и напечатать те из них, которые при делении на 7 дают остаток 1, 2 или 5.

  3. Даны натуральные числа от 1 до 50. Найти сумму тех из них, которые делятся на 5 или на 7.

  4. Ввести с клавиатуры 10 чисел. Если среди них есть числа, большие 15, заменить их на 15. Напечатать все полученные числа.

  5. Ввести с клавиатуры 10 чисел – положительных и отрицательных. Заменить все отрицательные числа их модулями и напечатать все полученные 10 чисел.

  6. Даны натуральные числа от 10 до 99. Напечатать те из двузначных чисел, которые делятся на 4, но не делятся на 6.

  7. В ЭВМ вводятся по очереди данные о росте N учащихся класса. Определить средний рост учащихся класса.

  8. Задано натуральное число N. Найти количество натуральных чисел, не превосходящих N и не делящихся ни на одно из чисел 2, 3, 5.Является ли заданное натуральное число степенью двойки.

  9. Найти сумму квадратов чисел от m до n.

  10. Найти сумму квадратов нечётных чисел в интервале, заданном значениями переменных m и n;

  11. Найти сумму квадратов четных чисел в интервале, заданном значениями переменных m и n;

  12. Найти сумму целых положительных чисел, кратных 4 и меньших 100.

  13. Определить k - количество трёхзначных натуральных чисел, сумма цифр которых равна n (1,n,27).

  14. В ЭВМ по очереди поступают результаты соревнований по плаванию, в которых участвуют N спортсменов. Выдавать на печать лучший результат после ввода результата очередного спортсмена.

  15. Начав тренировки, спортсмен в первый день пробежал 5 км. Каждый следующий день он увеличивал дневную норму на 15 % от нормы предыдущего дня. Через сколько дней спортсмен пробежит суммарный путь >= 100 км ?

  16. Начав тренировки, спортсмен в первый день пробежал 20 км. Каждый следующий день он увеличивал дневную норму на 10 % от нормы предыдущего дня. Сколько километров он пробежит за один девятый день ?

Использовать циклы с предусловием и постусловием

  1. В первую неделю вам выдали 5000 рублей с обещанием выплачивать каждую неделю на 500 рублей больше. Подсчитать, какую сумму вы получите на 20 -й неделе.

  2. Составить программу печати возведения в квадрат чисел от 0 до 100 с шагом 5.

  3. Одноклеточная амеба каждые три часа делится на две клетки. Определить, сколько клеток будет через 3, 6, ...,24 часа.

  4. Начав тренировки, спортсмен в первый день пробежал 5 км. Каждый следующий день он увеличивал дневную норму на 12 % от нормы предыдущего дня. Через сколько дней спортсмен пробегать в день более 30 км?

  5. Начав тренировки, спортсмен в первый день пробежал 15 км. Каждый последующий день он увеличивал дневную норму на 20 % от нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 -мь дней?

  6. Составить таблицу перевода миль в километры для расстояний от 5 до 75 миль с шагом 5. Одна миля составляет 1,609 км.

  7. Напечатать таблицу значений функции Y= Х3 при изменении Х от 20 до 6 с шагом 2.

  8. В первую неделю вам выдали 1000 рублей с обещанием выплачивать каждую вторую неделю на 30 % больше предыдущей выплаты. Подсчитать, какую сумму вы получите на 9-ой неделе.

  9. В ЭВМ по очереди поступают результаты соревнований по плаванию, в которых участвуют N спортсменов. Выдавать на печать лучший результат после ввода результата очередного спортсмена.

  10. Составить таблицу стоимости порции сыра массой 50, 100, 150, ..., 1000 грамм. Цена одного килограмма - 134 рубля.

  11. Каждая бактерия делится на две в течение одной минуты. В начальный момент времени имеется одна бактерия. Составьте программу, которая подсчитывает количество бактерий на заданное вами целое значение момента времени.

  12. Начальный вклад в банке равен 1000 руб. Через каждый месяц раз­мер вклада увеличивается на P процентов от имеющейся суммы (P — вещественное число, 0<P < 25). По данному P определить, через сколько месяцев размер вклада превысит 1100 руб., и вывести найденное количество месяцев K (целое число) и итоговый размер вклада S (вещественное число).

  13. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P про­центов от пробега предыдущего дня (P — вещественное, 0<P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

  14. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр.

  15. Даны положительные числа A и B (A > B). На отрезке длины A раз­мещено максимально возможное количество отрезков длины B (без нало­жений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

  16. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры. Если имеются, то вывести TRUE, если нет — вывести FALSE.

  17. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. В какой день впервые суммарный путь превысит 60 км?

  18. Первоначальное напряжение в цепи равно 200 вольт. Известно, что оно меняется через каждую секунду следующим образом: через одну секунду оно уменьшается на М%, а еще через секунду увеличивается на N%, затем снова уменьшается на М%, потом уменьшается на N% и т.д. Составить программу для определения, через сколько секунд напряжение в цепи превысит 220 вольт.

  19. Определить число месяцев, через которое начальная сумма вклада в банк увеличится более чем в три раза. Процентная ставка равна 1,5% в месяц. Программа выводит на экран ежемесячное значение конечной суммы.

  20. Начав тренировки, лыжник в первый день пробегал 10 км. Каждый следующий день он увеличивал длину пробега на 10% от предыдущего дня. Определить в какой день он про­бежит больше 20 км, в какой день суммарный пробег за все дни превысит 100 км.

  21. Старинная задача. Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова — 5 рублей, теленок — полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота.

  22. Составить таблицу стоимости порции колбасы весом от 100 до 1000 г с шагом в 10 г (цена 1 кг колбасы определяется по запросу). Вид таблицы приведен в задаче 5.

  23. Напечатать таблицу значений функции у=ln(х) при изменении х от 1 до 10 с шагом 0,2.

  24. Напечатать таблицу значений функции y=x3 при изменении х от 2 до 12 с шагом 0,1. Числа должны выводиться с 2 зна­ками после десятичной точки.

  25. Составить таблицу стоимости порции сыра весом в 50, 100, 150, .., 1000 г (цена 1 кг сыра определяется по запросу).