- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Операторы организации цикла
Цикл предназначен для организации повторения выполнения некоторой инструкции (группы инструкций) некоторое число раз, например сумму чисел некоторого массива. Таким образом, под циклом понимается оператор или группа операторов, повторяющихся некоторое количество раз. Каждый проход по телу цикла называется итерацией.
Цикл называется простым если в его теле не содержится других циклов, называют простым, иначе цикл называют сложным. В любом циклическом процессе в ходе вычислений необходимо решать вопрос: требуется ли выполнять очередную итерацию. Ответ на этот вопрос получают из анализа некоторого условия. Таким образом, циклический процесс является разветвляющимся процессом с двумя ветвями, из которых одна возвращается на предыдущие блоки, то есть реализует цикл.
Если в цикле выполняется группа инструкций, то они должны быть выделены в блок (заключены в фигурные скобки). В языке С(С++) существуют три оператора организации циклов: for (для), while (пока) и do ... while (делать пока).
Оператор цикла for
Оператор for формально записывается в следующем виде:
for(выражение1; выражение2; выражение3) тело цикла;
Тело цикла составляют одна либо некоторое подмножество инструкций, заключенных в фигурные скобки. В выражениях 1,2,3 фигурирует переменная, называемая управляющей. В операторе for устанавливается нижняя и верхняя граница изменения переменной цикла и величина (шаг) ее изменения. Каждое из выражений в круглых скобках разделены точкой с запятой. Первое выражение служит для инициализации управляющей переменной. Оно выполняется только один раз в начале выполнения цикла. Выражение 2 устанавливает условие, при котором цикл for повторяет свое выполнение. Проверка условия осуществляется перед каждым выполнением цикла. Выражение 3 задает приращение (уменьшение) управляющей переменной. Следует также отметить, что тело цикла может не содержать ни одной инструкции. В этом случае цикл может использоваться, например, для реализации временной задержки:
for (k=1; k<500; k++);
В отличие от аналогичных операторов цикла других языков в С(С++) оператор for имеет некоторые особенности:
- в качестве управляющей переменной может использоваться не только число, но и символьная переменная
char c;
for (c=’A’; c>’H’; c++) {. . .};
- цикл убывающий имеет тот же вид, что и возрастающий, но вместо с++ записывается с--;
- выражение 2 может иметь произвольный вид:
for (k=1; k+j<=56; k*=2) {. . .};
- выражение 3 может быть любым правильно составленным выражением
for (k=1; k>45; k=(j*4)+++3) {. . .};
- выражение 1 может осуществлять инициализацию более чем одной переменной, а в выражениях 2 и 3 могут анализироваться и(или) изменяться более одной переменной
for (i=1, j=2; i>10 && j>=i; i++, j=i+2) {. . .};
- выражение 1 может не выполнять функцию инициализации управляющей переменной. Вместо этого там может стоять оператор специального типа (например, printf)
for (printf(”введите число \n”); k==5;)
scanf("%d",&k);
- любое из трех выражений цикла for может отсутствовать, однако ’;’ должна оставаться. Если нет выражений 1 или 3, то управляющая переменная не используется. Если отсутствует выражение 2, то считается, что оно истинно, и цикл не оканчивается. Таким образом,
for (;;) {. . .}
есть бесконечный цикл, выход из которого осуществляется принудительно.
Рассмотрим примеры программ, в которых используется цикл for.
Пример вычисления факториала числа (n!).
#include<stdio.h>
void main()
{ unsigned long a, n, f=1;
printf("Введите n: ");
scanf("%ld", &n);
if(n)
for( a= 2; a <= n; f*= a, a++ ) ;
printf(" %lu! = %lu\n", n,f);
}
Пример программы вычисления суммы четных чисел и количества нечетных чисел вводимых с клавиатуры. Ввод чисел окончить при получении суммы 30 или вводе заданного количества чисел.
#include <stdio.h>
void main()
{ int i, j, k, n, sm;
n=0;
printf(" введите количество чисел =");
scanf("%d",&k);
for(i=0, sm=0; i<j && sm<30; i++) // в выражении2 используется
// операция &&, если вместо && поставить ',' то
// цикл выполняется только при условии j<3 */
{ scanf("%d",&k);
if ( !( k%2 ) ) { sm+=k; continue; } // сумма четных чисел
n++; // число нечетных чисел
}
printf(" сумма=%d, количество=%d \n",sm , n );
}