Урок 7. Алгоритмы повторяющиеся


Зачем нужны циклы?

Теперь задумаемся, как вывести, например, на экран приветствие 3 раза. Конечно, можно написать 3 раза оператор printf(), но если надо вывести строку 100 раз, то программа значительно увеличится. Поэтому надо использовать возможность повторения действий. Такой механизм реализуется с помощью циклов.
Цикл - это последовательность команд, которая выполняется несколько раз.
В языке Си существует три вида циклов. В циклах нам могут понадобиться другие формы оператора присваивания. Поэтому, прежде чем перейти к изучению циклов, вспомним их.

Какие формы оператора присваивания есть еще Начало формы Конец формы

 

Начало формы Конец формы

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

Цикл for используется тогда, когда количество повторений цикла (шагов) заранее известно или может быть вычислено. Этим количеством повторов управляет отдельная переменная, которая называется параметром цикла. Традиционно параметром обозначают переменную i.
Цикл for состоит из заголовка и тела цикла. В заголовке собрана вся информация для управления циклом: какое начальное значение параметра, сколько раз будет выполняться цикл, как параметр изменяется.
В общая виде цикл с параметром выглядит:

for (управление_циклом) // это заголовок
{
тело_цикла
}

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

for ( i = 1; i <= 3; i++)

Раскроем, какая информация содержится в заголовке: этот цикл выполнится три раза, или, говорят, сделает три шага. Начальное значение параметра i равно 1; цикл будет продолжаться до тех пор, пока iостается меньше или равно 3 и значение параметра каждый раз увеличивается на 1 (запись i ++). Таким образом, на первом шаге цикла значение i равно 1, на втором - 2 и на третьем - 3.
Сразу отметим, что параметром цикла в языке Си может быть переменная любого простого типа: целого, вещественного и даже символьного!

Теперь рассмотрим этот цикл детально. Общая форма цикла с параметром следующая:

for (начальные_условия; условие_продолжения_цикла; присваивания_в_конце_шага)
{
тело_цикла
}

В заголовке после слова for в круглых скобках записываются через точку с запятой три выражения:
- начальные_условия - как правило, это начальное значение параметра, но могут быть и другие операторы присваивания, которые выполняются один раз перед выполнением цикла;
- условие_продолжения_цикла - при котором выполняется следующий шаг цикла; если условие неверно, работа цикла заканчивается; если оно неверно в самом начале, цикл не выполняется ни одного раза;
- присваивания_в_конце_шага - действия в конце каждого шага цикла (в большинстве случаев это изменение параметра цикла от шага к шагу);
- тело_цикла - операторы, которые будут выполняться с повторами. Если тело цикла содержит только один оператор, фигурные скобки (обозначение блока) можно опустить.

Вернемся к нашему примеру в самом начале: вывести на экран три раза приветствие.
Листинг программы следующий.

#include<stdio.h>
int main()
{
int i; // i – параметр цикла
for ( i = 1; i <= 3; i++) // цикл: для всех i от 1 до 3 с шагом 1
printf("Привет!\n"); // тело цикла
return 0;
}



Тело цикла состоит из одного оператора printf(), поэтому фигурные скобки можно не ставить.

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

Поставим следующую задачу, которую назовем: "Чему равен квадрат числа?"
Напишем программу, которая вводит с клавиатуры натуральное число N и выводит на экран квадраты всех целых чисел от 1 до N таком виде:
Квадрат числа 1 равен 1
Квадрат числа 2 равен 4
Квадрат числа 3 равен 9
... и так далее для любого заданного N
Ясно, что в этой программе без цикла не обойтись, и он должен выполниться ровно N раз. Пусть циклом будет управлять переменная i. Листинг программы приведен ниже.

#include <stdio.h>
int main()
{
int i,k,N; // i – параметр цикла, k - квадрат, N — максимальное число
printf( "Введите число N: " ); // подсказка для ввода
scanf( "%d", &N ); // ввод N с клавиатуры
for ( i = 1; i <= N; i++) // цикл: для всех i от 1 до N
{
k=i*i; // вычисляем квадрат числа
printf("Квадрат числа %d равен %d\n", i, k);
}
return 0;
}

При входе в цикл выполняется оператор i = 1, и затем переменная i с каждым шагом увеличивается на 1 . Цикл выполняется пока истинно условие i <= N. В теле цикла оператор вывода печатает на экране само число и его квадрат по заданному формату.

Табулирование функции

