- •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()
{
double a,b,c;
printf("ВВЕДИТЕ a,b,c\n");
scanf("%lf,%lf,%lf”,&а,&Ь,&с);
if((c=b*b-4.0*a*c)<0.)
printf("НЕТ РЕШЕНИЯ");
else
{
printf ("x1=%f\n",(-b+(c=sqrt (c) ) ) /a+=a) ;
printf ("x2=%f\n",(-b-c)/a);
}
}
В программе снова применены некоторые маленькие хитрости, обеспечивающие оптимизацию вычислений. Поскольку уважаемый читатель стал уже достаточно опытным, предоставим ему возможность самостоятельно разобраться с ними.
Циклические выражения
Циклические выражения, или просто циклы, предназначены для многократного выполнения однотипных действий. В С используются три типа циклов. Рассмотрим первый из них, называемый циклом while. Сразу начнем с примера программы:
#include<stdio.h>
Void nain()
{
int i,j=1,k=0;
printf("Введите i="); scanf("%d".&i);
while(j<=i)
{ k+=j; j++; }
printf('Cyммa ряда равна %d",k);
}
Цикл while имеет следующую структуру:
while(Выражение1)Выражение2;
Само слово while означает ПОКА. Более корректно трактовать это слово в форме ДО ТЕХ ПОР ПОКА. Работает цикл следующим образом. Вычисляется Выражение1. Если его значение не 0, то выполняется Выражение2, которое может быть составным выражением. Затем снова вычисляется Выражение1, и если оно не 0, снова выполняется Выражение2. Так продолжается до тех пор, пока Выражение1 не примет значение, равное нулю. Разумеется, в процессе выполнения цикла что-то в выражении в скобках должно меняться. Иначе произойдет зацикливание программы. Кстати, в случае зацикливания или возникновения некоторых других аварийных ситуаций можно попробовать прервать работу программы? нажав Ctrl + C, или дважды нажав комбинацию клавиш Ctrl+Pause.
Наша последняя программа вычисляет сумму первых i натуральных чисел 1 + 2 + 3 + ... + i, где i - целое число, вводимое с консоли. Условие, проверяемое в цикле j<=i, перестанет выполняться (примет значение 0), как только j станет больше i. Это событие рано или поздно наступит, поскольку в составном выражении, выполняемом в цикле, каждый раз j увеличивается на единицу. Кроме того, в составном выражении в переменной k накапливается сумма членов ряда. С учетом того, что в описании переменных j и k им присвоены необходимые значения, можно убедиться "вручную" проследив работу цикла, что поставленная задача здесь решается. Если введено число i, равное нулю, то цикл не проработает ни одного раза и переменная k останется со своим начальным значением 0, что также верно. Заметим, что в данном варианте цикл записан не вполне оптимально. Составное выражение можно записать более компактно и более оптимально с точки зрения быстродействия: while(j<=i) k+=j++; Можно видеть, что необходимость в фигурных скобках отпала, поскольку выражение перестало быть составным.
Рассмотрим еще одну программу, использующую цикл while:
Void main()
{
int st=1,i=0,n;
scanf("%d",&n);
while(i++<n) st<<=1;
printf("2^n=%d",st);
}
Эта программа вычисляет в переменной st n-ю степень двойки. Начальное значение st равно 1. В цикле каждый раз производится сдвиг двоичного кода величины st на одну позицию влево, то есть выполняется умножение на 2. Тем самым и определяется степень двойки. Успокоим того дотошного читателя, который разумно заподозрил, что мы делаем лишнюю работу. Эта программа только демонстрирует работу цикла. На самом деле вместо всего цикла достаточно было бы записать одно выражение:
st<<=n;
Другой тип цикла называется циклом do-while и имеет следующую структуру:
do Выражение1; while(Выражение2);
Такую конструкцию следует понимать так: ВЫПОЛНЯТЬ Выражение1, ПОКА Выражение2 есть НЕ НОЛЬ. Отличие от цикла while состоит в том, что сначала выполняется первое выражение, а затем проверяется второе и так происходит до тех пор, пока последнее не примет значение 0. В цикле while, наоборот, сначала, проверялось условие, а потом выполнялось выражение. Как мы видели, может иметь место такая ситуация, когда цикл while не выполняется ни разу. Цикл do-while выполняется, как минимум, один раз. И здесь также Выражение1 может быть составным.
С использованием цикла do-while напишем программу, вычисляющую сумму п + 1 первых членов так называемого гармонического ряда 1+1/2+1/3+1/4+... +1/n.