- •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;
- •Введение в численные методы
Условные выражения
До сих пор мы жили в скучном мире, где программы выполнялись последовательно, выражение за выражением от начала до конца, не задавая себе вопросов, а значит, и не пытаясь находить ответы. Да простит нам читатель такое "очеловечивание" программы, но суть материала данного раздела действительно связана с тем, что в программе могут анализироваться те или иные условия, и в зависимости от того, выполняются ли эти условия, программа работает по-разному. Таким образом, реализуются разветвляющиеся алгоритмы - сценарий работы может развиваться по одному из нескольких вариантов в зависимости от условий. Мы рассмотрим лишь некоторые средства языка С, позволяющие программировать разветвляющиеся алгоритмы. Хотя другие средства могут оказаться весьма удобными для какой-то конкретной задачи, мы остановимся только на условных выражениях, которые, впрочем, полностью решают задачу организации разветвлений.
Начнем сразу с примера программы:
#include<stdio.h>
Void main()
{
int a,b;
printf ("ВВЕДИ A="); scanf("%d",&a);
printf ("ВВЕДИ В="); scanf("%d",&b);
if(a%b==0)
рrintf("Число %d делится на %d нацело\n",а,b);
else
{
printf ("Число %d не делится на %d нацело\n",а,b);
printf ("Остаток деления %d на %d равен %d\n",a,b,a%b);
}
}
Программа делает простые вещи. Принимает с консоли два целых числа и проверяет, делится ли первое число на второе нацело. В первом случае на экран выводится одно сообщение, во втором - два других.
Условные выражения, обеспечивающие альтернативные пути выполнения программы, могут быть двух типов. Простое условное выражение имеет структуру;
If(Выраженне1) Выражение2;
Само служебное слово if означает ЕСЛИ. Если Выражение1 имеет значение 0, то Выражение2 пропускается, и программа выполняется дальше. Если Выражение1 не равно 0, то выполняется Выражение2, и только после этого программа работает дальше. Сложное условное выражение имеет вид:
If(Выражение1) Выраженпе2; else ВыражениеЗ;
Служебное слово else означает ИНАЧЕ. Если Выражение1 имеет значение отличное от нуля, то выполняется Выражение2, пропускается ВыражениеЗ, и программа выполняется дальше. Если же Выражение1 имеет значение 0, то, наоборот, пропускается Выражение2, выполняется ВыражениеЗ, программа работает дальше. Любое из выражений может, в свою очередь, быть условным выражением. Необходимо только следить за тем, чтобы служебное слово if не оказалось оторванным от своего else. Это значит, что между if и else формально должно стоять только одно выражение.
А что делать, если необходимо, чтобы в качестве Выражения2 или ВыраженияЗ выполнялась целая группа действий? В этом случае вам нужно "обмануть" систему, замаскировать группу выражений под одно выражение. Делается это очень просто. Группу выражений объединяют в так называемое составное выражение (блок) - заключают эту группу в фигурные скобки {}. Тогда группа в фигурных скобках и в условных выражениях и в других специальных конструкциях будет восприниматься как одно выражение.
Теперь, очевидно, нам никак не обойтись без введения в программу таких понятий, как "больше", "не равно" и так далее. Выражения, содержащие такого сорта сравнения, естественно назвать выражениями отношений. Сразу отметим, что выражения отношений имеют целый, беззнаковый числовой тип. Более того, отношения могут принимать только одно из двух возможных значений: 0 или 1. Первое можно рассматривать как "ЛОЖЬ", а второе как "ИСТИНА", хотя такая трактовка чужда языку С.
В языке допустимы следующие знаки сравнения:
= - равно;
< - меньше;
!= - не равно;
>= - не меньше;
> - больше;
<= - не больше.
Смысл обозначений совершенно ясен и не требует пояснений. Приведем примеры. Значение выражения 3<=7 имеет значение 1, поскольку "ЭТО ПРАВИЛЬНО", а выражение 0.2<.0 равно нулю, поскольку "ЭТО НЕПРАВДА". Выражение а!=b равно нулю, если а и b имеют равные значения. В противном случае выражение имеет значение 1. При этом можно сравнивать не только числовые значения, но и, например, символьные переменные. Самое интересное заключается в том, что во многих случаях вы имеете право сравнивать значения разных типов. Так, переменная а может быть целой, a b символьной. Догадываетесь, что сравнивается в этой ситуации?
Важную роль в условных выражениях играют логические операции. Таких операций три. Логическое отрицание !а имеет значение 1, если а равно нулю и имеет значение 0 при любых других значениях а. Логическое умножение А&&В имеет значение 1 в том и только том случае, когда и А и В не равны нулю, и имеет значение 0, когда либо А, либо B, либо и А и В равны пулю. Логическое сложение P||Q имеет значение 0 в том и только том случае, когда и Р и Q равны нулю, и имеет значение 1 при любых других вариантах.
В сложных логических выражениях надо ориентироваться на приоритеты операций. В первую очередь выполняются операции отрицания, во вторую очередь - логические умножения и в последнюю - логические сложения. Во избежание неприятностей рекомендуется пользоваться круглыми скобками. Читателю предлагается убедиться в том, что
(3==7)||(2!=4) есть 1,
(!(2!=0)||((!2)==5) есть 0,
!(4.5>1.0)&&(3!=3) есть 0,
(!(1&&2))||((3>2) есть 1.
Теперь вернемся к нашей последней программе. Здесь в условии после if вычисляется остаток от деления a на b и результат сравнивается с нулем. Если остаток от деления равен нулю, то есть, если а делится на b нацело, то выполняется выражение после if(). В противном случае выполняется составное выражение в фигурных скобках, следующее за else. Цель достигнута, но не самым лучшим способом. Действительно, для достижения этой же цели в скобках после if достаточно было бы написать !(а%b). А можно было бы поступить и еще проще. В скобках пишем просто а%b, и выражения перед и после else меняем местами.
Для закрепления усвоенного составим еще одну программу, которая снова решает квадратное уравнение, но предварительно страхует нас от случая комплексных корней, когда дискриминант отрицателен:
#include<stdio.h>
#include<math.h>