- •Void main(void)
- •Void main(void)
- •Void main()
- •Void main()
- •Viod main()
- •Условные выражения
- •Void main()
- •If(Выраженне1) Выражение2;
- •If(Выражение1) Выраженпе2; else ВыражениеЗ;
- •Void main()
- •Циклические выражения
- •Void nain()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Массивы
- •Void main()
- •Void main()
- •Void main()
- •Viod main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Адреса и указатели
- •Void main()
- •Viod main()
- •Функции
- •Void main(void)
- •Void main(void)
- •Int I; double X,step();
- •Void decart(double r, double f)
- •Void main()
- •Void decart(double r,double f,double *X,double*y)
- •Void main()
- •Void rnain()
- •Void main()
- •Void main()
- •Void main()
- •Int length;
- •Объектно-ориентированное программирование и приложения с графическим интерфейсом
- •Void main(void)
- •Int MyFunc(int, int);
- •Void NewFunc(void);
- •Void main()
- •Void FuncOut();
- •Void prob::FuncOut()
- •Void main()
- •Void main()
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •Int pascal
- •Int nCmdShow)
- •Void __fastcall tForm1::Timer1Timer(tObject *Sender)
- •Void __fastcall tForm1::okClick(tObject *Sender)
- •Int I,step;
- •Введение в численные методы
Void main()
{
int n,j=1; double a=.0;
scanf("%d",&n); n++;
do a+=1.0/j++; while(j<n);
printf("%lf".a);
}
Программа будет работать правильно, но она снова не оптимальна. Можно обойтись без переменной j. Цикл в этом случае следует записать в виде:
do a+=1.0/n- -; while(n);
При этом из программы следует убрать выражение инкремента п++; после функции scanf. Можно видеть, что сумма ряда теперь вычисляется в обратном порядке - от конца к началу, и переменная n каждый раз уменьшается на единицу (декрементируется). Упростилось и условие выхода из цикла. Действительно, цикл нужно выполнять до тех пор, пока n не станет равным нулю, что и записано в скобках после while.
Третий тип циклических выражений - циклы for. Структура цикла в общем виде может быть представлена так:
for(Выражения1; Выражение2; Выражения3)Выражение4;
Сразу обратим внимание на то, что при использовании цикла for вы можете воспользоваться некими исключениями из правил, которые только в этом цикле и допустимы. Выражения1 и Выражения3 не зря написаны здесь во множественном числе. На их месте могут быть записаны несколько выражений присваивания, перечисленные не через точку с запятой, как обычно, а через запятую. Тогда эти группы будут представлять собой своеобразные составные выражения, не нуждающиеся, однако, в фигурных скобках. Выражение2 представляет собой обычное условие, принимающее значение 0 или не 0. Выражение4, которое может быть составным уже в обычном виде, является выражением, выполняющимся в цикле. Интересно то, что Выражения1, Выражения3 и даже Выражение4 могут отсутствовать, если в них нет нужды. Правильнее будет сказать, что они могут быть пустыми выражениями, от которых остались только их точки с запятой. Более того, для Выражений3 имеет место совсем нестандартная ситуация. Если они присутствуют, то они не должны оканчиваться символом ";". Все эти исключения, по мнению автора, только портят общее представление о языке С. С этим, однако, приходится мириться, поскольку цикл for с его "причудами" очень широко используется программистами. Здесь уместно отметить, что все три цикла взаимозаменяемы.
Работа цикла for заключается в следующем. Сначала, причем только один раз, выполняются Выражения1, если они имеются. Понятно, что эти выражения целесообразно использовать для выполнения предваряющих цикл присваиваний, для установки некоторых начальных значений переменных. Затем вычисляется Выражение2. Если оно равно 0, то на этом работа цикла заканчивается и программа работает дальше. Если Выражение2 не есть 0, то выполняется Выражение4, которое, как говорилось выше, может быть и пустым. Затем выполняются Выражения3 (если они есть), снова проверяется условие в Выражении2 и так далее, до тех пор пока в Выражение2 не образуется 0.
Проиллюстрируем работу цикла for на программе, вычисляющей факториал числа n! = 1*2*3*…*n:
Void main()
{
int n,i.j;
scanf(“%d”.&n);
for(i=1,j=1; i<=n; i++,j*=i);
printf("%d!=%d",n,j);
}
В данном примере как раз отсутствует Выражение4, поскольку все, что необходимо, выполняется в Выражениях3, которых два. Эти два выражения лучше превратить в одно: j*=++i. Убедитесь, что знаки ++ здесь должны стоять именно перед i (в префиксной форме), а не после i. Сначала надо увеличить i на единицу, а затем использовать, как это более явно видно из неисправленной программы. Выражения1 также не мешает преобразовать к виду i=j=1;
А теперь перепишем программу в другой форме: