Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Введение в программирование на языке Visual C#

Сокращенный условный оператор

Если необходимо выполнить некоторое действие только при истинности проверяемого условия, то в таком случае применяется сокращенный условный оператор. Общий вид в алгоритме конструкции сокращенного условного оператора представлен на рис. 64.

Рис. 64. Блок-схема сокращенного условного оператора Синтаксис сокращенного условного оператора следующий:

if (Логическое выражение)

Pi;

где if (если) — зарезервированное слово, а Р! — оператор.

Например, в листинге 48 при истинности логического выражения выводится соответствующее сообщение.

Листинг 48

private void Forml_Load(object sender, EventArgs e)

{

int a=l; int b=5; if (a

MessageBox.Show("Тест 1 ветви ", "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

Application.Exit();

}

Составной условный оператор

Если при некотором условии надо выполнить определенную последовательность операторов, то их объединяют в один составной оператор. Общий вид в алгоритме конструкции составного условного оператора представлен на рис. 65.

Логическое

выражение

Рис. 65. Блок-схема составного условного оператора

Синтаксис составного условного оператора следующий:

її (Логическое выражение) г

Рі;

else

{

М, ; М2;

Мп;

}

где if, else — зарезервированные слова, а Рь Р2,... Р„, Мь М2,... Мп — операторы.

Фигурные скобки играют роль блока, который объединяет в себе несколько операторов.

Например, в листинге 49 в каждой ветви условного оператора мы хотим выполнить по два оператора, поэтому заключили их в фигурные скобки.

Листинг 49

private void Forml_Load(object sender, EventArgs e)

{

int a=l; int b=5; if (a < b)

int с = а + b;

MessageBox.Show("Тест 1 ветви. Результат= " + с.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

eise

{

int с = а * b;

MessageBox.Show("Тест 2 ветви. Результат= " + с.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

Application.Exit();

}

Многозначные ветвления

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

Общий вид в алгоритме конструкции многозначных ветвлений представлен на рис. 66.

Рис. 66. Блок-схема конструкции многозначных ветвлений

Синтаксис условного оператора в конструкции многозначных ветвлений следующий:

if (Логическое выражение 1)

Рь

else

if (Логическое выражение2)

Р2;

else

if (Логическое выражениеЗ)

Р3;

else

Р4;

где if, else — зарезервированные слова, a Pi, Р2, Рз, Р4 — операторы.

Алгоритм работы такой конструкции следующий: если Логическое выражение! истинно, то выполняется оператор или блок операторов, следующих в данной ветви, в противном случае этот оператор или блок пропускается. Если логическое выражение, следующее за оператором if, ложно, то анализируется Логическое выражение2, следующее за оператором else if. Если оно истинно, то выполняется оператор или блок операторов, следующих в данной ветви, в противном случае этот оператор или блок пропускается. Операторы, следующие за последним else, выполняются лишь в том случае, если ложны все логические выражения в конструкциях if. Любая встретившаяся часть else принадлежит к ближайшему к ней условному оператору if. Условные операторы if в такой конструкции называются вложенными.

Например, в листинге 50 показан процесс тестирования трех ветвей программы. Пользователь может менять исходные данные, находящиеся в ячейках а и Ь, или проверки логических выражений и всякий раз получать тот или иной результат. Должно быть понятно, что результатом выполнения данной программы будет тестирование третьей ветви и то что, программу можно было бы упростить, сразу выполнив проверку if (а <= Ь).

Листинг 50

private void Forml_Load(object sender, EventArgs e)

{

int a=5; int b=l; if (a < b)

{

int c = a + b;

MessageBox.Show("Тест 1 ветви. Результат= " + с.ToString("n"), "Заголовок окна", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

else

if (a == b)

{

int c = a * b;

MessageBox.Show("Тест 2 ветви. Результат= " + с.ToString("n"), "Заголовок окна", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

else

{

int c = a - b;

MessageBox.Show("Тест 3 ветви. Результат^ " + с.ToString("n"), "Заголовок окна", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

Application.Exit();

}

Алгоритмы поиска максимального и минимального элементов

Задача 1. Найти максимальное из двух чисел.

Разработка алгоритма решения задачи представлена на рис. 67.

Рис. 67. Алгоритм нахождения максимального из двух чисел Задача 2. Найти минимальное из трех чисел.

Фрагмент разработки алгоритма решения задачи (1-й способ) представлен на рис. 68.

Рис. 68. Алгоритм нахождения минимального из трех чисел (1-й способ)

Фрагмент разработки алгоритма решения задачи (2-й способ) представлен на рис. 69.

Рис. 69. Алгоритм нахождения минимального из трех чисел (2-й способ)

Фрагмент разработки алгоритма решения задачи (3-й способ) представлен на рис. 70.

Рис. 70. Алгоритм нахождения минимального из трех чисел (3-й способ)

Задача 3. Найдите максимальное из четырех чисел.

В листинге 51 приведен код программы, созданной как консольное приложение, отвечающий за решение задачи.

Листинг 51

namespace ConsoleApplicationl {

class Program {

static void Main(string[] args)

{

string con;

Console.Write("Введите значение a ");

con = Console.ReadLine();

double a = Convert.ToDouble(con);

Console.Write("Введите значение b ");

con = Console.ReadLine();

double b = Convert.ToDouble(con);

Console.Write("Введите значение с ");

con = Console.ReadLine();

double c = Convert.ToDouble(con);

Console.Write("Введите значение d "); con = Console.ReadLine(); double d = Convert.ToDouble(con); double max = a; if (b > max)

max = b ; if (c > max)

max = c ; if (d > max)

max= d ;

Console.WriteLine("Максимальное из четырех чисел = " + max Console.ReadLine();

}

}

}

На основе рассмотренных алгоритмов решим следующую задачу.

Задача 4. Вычислите значение функции у, если:

min (al, а2, аЗ ),

шах {Ы, Ь2, min { cl, с2 }},

ч_ если -1 < X < 1 если X > 1 если X < -1

Разработка алгоритма решения задачи представлена на рис. 71.

В листинге 52 приведен код процедуры, отвечающий за решение задачи.

Листинг 52 namespace WindowsApplicationl

{

public partial class Forml : Form

{

public Forml()

{

InitializeComponent();

}

private void Forml_Load(object sender, EventArgs e)

{

string a_l =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение "Заголовок окна", -1, -1);

double al = Convert.ToDouble(a_l); string a_2 =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение "Заголовок окна", -1, -1);

al" ,

а2" ,

и it

double a2 = Convert.ToDouble(a_2); string a_3 =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение аЗ", "Заголовок окна", -1, -1);

double аЗ = Convert.ToDouble(а_3); string b_l =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение bl", "Заголовок окна", -1, -1);

double bl = Convert.ToDouble(b_l); string b_2 =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение Ь2", "Заголовок окна", -1, -1);

double Ь2 = Convert.ToDouble(b_2); string c_l =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение cl", "Заголовок окна", -1, -1);

double cl = Convert.ToDouble(c_l); string c_2 =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение c2", "Заголовок окна", -1, -1);

double c2 = Convert.ToDouble(c_2); string x_l =

Microsoft.VisualBasic.Interaction.InputBox("Введите значение x", "Заголовок окна", -1, -1);

double x = Convert.ToDouble(x_l);

Іf(X >= 1)

{

double min = cl ; if (c2 < min) min= c2 ; double max = bl; if (b2 > max) max= b2 ; if (min > max) max = min ; double yl = max ;

MessageBox.Show("Тест 2 ветви ", "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("yl = " + yl.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

else

if (x >= -1)

{

double min = al; if (a2 < min) min = a2; if (a3 < min) min = a3; double y2 = min;

MessageBox.Show("Тест 1 ветви ", "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("y2 = " + y2.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

else

{

double уЗ = 1;

MessageBox.Show("Тест 3 ветви ", "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("уЗ = " + уЗ.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

Application.Exit();

}

}

}

Рис. 71. Алгоритм решения задачи

4.6. Упражнения к главе

Вопрос 1. Каким будет значение переменной s после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

double n = 2.5;

double f = 0.5; bool d = true; int s = 0; if (n < f) s = 12; if (f >= n) s = 2 8; if (d)

s = 39;

MessageBox.Show("Ответ =" + s.ToString("n"));

}

Ответ. В этом упражнении значение переменной s равно 39. Рассуждать надо следующим образом. Первые два логических выражения ложны, поэтому проверяется третье логическое выражение, в ячейке d хранится значение true (истина), поэтому выполняется оператор s = 39.

Вопрос 2. Каким будет значение переменной j после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int w = 3; int p = 5; double j = 3.5; if (j < p ScSc j > w)

{

j = j + 0.5 ; j = j + 10 ;

}

else

j = ll;

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Рассуждать нужно следующим образом. Подставив значения переменных w, р, j и проверив логическое выражение, получаем, что его значение есть true (истина). Следовательно, выполняется оператор j = j + 0.5, а затем оператор j = j + 10. Ответ в примере: значение переменной j = 14.

Вопрос 3. Каким будет значение переменной j после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int

1

3

=

3;

int

k

=

15

/

int

m

=

20

/

if

(3

< =

= k)

{

1

f

(m

>

k)

{

?

3

=

k

%

1

3

=

a

3

%

}

else

3 = 10;

}

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Подставив значения переменных к, m, j и проверив оба логических выражения, получаем, что их значения есть true (истина). Следовательно, выполняется оператор j = к % 2, а затем j = j % 3. Ответ в упражнении: значение переменной] равно 1.

Вопрос 4. Каким будет значение переменной j после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int j = 6;

int k = 6;

if (j > k)

{

j = j + 2;

j = j + 3;

}

else

{

j = k - 3 ;

j = j + 4;

}

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Подставив значения переменных к и j, проверив логическое выражение, получаем, что его значение есть false (ложь). Следовательно, выполняются операторы j = k- 3Hj=j + 4. Ответ в упражнении: значение переменной j = 7.

Вопрос 5. Каким будет значение переменной j после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int w — 3;

int p = 5;

double j = 3.5;

if ( (j < p) && (j > w) )

{

j - j + 0.5 ; j = j + 12 ;

}

else

j = 11 ;

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Подставив значения переменных, получим, что два простых условия j < р и j > w оказываются истинными, следовательно, и все логическое выражение имеет значение true. Следовательно, выполняется оператор j = j + 0.5, а затем j = j + 12. После их выполнения в ячейке j будет число 16.

Вопрос 6. Каким будет значение переменной j после выполнения условного оператора?

private void buttonl_Click(object sender, EventArgs e)

{

int j = 7; int k = 7; int f = 10; if (j >= k)

if (f <= к)

{

к = 30 % 5; j = (j % 2) * к;

}

else

}

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Подставив значения переменных в первое логическое выражение, получим результат: true (истина). Подставив значения переменных во второе логическое выражение, получим, что результат: false (ложь), следовательно, выполняется оператор в ветви else (фигурные скобки, отвечающие за выполнение блока операторов, отсутствуют). Таким образом, после выполнения условного оператора в ячейке j будет находиться 1.

Вопрос 7. Каким будет значение переменной f после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int x = 55; double у = 5El; bool d = false; int f = 0; if (d)

f = x % 2 ; if (x < y) f = x ; if (X > y)

f = (int) 2.9 ;

MessageBox.Show("Ответ = " + f.ToString("n"));

}

Ответ. Проверив первое логическое выражение, получим, что результат ложь — в ячейке d хранится значение false. Поэтому оператор f = х % 2 не выполняется. Для того чтобы определить, истинно или ложно второе логическое выражение, надо знать, что число 5Е1 записано в форме с плавающей точкой и равно 50. Следовательно, второе логическое выражение ложно, и оператор f = х не выполняется. Проверив третье логическое выражение, убеждаемся в том, что оно истинно, так как 55 > 50. В операторе f = (int) 2.9 используется явное преобразование типов. Таким образом, после выполнения условного оператора в ячейке f будет 2.

Вопрос 8. Какое количество ошибок в следующем фрагменте программы?

private void buttonl_Click(object sender, EventArgs e)

{

int x, a ; bool s ; x = 0.5 ;

S = 0.4 ; a = true ; if x < 5 s = 5

MessageBox.Show("Ответ = " + s.ToString("n"));

}

Ответ. 1-я ошибка допущена в операторе х = 0.5. Переменная х описана как целочисленная переменная, а справа от оператора присваивания находится дробное число 0.5, что недопустимо. 2-я ошибка в операторе s = 0.4; Переменная s описана как логическая, а логические переменные могут принимать только два значения: истина или ложь. 3-я ошибка допущена в операторе s = 5; Переменная s описана как логическая, число 5 — целое число. 4-я ошибка: логическое выражение х<5 в операторе if написано без скобок, 5-я ошибка: после оператора s = 5 пропущена точка с запятой. Таким образом, в данном фрагменте программы 5 ошибок.

Вопрос 9. Каким будет значение переменной j после выполнения фрагмента программы?

private void buttonl_Click(object sender, EventArgs e)

{

int j = 10; int k = 10; if (j > k)

j = k - 3 ;

else

{

k = k - 3; j = k - 3 ;

}

MessageBox.Show("Ответ = " + j.ToString("n"));

}

Ответ. Проверив логическое выражение, убеждаемся в том, что оно ложно. Следовательно, выполняются операторы в ветви else. После выполнения оператора к = к — 3 в ячейке к оказывается значение 7, а после выполнения оператора j = к — 3 в ячейке j находится число 4. Ответ в упражнении: j=4.

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
 
Популярные страницы