Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №9.

Выражения.

При написании программного кода из объявленных переменных, чисел, констант составляют выражения, которые содержат операторы (при использовании переменных совместно с операторами они называются операндами). Существуют различные операторы, начиная от самых простых и до чрезвычайно сложных. Простые операторы включают в себя все основные математические действия (например, оператор + производит сложение двух операндов), а сложные операторы предназначены для выполнения манипуляций над двоичным представлением содержимого переменной. Существуют также логические операторы, работающие с логическими значениями, и операторы присваивания типа =. На этой лекции мы изучим математические операторы и оператор присваивания.

Все операторы могут быть условно разделены на три категории:

Унарные операторы, которые выполняют действие над единственным операндом.

Бинарные операторы, которые выполняют действие над двумя операндами.

Тринарные операторы, которые выполняют действие над тремя операндами.

Большинство операторов попадает в категорию бинарных; существует также несколько унарных операторов и единственный тринарный, называемый условным оператором.

Арифметические операции языка C#.

В C# используется пять математических операндов: сложения (+), вычитания (-), умножения

(*), целочисленного деления (/) и деления по модулю (%).

В операциях сложения, вычитания и умножения разобраться несложно.

Если делитель и делимое – целые числа, то результатом будет целая часть частного. Если делитель и делимое – вещественные числа, то результатом будет вещественное частое.

Результатом операции % будет остаток частного, если делитель и делимое целочисленные

данные. Если делитель или делимое отрицателен, знак результата зависит от реализации языка.

Если операнды типа float, то операция деления по модулю выполняется следующим образом:

fResult = fDividend % fDivisor;

Знак fResult совпадает со знаком fDividend, причем fResult может быть рассчитан по формуле:

51

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

fResult = fDividend - n * fDivisor

где n наибольшее целое число, меньшее или равное fDividend /fDivisor. Например:

4.5 % 1.25

равно 0,75. Давайте посчитаем... 4,5 / 1,25 = 3,6, следовательно, n равно 3.

4,5 -3*1,25 = 0,75.

Для арифметических операций используется обычная арифметическая приоритетность. Все эти операторы могут использоваться как бинарные:

int a = 8, b=3;

Console.WriteLine("Значение a+b={0}", a + b);

Console.WriteLine("Значение a-b={0}", a - b);

Console.WriteLine("Значение a*b={0}", a * b);

Console.WriteLine("Значение a/b={0}", a / b);

Console.WriteLine("Значение a%b={0}", a % b);

Результат:

52

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Операторы (+) и (-), могут быть использованы как унарные:

int a = 8; int b = +a; int c = -a;

Console.WriteLine("Значение b={0}", b);

Console.WriteLine("Значение c={0}", c);

...

Результат:

Если варажение состоит из переменных разного типа, то результат повышается до типа с большим диапазоном значений (это называется неявное преобразование типов).

Совместное использование математических операторов с операторами присваивания.

Рассмотрим еще раз на операторе присваивания (=):

Х=35;

Операнд, который может находиться слева от оператора присваивания, называется адресным операндом, или l-значением (от англ. слова left, т.е. левый). Операнд, который может

53

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

находиться справа от операнда присваивания, называется операционным операндом, или r-

значением ( от англ. слова right, т.е. правый).

Пример: myAge=myAge+2;

Можно: myAge+=2;

Этот оператор присваивания с суммой (+=) добавляет r-значение к l-значению, а затем снова записывает результат в l-значение.

int a = 9, f = 10;

a+=f;

Помимо оператора присваивания с суммой существуют также операторы присваивания с вычитанием (-=), делением (/=), умножением (*=) и делением по модулю (%=). Все операторы бинарные.

Инкремент и декремент.

Очень часто в программах к переменным добавляется (или вычитается) единица. В языке C# увеличение значения на 1 называется инкрементом, а уменьшение на 1 декрементом. Для этого предусмотрены специальные унарные операторы.

Оператор инкремента (++) увеличивает значение переменной на 1, а оператор декремента (--) уменьшает его на 1.

А++;

//увеличение значения А на 1

А--;

//уменьшение значения А на 1

Как оператор инкремента, так и оператор декремента работает в двух вариантах: префиксном и постфиксном. Префиксный вариант записывается перед именем переменной (++myAge), постфиксный - после него (myAge++). В простом выражении вариант использования не имеет большого значения, но в сложном при выполнении приращения одной переменной с последующим присваиванием результата другой переменной это весьма существенно. Префиксный оператор вычисляется до присваивания, а постфиксный – после.

x=5;

int d=++x;

Результат: d=6

x=5;

int d=x++;

Результат: d=5

54

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

 

Старшинство операторов.

 

 

Старшинство

Операторы

 

 

Высшее

++, -- (используемые в качестве префиксов); +, -

 

(унарные)

 

 

 

*, /, %

 

 

 

+, -

 

 

 

=, * = , / = , % = , + = , - =

 

 

Низшее

++, -- (используемые в качестве суффиксов)

 

 

Для изменения порядка выполнения операторов используются скобки.

Выражения отношения.

Операторы отношений используются для сравнения двух значений. Выражения всегда возвращают значения true (истина) или false (ложь). Все операторы бинарные.

 

 

 

Возвращаемое

Имя

Оператор

Пример

Значение

 

 

 

 

Равно

==

100 == 50

false

 

 

50 == 50

true

 

 

 

 

Не равно

!=

100 != 50

true

 

 

50 != 50

false

 

 

 

 

Больше

>

100>50

true

 

 

50>50

false

 

 

 

 

Больше

>=

100>=50

true

или равно

 

50>=50

true

 

 

 

 

Меньше

<

100<50

false

 

 

50<50

false

 

 

 

 

Меньше

<=

100<=50

false

 

 

 

 

55

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

или равно

 

50<=50

true

 

 

 

 

56

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №10.

Программирование ветвящихся алгоритмов.

Обычно программа выполняется по порядку, строка за строкой. Оператор if позволяет проверить условие (например, равны ли две переменные) и изменить ход выполнения программы, направив ее другое русло, которое будет зависеть от результата сравнения.

Простейшая форма оператора if имеет следующий вид:

if (условие)

выражение;

Условие в круглых скобках содержит операторы отношений. Если это выражение возвращает значение true, то оператор выполняется. Рассмотрим следующий пример:

if (a>b)

a=b;

Здесь сравниваются значения переменных а и b. Если значение переменной а больше, то во второй строчке этого программного фрагмента ее значение устанавливается равным значению переменной b.

Если должно выполняться не одно выражение, то используется блок выражений, заключенный в фигурные скобки.

if (условие)

{

выражение1;

выражение2;

выражение3;

}

Предупреждение. Многие начинающие программисты по невнимательности ставят точку с запятой после выражения if:

if (a<10);

57

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

a=10;

В этом программном фрагменте было задумано сравнить значение переменной а с числом 10 и, если окажется, что оно меньше десяти, установить его равным этому числу. При выполнении этого программного фрагмента обнаруживается, что переменная а (вне зависимости от ее исходного значения) всегда устанавливается равной 10. В чем же дело? А дело в том, что оператор if, вернее, связанное с ним выражение сравнения, оканчивается точкой с запятой, создавая тем самым бездействующую инструкцию.

Помните, что для компилятора отступ не играет никакой роли. Приведенный выше фрагмент можно переписать по-другому:

if (a<10) //проверка

;//пустое выражение, контролируемое оператором if

a=10; // присваивание

При удалении ненужной точки с запятой последняя строка этого фрагмента станет частью конструкции с оператором if и программа заработает в соответствии с намерением программиста.

Довольно часто в программах требуется, чтобы при выполнении некоторого условия (т.е. когда это условие возвратит значение true) программа выполняла один блок команд, а при его невыполнении (т.е. когда условие возвратит значение false) – другой блок.

if (условие)

выражение1;

else

выражение2;

следующее выражение;

Если условие возвращает значение true, выполняется выражение1, в противном случае выполняется выражение2. После этого выполняется следующее выражение.

Пример. Программа нахождения максимального числа из двух.

using System;

58

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class MyProgram

{

static void Main(string[] args)

{

int a, b;

Console.Write("Введите первое число:"); a=Convert.ToInt32(Console.ReadLine()); Console.Write("Введите второе число:"); b=Convert.ToInt32(Console.ReadLine()); if (a > b)

Console.WriteLine("Большее число: {0}", a); else

Console.WriteLine("Большее число: {0}", b);

Console.ReadLine();

}

}

}

Результат.

59

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Сложные конструкции с if.

Нет никаких ограничений на использование любых операторов в блоках выражений в конструкции if-else, в том числе на использование дополнительных операторов if и else. В этом случае будет получена вложенная конструкция из нескольких операторов if:

if (условие1)

{

if (условие2)

выражение 1;

else

{

if(условие3)

выражение 2;

else

выражение 3;

}

}

else

выражение 4;

Смысл этой конструкции из нескольких операторов if можно расшифровать так: если условие1 истинно и условие2 истинно, выполняется выражение1. Если условие1 истинно, а условие2 – нет, тогда проверьте условие3 и, если оно истинно, выполните выражение2. Если условие1 истинно, а условие2 и условие3 – нет, тогда выполните выражение3. Наконец, если условие1 ложно, выполните выражение4.

Пример использования фигурных скобок для правильного сопоставления операторов else и if.

С точки зрения компилятора в этой программе на языке С# нет никаких ошибок. Программа не работает как хотелось из-за логической ошибки. Более того, даже при тестировании этой программы может создаться впечатление, что она работает правильно. Ведь при вводе числа

60