- •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;
- •Введение в численные методы
Viod main()
{
double a.b,c,xl,x2;
printf ("a="); scanf ("%lf ",&a);
printf ("b="); scanf ("%lf ",&b);
printf ("c=") ; scanf("%lf" ,&c) ;
xl=(-b+(c=sqrt(b*b-4.0*a*c)))/(a+a);
x2=(-b-c)/(a+a);
printf ("xl=%f\n",xl);
printf ("x2=%f\n",x2);
getch();
}
Функция scanf в какой-то степени напоминает по своей структуре функцию printf, но по своему назначению скорее противоположна ей, поскольку предназначена для придания переменным значений, вводимых с консоли. Структура функции такова:
Scanf(“строка.", Указатель1, Указатель2,...);
В строке в кавычках мы рекомендуем начинающим писать только форматные выражения, полностью аналогичные форматным выражениям в функции printf. Количество форматных выражений, которые советуем писать подряд через разделители, например, запятые, должно быть равным количеству элементов в конструкции после закрывающих строку кавычек и запятой. Функция устроена так, что в ней перечисляются (через запятую) не сами имена переменных, которым нужно придать значения, а так называемые указатели на имена или адреса этих переменных. Разговор об указателях отложим до более подходящего момента, ограничившись пока тем пояснением, что адрес переменной r (указатель на r) записывается как &r, что мы и видим в примере программы. Важнейшим обстоятельством является то, что программист должен очень строго следить за совпадением типа вводимой переменной с типом соответствующего форматного выражения. Так, если в функции printf вы печатаете переменную типа double по формату %f, то значение выведется на экран правильно, однако, если вы по этому формату попытаетесь ввести переменную типа double функцией scanf, то результат будет плачевным, вплоть до полного "зависания" системы - для типа double строго требуется формат %lf. Сочетание букв соответствует типу long float, что и есть double. Можно ли между знаком % и форматными буквами писать что-нибудь типа 6.3? Да, можно. Однако извольте и число, вводимое с клавиатуры, задавать именно в такой форме: две позиции в целой части, десятичная точка, три позиции в дробной части. Для полного согласования типов вводимых значений и типов форматных выражений автор настоятельно советует читателю еще раз обратиться к справочной системе Builder, вызвав справку по функции scanf. Отметим также еще раз, что если функция printf может печатать значение переменной, значение выражения, значение, возвращаемое какой-либо функцией, то функция scanf только присваивает переменной значение, вводимое с клавиатуры. Если ввод осуществляется выражением:
scanf("%lf,%lf,%lf",&a,&b,&c);
то нужно ввести на экран первое число, затем запятую, затем второе число, затем запятую, затем третье число и только потом нажать клавишу ввода Enter. В примере программы ввод организован иначе. Сначала печатается "подсказка" а=. Теперь курсор ввода находится правее знака равенства, и вы должны напечатать вводимое число и нажать Enter. Все. Первая функция ввода проработала, и переменная а получила введенное значение. Функция scanf, закончив работать, всегда осуществляет переход на новую строку так, что следующая подсказка будет уже на новой строке, и все повторяется теперь для переменной b, а затем и для с.
Читатель уже понял, что программа вычисляет корни квадратного уравнения ax2 + Ьх + с = 0. Здесь могут возникнуть неприятности, если a равно нулю или если дискриминант отрицателен. Будем считать, что коэффициенты введены такими, что неприятностей не возникнет. Далее в программе реализованы расчетные формулы для корней. Здесь снова продемонстрирована интересная новинка. Обратите внимания на то, что прямо внутри арифметического выражения помещено выражение присваивания: c=sqrt(b*b-4.0*a*c) , что вполне допустимо. Тогда переменная с получает новое значение, вычисленное с использованием ее старого значения. Разумеется, это старое значение после такого присваивания исчезает, но в данном примере оно уже и не нужно, что и позволило сэкономить немного машинной памяти - обойтись без введения и описания новой переменной. Если бы мы не присвоили переменной с значения корня из дискриминанта, в следующем выражении нам снова пришлось бы вычислять этот корень. Поскольку именно вычисление значений математических функций занимает наибольшее процессорное время, здесь мы оптимизировали программу по быстродействию. И еще один момент. В последних выражениях программы мы снова пишем а+а вместо 2*а, заменяя медленную операцию умножения быстрой операцией сложения.