КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Оператор пошагового цикла for
Предназначен для реализации в программе полного варианта цикла с параметром – формирование начального и последующих значений параметра цикла, проверка каждого из них на соответствие диапазону изменения с реализацией тела цикла, если условие выполняется, и выходу из цикла в случае его невыполнения. Структура оператора for([нач_выр]; [усл_выр]; [выр_прир]) { тело цикла }
где for – ключевое слово (для); нач_выр – выражение, задающее начальное значение параметра цикла; усл_выр – выражение, определяющее проверку условия повторения цикла; выр_прир – выражение, формирующее текущее значение параметра цикла через предыдущее; ; – разделители выражений; () – ограничители выражений; [ ] – признак необязательности содержимого; тело цикла – совокупность операторов, выполнение которых требуется повторять; { } – ограничители тела цикла. Оператор, при наличии всех составляющих, выполняется следующим образом: · определяется начальное значение параметра цикла (нач_выр); · проверяется его соответствие диапазону счета (усл_выр); · если выражение усл_выр истинно (результат не равен нулю): – выполняется тело цикла; – формируется новое текущее значение параметра (выр_прир); – повторяется его проверка в усл_выр; · если усл_выр ложно (результат равен нулю): – выполнение оператора цикла прекращается; – управление передается следующему после тела цикла оператору (осуществляется завершение цикла). Схема выполнения оператора
for(нач_выр; усл_выр; выр_прир) ЛОЖЬ ИСТИНА { тело цикла }
Правила записи и выполнения 1. В качестве начального выражения (нач_выр) используются одно простое (последовательное) или несколько (разделенных запятыми) присваиваний, например xi = xn (a=b=c=1.) или xi = xn, y=0., z=2.5, a=b=c=1.
2. Если начальное выражение отсутствует, начальное значение параметра цикла будет определяться содержимым соответствующей переменной (xi). Например, сформированным до входа в цикл: xi = xn; /* формирование начального значения */ for(; xi <= xk; xi = xi + dx) { ... yi = sin(xi); ... } 3. В качестве усл_выр могут использоваться любые выражения Си. Арифметические, например (sin(b) + 0.5), (2*c - d / f), (a) или простые (составные) логические выражения, например (а!= b), (sin(x) < b), (x <= a && x >= b). 4. Если условное выражение отсутствует, его значение считается истинным – создается бесконечный цикл. ü Внимание! Выход из такого цикла невозможен – требуется перезагрузка операционной системы. Один из вариантов предотвращения подобной ситуации заключается в формировании в теле цикла отрицания условного выражения в виде оператора if со структурой, например if(усл_выр) break; Реальное использование иллюстрируется фрагментами:
5. В качестве выражения приращения (выр_прир) используются одно или несколько (разделенных запятыми) присваиваний вида xi = j (xi - 1), например xi = xi + dx или xi = xi + dx, b=b+2. 6. Если выр_прир отсутствует, текущее значение параметра цикла будет определяться содержимым соответствующей переменной (xi). Если оно не меняется – создается бесконечный цикл. ü Внимание! Выход из такого цикла невозможен – требуется перезагрузка операционной системы. Один из вариантов предотвращения подобной ситуации – формирование закона изменения параметра в теле цикла, например: for(xi = xn; xi <= xk;) /* заголовок цикла */ { ... yi = sin(xi); ... xi = xi + dx; /* закон изменения параметра*/ } 7. В принципе, нач_выр и выр_прир могут формироваться вне заголовка цикла. Первое – до него, второе – в теле цикла, например:
xi = xn; /* формирование начального значения параметра */ for(; xi <= xk;) /* заголовок цикла */ { ... yi = sin(xi); ... xi = xi + dx; /* закон изменения параметра*/ } В этом случае оператор for выполняет функции оператора while. 8. Тело цикла оформляется одним оператором (составным или простым). 9. В теле цикла возможно использование специальных операторов break, goto, continue, обеспечивающих искусственный (принудительный) выход из цикла. Оператор break прекращает выполнение цикла и передает управление оператору, записанному непосредственно под телом цикла. Оператор goto m организует выход из цикла с передачей управления оператору, помеченному его меткой. Оператор continue прерывает выполнение тела цикла и возвращает управление заголовку цикла, например:
Первый фрагмент предписывает искусственный выход из цикла при выполнении в теле цикла условия c < ai с передачей управления оператору d = 15. Второй – нарушает естественный порядок вычисления тела цикла при c < ai с передачей управления оператору d=12., помеченному меткой k. Третий прерывает выполнение тела цикла по тому же условию, но управление возвращается заголовку цикла. 10. В теле цикла возможно использование других (вложенных) операторов цикла.
Вывод: оператор for позволяет программировать арифметические циклы с параметром, например, представленные схемами рис. 5.6 (блоки 4, 5, 6, 7); рис. 5.7в (блоки 4, 5, 6). При этом задание начального значения параметра, его проверка на соответствие диапазону счета и изменение осуществляются в заголовке цикла (блок 4). Рассмотренные операторы цикла позволяют реализовать составленные ранее схемы алгоритмов. ü Внимание! Используемые в алгоритме переменные Зi и Зi-1 математически представляют текущие и предыдущее значения одной и той же переменной. Поэтому в программе они должны идентифицироваться как одна именованная ячейка (переменная). Идентификация переменных с учётом сказанного имеет вид табл. 5.2. Таблица 5.2
Составим возможные варианты программ решения задачи с каждым из рассмотренных операторов цикла.
Программа по алгоритму цикла с предусловием Анализ алгоритмов, выполненных в виде цикла с предусловием (рис. 5.4, 5.7а) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с while. Вариант программы имеет вид:
/* Программа с использованием цикла с предусловием */ #include <stdio.h> #include <stdlib.h> /* директивы */ #include <math.h> /* препроцессора */
main() /* заголовок основной функции */ { float zn,zi,zk,dz,pn,nali; /* описание вещественных переменных */ int n; /* описание целой переменной */ scanf("%4f%5f%4f%3f",&zn,&zk,&dz,&pn); /* ввод переменных */ printf(" zn=%6.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn); zi=zn; /* формирование начального значения параметра цикла */ while(zi<=zk) /* заголовок цикла */ { nali=(zi*pn)/100.; /* вычисление текущего значения налога */ printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */ zi=zi+dz; /* формирование текущего значен`ия параметра цикла */ } n=(zk-zn)/dz+1; /* оператор, следующий за циклом */ printf(" N=%2d\n",n); } 842.2500.100.12.
Под телом программы расположена строка численных значений вводимых переменных. Программа по алгоритму цикла с постусловием Анализ алгоритмов, выполненных в виде цикла с постусловием (рис. 5.5, 5.7б) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с do... while. Вариант программы имеет вид: /* Программа с использованием цикла с постусловием */ #include <stdio.h> #include <stdlib.h> /* директивы */ #include <math.h> /* препроцессора */
main() /* заголовок основной функции */ { float zn,zi,zk,dz,pn,nali; /* описание вещественных переменных */ int n; /* описание целой переменной */ scanf("%4f%5f%4f%3f",&zn,&zk,&dz,&pn); /* ввод переменных */ printf(" zn=%6.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn); zi=zn; /* формирование начального значения параметра цикла */ do /* начало цикла */ { nali=(zi*pn)/100.; /* вычисление текущего значения налога */ printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */ zi=zi+dz; /* формирование текущего значения параметра цикла */ }
while(zi<=zk); /* проверка условия повторения цикла */ n=(zk-zn)/dz+1; /* оператор, следующий за циклом */ printf(" N=%2d\n",n); } 842.2500.100.12.
Под телом программы расположена строка численных значений вводимых переменных.
Программа по алгоритму цикла с параметром Анализ алгоритмов, выполненных в виде цикла с параметром (рис. 5.6, 5.7в) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с for. Вариант программы имеет вид: /* Программа с использованием пошагового цикла */ #include <stdio.h> #include <stdlib.h> /* директивы */ #include <math.h> /* препроцессора */ main() /* заголовок основной функции */ { float zn,zi,zk,dz,pn,nali; /* описание вещественных переменных */ int n; /* описание целой переменной */ scanf("%4f%5f%4f%3f",&zn,&zk,&dz,&pn); /* ввод переменных */ printf(" zn=%6.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn); for(zi=zn;zi<=zk;zi=zi+dz) /* заголовок цикла */ { nali=(zi*pn)/100.; /* тело */ printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */ } n=(zk-zn)/dz+1; /* оператор, следующий за циклом */ printf(" N=%2d\n",n); } 842.2500.100.12. - численные значения вводимых переменных.
Циклы с табличным заданием аргумента К классу циклических процессов с табличным заданием (изменением) аргумента относятся вычислительные процессы вида yi = f(xi) при задании аргумента конкретными численными значениями x1, x2,..., xi,..., xm. В математике такая последовательность переменных называется одномерным массивом. Массив – упорядоченная совокупность однородных элементов (данных), имеющих одно имя и разные индексы. Каждый массив (матрица) характеризуется тремя параметрами: · именем; · размерностью (количеством измерений); · размером. Имя – основная часть обозначения массива (каждого его элемента). В качестве имени массива в математике, как правило, используются заглавные буквы, например: A, X, B. Элементы массива обозначают строчными буквами с индексами, например: a1, xk, bi j, yk 8, zk p t. Размерность – число измерений (направлений изменения) массива. Размерность определяет количество индексов у каждого элемента массива. Одномерный массив имеет одно направление изменения, а каждый элемент – один индекс. Если измерений больше одного, массив относится к многомерным. Большинство из многомерных массивов – двумерные и трёхмерные. Двумерный массив можно представить в виде таблицы (матрицы), при этом первое измерение определяет строку, второе – столбец. Каждый элемент двумерного массива имеет два индекса. Первый задает номер строки, второй – номер столбца элемента в таблице. Трехмерный массив – последовательная совокупность одинаковых по структуре таблиц (страниц). Следовательно, каждый элемент такого массива имеет три индекса, первый из которых определяет номер страницы, второй – номер строки, третий – номер столбца, где расположен элемент. В качестве индексов элементов могут использоваться числа, переменные и арифметические выражения целого типа, например: 8, i, j+2. Поэтому обозначения элементов одномерного массива X – x1, xj, xj+2; двумерного Y – y2 6, yi j, yk j+3; трехмерного Z – z 2 6 4, z i j k, z i j+6 k-4. Размер – величина, определяющая максимальное количество элементов массива. В математике размер записывается в круглых скобках после имени массива и указывается отдельно по каждому измерению. Для многомерных (двумерных и трехмерных) массивов последовательность указания размеров аналогична рассмотренной для индексов. Для указания размера могут использоваться числа и переменные целого типа. Например, обозначения Y(7), X(m) определяют одномерные массивы Y и X размером 7 и m элементов соответственно. Двумерный массив D, состоящий из 20 строк и 30 столбцов, обозначается как D(20х30). Его размер определяет число элементов (20х30=600) в массиве. Двумерный массив Z из m строк и n столбцов обозначается как Z(mхn), а его размер вычисляют как произведение указанных величин. Трехмерный массив S из десяти страниц с пятью строками и пятнадцатью столбцами на каждой обозначается как S(10х5х15), т.е. состоит из 10х5х15=750 элементов. Следовательно, в рассматриваемой задаче вычисления yi = f(xi) табличное задание аргумента соответствует одномерному массиву X(m) с именем X и размером m, текущий элемент которого обозначается xi. Структура – совокупность разнотипных элементов. Поэтому программирование задачи начинается с определения принадлежности используемых данных к массиву или структуре. В большинстве случаев элементы приводятся к одному типу, что позволяет объединить их в языке Си понятием массив. Обязательными условиями работы с массивом или его элементами (элементом) являются: · описание массива; · обозначение элементов.
Дата добавления: 2014-01-07; Просмотров: 285; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |