- •Программирование
- •Алгоритмизация вычислительных процессов
- •На языке высокого уровня
- •Часть 1. Основы языка Си
- •Методические указания
- •К выполнению лабораторных работ
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67 Общие методические указания
- •Средства программирования вычислительных процессов Базовые элементы языка Си
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения)
- •Функция очистки экрана результатов
- •Структура Си-программы
- •Директивы препроцессора
- •Выражения и операции
- •Логические выражения и операции
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления Пустой оператор
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Программа:
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Пример. Составить функцию обмена значениями между переменными X и y. Верным решением является применение передачи данных по адресу.
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
- •Часть 1. Основы языка Си 1
Введите 2 числа х, y : 3 8
Введите знак операции (+, –, *, / или иной): +
x + y = 11.0
Работа с циклическими вычислительными процессами
В циклических алгоритмах выполняются повторяющиеся вычисления и действия. Управление циклом осуществляется с помощью переменной, называемой параметром цикла. Циклы могут быть одиночными и вложенными, причем глубина вложения не ограничена. Окончание циклов может осуществляться либо по достижении фиксированного числа повторений, либо по достижении заданной точности вычислений (итерационные циклы), либо принудительно при выполнении некоторого условия
В языке Си для реализации циклических процессов используется три вида операторов организации цикла: while, do…while, for, которые рассмотрены ниже.
Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
Этот оператор, который используется, когда требуется проверить необходимость выполнения цикла, имеет вид
while (выражение) оператор , где
while (пока) – ключевое слово;
выражение – условие продолжения цикла в виде логического или арифметического выражения сравнимого с нулем. Если выражение не равно нулю (истинно), то выполняется оператор, в противном случае оператор цикла либо не выполняется вообще, либо заканчивается и управление передается следующему за ним оператору;
оператор (тело цикла) – это либо одиночный или пустой оператор, за которыми ставится точка с запятой (;), либо составной оператор, заключенный в операторные скобки { }, за которым точка с запятой не ставится.
Перед выполнением оператора while параметру цикла (P), который входит в выражение (условие), должно задаваться начальное значение, кроме того параметр должен изменятся во время работы цикла. Корректную работу цикла с предусловием можно представить следующей схемой:
в схеме алгоритма: в программе:
Р
= начальное значение;
while
(условие (Р))
Условие (Р)
{операторы
тела цикла;
Тело цикла Р = изменение;
Р= изменение }
Конец цикла Р
Пример. Организация цикла в программе. Вычислить сумму (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; /*прерывание текущего цикла */
операторы;
}
Во многих задачах количество повторений цикла задано или может быть вычислено до выполнения программы.
Пример. Организовать вывод четных чисел не больше 100.
Программа:
void main ( )
{ int num = -1; /* начальное значение */
while (num < 100) /* условие цикла */
{ num ++; /* очередное число */
if (num % 2) /* нечетное число , если num%2 != 0 */
continue ; /* переход к новому циклу */
printf( “%d ” , num) ; /* вывод четного числа */
}
}
Пример. Ввести натуральное число (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 Cумма цифр = 8
Нажмите любую клавишу.
