- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Введите 2 числа х, y : 3 8
Введите знак операции (+, –, *, / или иной): +
x + y = 11.0
Работа с циклическими вычислительными процессами
В циклических алгоритмах выполняются повторяющиеся вычисления и действия. Управление циклом осуществляется с помощью переменной, называемой параметром цикла. Циклы могут быть одиночными и вложенными, причем глубина вложения не ограничена. Окончание циклов может осуществляться либо по достижении фиксированного числа повторений, либо по достижении заданной точности вычислений (итерационные циклы), либо принудительно при выполнении некоторого условия
В языке Си для реализации циклических процессов используется три вида операторов организации цикла: while, do…while, for, которые рассмотрены ниже.
Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
Этот оператор, который используется, когда требуется проверить необходимость выполнения цикла, имеет вид:
while (выражение) оператор , где
while (пока) – ключевое слово;
выражение – условие продолжения цикла в виде логического или арифметического выражения сравнимого с нулем. Если выражение не равно нулю (истинно), то выполняется оператор, в противном случае оператор цикла либо не выполняется вообще, либо заканчивается и управление передается следующему за ним оператору;
оператор (тело цикла) – это либо одиночный или пустой оператор, за которым ставится точка с запятой (;), либо составной оператор, заключенный в операторные скобки { }, за которым точка с запятой не ставится.
Перед выполнением оператора while параметру цикла (P), который входит в выражение (условие), должно задаваться начальное значение, кроме того параметр должен изменятся во время работы цикла. Корректную работу цикла с предусловием можно представить следующей схемой:
В схеме алгоритма: В программе:
Р = начальное значение;
while (условие (Р))
Условие (Р)
{
операторы тела цикла;
Тело цикла Р= изменение;
Р= изменение }
Конец цикла Р
Пример 17.
Организация цикла в программе. Вычислить сумму (sum) чисел от 0 до 5 (i – параметр цикла).
a) sum = i = 0; б) sum = i = 0; в) sum = i = 0;
while (i<=5) while (i<=5) while (++i <= 5)
{ sum = sum + i; sum += i++; sum += i;
i++;
}
printf(“sum=%d”, sum);
В последнем случае параметр цикла i изменяется в выражении условия.
Особенность оператора while в том, что тело цикла может ни разу не выполниться, например,
i=15;
while (i<0) i++;
В данном случае i не изменится, так как условие цикла с самого начала ложно.
В случае неверного задания начального значения параметра цикла, выражения условия или неправильного изменения параметра цикла может образоваться бесконечный цикл (зацикливание), например,
i=15;
while (i>0) i++;
Отслеживание и исправление таких ситуаций лежит на программисте.
Прерывание цикла
Бесконечный цикл можно создать преднамеренно, но тогда необходимо организовать в теле цикла прерывание цикла по условию выхода из цикла, используя операторы передачи управления break , goto, continue.
Оператор break (прерывать) вызывает завершение самого внутреннего включающего его оператора цикла по схеме:
while(1) // бесконечный цикл
{...; if (условие выхода)
break ; // прерывание цикла
}
следующий оператор;
Оператор goto позволяет выйти за пределы операторов циклов любой глубины вложения в любое место программы.
Оператор continue (продолжить) позволяет пропустить оставшуюся часть тела цикла до закрывающей скобки ( } ) и начать новый цикл, то есть он не передает управление за пределы оператора цикла, в котором он находится, согласно схеме:
while (выражение)
{...; if (условие прерывания )
continue; // прерывание текущего цикла
операторы;
}
Во многих задачах количество повторений цикла задано или может быть вычислено до выполнения программы.
Пример 18.
Организовать вывод четных чисел не больше 100.
Программа:
void main ( )
{ int num = -1; // начальное значение
while (num < 100) // условие цикла
{ num ++; // очередное число
if (num % 2) // нечетное число , если num%2 != 0
continue ; // переход к новому циклу
printf( “%d ” , num) ; // вывод четного числа
}
}
Пример 19.
Ввести натуральное число (N) и определить количество (K) и сумму его цифр (sum), например, для N = 215 , K = 3 , sum = 2+1+5=8. Идея алгоритма: в цикле, пока N не уменьшится до N=0, для получения цифры младшего разряда используется операция деления по модулю 10 (M = N %10) , а для уменьшения используется операция деления числа на 10 нацело (N = N / 10).
Программа:
# include<stdio.h>
# include<conio.h>
void main ( )
{ long N ; int K, sum, m ; // описание переменных
clrscr ( ) ; // очистка экрана
printf (“Введите натуральное число: “);
scanf (‘‘%Ld’’, &N); // ввод числа
K = sum = 0; // обнуление K и sum
while (N) // цикл, пока N != 0
{ K++; // подсчет количества цифр
m = N % 10; // получение цифры младшего разряда
sum += m; // подсчет суммы цифр
N /= 10; // деление N на 10
}
printf (“ Количество цифр = %d Сумма цифр = %d/n’’, K, sum);
puts (“ Нажмите любую клавишу.”);
getch ( ); // задержка экрана результатов
}
Результаты программы:
Введите натуральное число: 215
Количество цифр = 3 Сумма цифр = 8
Нажмите любую клавишу.