Циклы используются во многих алгоритмах и в сочетании с другими операторами. Это позволяет решать уже довольно широкий класс задач. Одной из таких задач является табулирование функции.
Слово "табулирование" происходит от "таблица", и эта задача означает: получить таблицу значений функции при заданном изменении аргумента. Аргумент при этом изменяется на некотором промежутке с заданной величиной шага, и эти величины совсем не обязательно целые числа. Границы промежутка и величина шага, как правило, вводятся с экрана.
Пусть наша текущая цель - написать программу, которая выводит таблицу значений функции. Возьмем любую нравящуюся нам функцию, ну, например:

и посмотрим, какие значения примет эта функция в диапазоне изменения x от -2 до 2 с шагом 0,5.
Ниже представлен желаемый вид экрана во время работы программы:

В этой программе опять будем использовать циклический алгоритм, параметром цикла будет переменная x. Все переменные по смыслу должны быть переменными вещественного типа. Пусть переменные a и b обозначают начало и конец промежутка, переменная h - величину шага. Листинг программы следующий:

#include<stdio.h>
int main()
{
float a, b, h; // границы промежутка и шаг
float x, y; // аргумент и значение функции
scanf("%f%f%f", &a, &b, &h); // ввод значений границ и шага
/* Вывод шапки таблицы до цикла */
printf("--------------------\n");
printf(" x | y \n");
printf("--------------------\n");
/* Вывод самой таблицы в цикле */
for(x=a; x<=b; x=x+h) // x изменяется от -2 до 2 с шагом 0.5
{
y = -2.4*x*x + 5*x - 3; // вычисление значения функции
printf("%6.1f\t| %6.2f\n", x, y);
}
/* Вывод нижней линии после цикла */
printf("--------------------\n");
return 0;
}

Интересным здесь представляется описание спецификаций формата, содержащееся в текстовой строке:

"%6.1f\t| %6.2f\n"

Прежде всего, мы видим, что между знаком % и спецификацией вещественного типа f вставлено число с целой и дробной частями. Такая запись используется для более удобного представления чисел на экране. Число 6.1 означает, что при печати для значения переменной будет отведено 6 позиций экрана, из них под дробную часть - одна позиция. Таким образом вещественные числа округляются при выводе на экран. (А сколько остается под целую часть? давайте подсчитаем: 6-1 и еще 1 для точки, итого 4 позиции.)

Другое новшество - использование в строке спецификации формата еще одного парного символа '\t', который называется символом табуляции. Один подобный парный символ мы уже использовали много раз: перевод строки '\n'. Символ табуляции позволяет при выводе переместить курсор на определенное число позиций и тем самым выровнять печать. А еще один парный символ '\а' заставит компьютер "пискнуть".

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

Резюме

Конструкция for используется для организации циклов с фиксированным числом повторений. Циклом управляет переменная - параметр цикла.

Вопросы для самопроверки

1. В каких случаях используется оператор цикла с параметром?
2. Какая информация содержится в заголовке цикла?
3. Как работает оператор цикла с параметром?
4. Что такое "тело цикла"?
5. В каком случае в записи тела цикла фигурные скобки можно опустить?
6. Может ли тело цикла с параметром не выполниться ни разу?

2. Задания для самостоятельной работы к уроку 7

3. Во всех заданиях следует составить программу на языке Си. Задания приведены по возрастающей сложности

1. Написать программу, которая 10 раз выводит на экран имя и фамилию.
2. Написать программу, которая выводит на экране изображение шахматной доски. Рекомендуемый вид экрана во время работы программы приведен ниже.

4. * * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *

5. 3. Написать программу, которая выводит таблицу степеней двойки (от нулевой до десятой). Ниже представлен рекомендуемый вид экрана во время работы программы:

6. Таблица степеней двойки
---------------------------
0 1
1 2
2 4
3 8
4 16
5 32
. . . и т.д.

7. 4. Написать программу, которая выводит на экран таблицу умножения, например, на 7. Ниже представлен рекомендуемый вид экрана во время работы программы:

8. 7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
. . . и т.д.

9. 5. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных нечетных чисел (возможны различные варианты записи цикла). Ниже представлен рекомендуемый вид экрана во время работы программы:

10. Число Квадрат
---------------------------
1 1
3 9
5 25
7 49
9 81
11 121
. . . и т.д.

11. 6. Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2,..., 10 фунтов (1 фунт = 453 г.)
7. Получить таблицу температур по Цельсию tc от 0 до 100 градусов и их эквивалентов по шкале Фаренгейта tf, используя для перевода формулу:

12. tf = 9/5*tc + 32

13. 8. Вывести "столбиком" значения sin0,1, sin0,2, ..., sin1,5.
9. Напечатать таблицу стоимости 100, 200, 300, ..., 2000 г конфет (стоимость 1 кг конфет вводится с клавиатуры).
10. Цилиндр объема единица имеет высоту h. Определить радиус основания цилиндра для значений h, равных 0.5, 1, 1.5, 2, ..., 5.

 









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь