Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию.doc
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
1.2 Mб
Скачать

Условные выражения

До сих пор мы жили в скучном мире, где программы выполнялись последовательно, выражение за выражени­ем от начала до конца, не задавая себе вопросов, а значит, и не пытаясь находить ответы. Да простит нам читатель такое "очеловечивание" программы, но суть материала данного раздела действительно связана с тем, что в про­грамме могут анализироваться те или иные условия, и в зависимости от того, выполняются ли эти условия, про­грамма работает по-разному. Таким образом, реализу­ются разветвляющиеся алгоритмы - сценарий работы может развиваться по одному из нескольких вариантов в зависимости от условий. Мы рассмотрим лишь некото­рые средства языка С, позволяющие программировать разветвляющиеся алгоритмы. Хотя другие средства мо­гут оказаться весьма удобными для какой-то конкретной задачи, мы остановимся только на условных выражени­ях, которые, впрочем, полностью решают задачу органи­зации разветвлений.

Начнем сразу с примера программы:

#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>