![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Оператор for
Оператор цикла for позволяет выполнять оператор или группу операторов заранее заданное количество раз. Общая форма оператора for (V1; ЛВ; V2) ОP; где V1 – выражение, в котором производится присваивание переменной, называемой параметром цикла, начального значения (инициализация); ЛВ – условие, определяющее, следует ли в очередной раз выполнять оператор (тело цикла); V2 – выражение, в котором производится изменение переменной цикла (приращение); ОР – оператор или группа операторов. Принцип работы: · вычисляется V1; · вычисляется ЛВ; · если ЛВ истинно, выполняется ОР, затем вычисляется V2; · проверка ЛВ → ОP → V2 и т. д. Когда ЛВ становится ложным, осуществляется переход к оператору, следующему за ОP. Если ОP – составной оператор, то его надо заключить в {}. Если ЛВ сразу ложно, то ни ОР, ни V2 не выполняются ни разу. Отметим две дополнительные возможности оператора for по сравнению с оператором while: o возможность включения инициализирующего выражения V1, используемого один раз перед тем, как будет произведена оценка условия; o возможность включения выражения V2, которое будет использоваться после каждой итерации оператора ОР. Пример 1. Вычислить значения функции sin(x) в равноудаленных точках на интервале [0, 4π ]. Количество расчетных точек вводится с клавиатуры: #include < stdio.h> #include < math.h> int main(void) { int n; float x, y; float x1=0, x2=4*M_PI; printf(" Введите количество точек\n"); scanf(" %d", & n); x=x1; float step=(x2− x1)/(n− 1); for (int i=1; i< =n; i++) { y = sin(x); printf(" %3d %8.3f %8.3f\n", i, x, y); x+=step; } return 0; } В этом примере количество точек задается в целочисленной переменной n, границы интервала изменения x – в переменных x1 и x2, которые имеют вещественный тип и инициализируются при объявлении. M_PI – макрос, представляющий число π, объявлен в заголовочном файле math.h. Там же объявлена функция sin(). Пример 2. Составим программу вычисления значение sin(x) (п. 6.2.1) с использованием оператора цикла for: #include < stdio.h> #include < math.h> #define EPS 0.001 int main(void) { float x, S=0, U; int i=0; printf(" \n Input x→ "); scanf(" %f", & x); for (U=x; fabs (U)> EPS;) { S+=U; i++; U*=(-x)*x; U/=(2*i+1)*2*i; } printf(" \n sin(%6.3f)=%7.3f", x, S); return 0; } Следует иметь в виду, что все три выражения – V1, ЛВ, V2 являются необязательными. В качестве ОP может быть использован пустой оператор. Возможны конструкции: for(V1;; V2)ОP (бесконечный цикл); for(; ЛВ;)ОP и даже for(;;). Заметим, что с помощью операторов for и while можно создавать бесконечные циклы, если опустить все три выражения в операторе for и использовать всегда истинное ЛВ в while. Такие программы нельзя назвать корректными, но существуют способы завершения самых некорректных циклов. Допускается использование оператора for, когда имеется несколько начальных выражений вида V1, перечисленных через запятую, и несколько выражений вида V2, также перечисленных через запятую. Конструкция такого вида носит название – операция запятая. Используя операцию запятая, составим программу вычисления все того же sin(x): #include < stdio.h> #include< math.h> #define EPS 0.001 int main(void) { float x, S, U; int i; printf(" \n Input x? "); scanf(" %f", & x); for(S=0, U=x, i=0; fabs(U)> EPS; S+=U, i++, U*=(− x/2*i+1))); printf(" \n sin(%6.3f)=%7.3f", x, S); return 0; } В качестве еще одного примера рассмотрим программу вычисления корня уравнения #include < stdio.h> #include < math.h> #define EPS 0.001 int main(void) { float x0, x1; printf(" \n Input x0? "); scanf(" %f", & x0); for(x1=sin(x0)*sin(x0)*0.25+0.3; fabs(x1− x0)> EPS; x1=pow(sin(x0), 2)*0.25+0.3) /*pow()– возводит число (первый аргумент) в степень (второй аргумент) */ x0=x1; printf(" \n Root is equal %6.3f", x1); return 0; }
|