Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на C#. Часть 1. Учебное пособие
.pdf
18. Используя арифметический условный оператор, составить про-
<
≤
<≥−
грамму для вычисления значений функции:
⎧
xеслиxsin
⎪
=
y
⎨
2
⎪
⎩
Используя логический условный оператор, составить программу
19.
для вычисления значений функции:
xеслиx
>
,3,
,43,1
xеслиxln
≤≤−
.4,
⎧
xеслиxlg
,2,1,
⎪
y
=
⎨
3
⎪
⎩
20.
Составить схему алгоритма и программу для вычисления значения
функции:
⎧
⎪
⎪
lg
2
⎪
⎪
V
=
⎨
⎪
⎪
⎪
⎪
⎩
21.
Составить схему алгоритма и, используя оператор безусловного
перехода, составить программу для вычисления значений функции:
lg
R
R
lg
3
2
+
4,3
8
2
+
87,15374,0
5,2
RR
+−
2159,1
5,2
25,1
xеслиxtg
,32,1,
<<
xеслиx
.3,
≥
3
3
RRесли
RRесли
>+−
≤+−
;02159,1,
.02159,1,
⎧
⎪
3
⎪
y
=
⎨
⎪
⎪
⎩
yxеслиx
,0,0|,1|
≥>+
yxеслиx
,0,0,1
><
yxеслиxctg
,0,0,
<<
yxеслиx
.0,0,
41

3. ЦИКЛИЧЕСКИЕ ОПЕРАТОРЫ
С# включает достаточно большой набор циклических операторов, таких как for, while, do...while, а также цикл с перебором каждого элемента
foreach. Кроме того, С# поддерживает операторы перехода и возврата, например, goto, break, continue и return.
3.1. ОПЕРАТОР ПЕРЕХОДА
Оператор goto был основой для реализации других операторов цикла.
Он используется следующим образом:
1. Создаётся метка в программы, например, Label.
2. Организуется переход на метку goto Label.
Имя метки Label заканчивается двоеточием. Оно указывает на точку
выполнения программы после использования инструкции goto. Обычно инструкция goto привязывается к условию, как показано в следующем примере:
using Syst
em;
public class Labels
{
public static int Main()
{
int i = 0;
Label:
Console.WriteLine("i: {0}", i);
i = i+1;
if (i < 10)
goto Label;
return 0;
} }
На экран выводится строка со значением i десять раз (от 0 до 9). Инструкция goto помогает повторить выполнение блока инструкций определённое
число раз. С использованием goto можно организовать циклический повтор
42

операций в программе. Это явление привело к созданию альтернативного метода организации циклов: while, do..while, for или foreach. Использование
goto в программе нежелательно.
3.2. ОПЕРАТОР ЦИКЛА С ПРЕДУСЛОВИЕМ
Циклическая инструкция оператора работает по принципу: «Пока вы-
полняется условие – происходит работа». Её синтаксис выглядит следующим
образом:
while (A)
{
ST;
}
где: A – логическое выражение;
ST – оператор (возможно составной) – тело цикла.
Значение выражения A вычисляется перед каждым выполнением опе-
ратора ST, поэтому цикл while называют ещё циклом с предусловием. Если
значение A есть true, то оператор ST
выполняется и управление передаётся на
вычисление значения выражения A; если значение выражения A есть false, то
оператор ST не выполняется и происходит выход из цикла.
Структурная схема оператора While приведена на рис. 3.1.
Если первоначальное значение выражения A – false, то оператор ST не
будет выполнен ни разу.
Чтобы избежать бесконечног
о повторения (зацикливания), необходимо
хотя бы
одну переменную, входящую в условие, изменять в теле оператора
цикла. Более того, эти изменения должны быть такими, чтобы булевское вы-
ражение рано или поздно приняло значение false. Если же булевское выра-
жение первоначально истинно, и ни при каких обстоятельствах не становится
ложным, то выполнение оператора цикла никогда не завершится.
43

Цикл_1
1
пока A = true
2
ST;
1
Цикл_1
Рис. 3.1. Структурная схема оператора while
3.3. ОПЕРАТОР ЦИКЛА С ПОСТУСЛОВИЕМ
Цикл do…while (цикл с постусловием), как правило, используется в тех
случаях, когда необходимо выполнить действие в теле цикла хотя бы один
раз. Синтаксис оператора цикла do…while:
do
{
ST;
}
while(A)
где: ST – оператор (возможно составной) – тело цикла; А – логическое
выражение.
«Работает» оператор так: выполняется оператор ST, вычисляется значение выражения А; если его значени
е – true, то вновь выполняется оператор
ST, если з
44
начение выражения А – false, то цикл заканчивается. Если же зна-

чение выражения А есть false с самого начала, то оператор ST выполняется
лишь один раз. Если выражение А никогда не принимает значение false, то
оператор ST выполняется бесконечное число раз, т.е. происходит «зацикливание».
Структурная схема оператора do…while приведена на рис. 3.2.
1
Цикл_2
2
ST;
1
Пока A = true,
Цикл_2.
Рис. 3.2. Структурная схема оператора do…while
3.4. ОПЕРАТОР ЦИКЛА FOR
Оператор цикла for служит для организации цикла с известным количеством повторений.
Синтаксис оператора for по возрастающим значениям параметра i:
for (i=in; i<=ik; i++) ST;
где i – переменная (параметр) цикла; in – начальное значение параметра цикла, а ik – конечное; ST – оператор (возможно составной) – тело цикла.
45

Переменные i, in, ik должны быть одного и того же типа и значение in
должно быть больше, чем значение ik. Переменная i принимает последовательные значения данного типа от in до ik. В частном случае, когда in и ik –
целые числа, а i – переменная типа int или byte, то шаг всегда равен единице.
Например:
for (i=1; i<=20; i++)
{
A=A+1;
}
Для i = 1, 2, 3, ..., 20 будет выполняться оператор
Отметим, что имеется возможность организовать цикл по убывающим
значениям параметра i:
for (i=20; i>=1; i--)
{
A=A+1;
}
Структурная схема оператора For приведена на рис. 3.3.
А:=А+1.
1
Цикл_3
i=in. ik
46
2
ST;
13
Рис. 3.3. Структурная схема оператора for
Цикл_3

Если есть необходимость прекратить выполнение цикла досрочно, то
удобно использовать инструкции break и continue. Для полного прекращения
на каком-то шаге цикла используется оператор break. Для приостановления
текущей итерации используется оператор continue.
3.5. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
1.Вычислить сумму S = 1 + 1/2 + 1/3 +1/4 +…+ 1/50.
а) с использованием оператора цикла While;
б) с использованием оператора цикла For;
в) с использованием оператора цикла Do…While.
Программы и структурные схемы алгоритмов приведены на рис. 3.4, а,
б и в соответственно.
а) б)
{
double s = 0;
int n = 1;
while (n<= 50)
{
s = s + 1/n;
n = n + 1;
}
{
double S = 0;
int N = 1;
for(i = 1; i<= 50; i++)
{
S = S + 1 / N;
N = N + 1;
}
Console.WriteLine(s);
Console.Read();
}
Рис. 3.4. Программы и структурные схемы алгоритмов (начало)
Console.WriteLine(S);
Console.Read();
}
47

начало
начало
1
2
пока N<=50
3
S=S+1/N; N=N+1
2
S=0; N=1
Цикл_3,
Цикл_3
1
S=0
3
2
Цикл_3,
N=1. Пока N<=50
S = S+1/N
2
N=N+1.
Цикл_3
48
4
S
конец
4
а) б)
Рис. 3.4. Продолжение
S
конец

{
double S=0;
начало
int N=1;
do
{
S = S + 1 / N;
N = N + 1;
}
while (N<= 50);
Console.WriteLine(S);
Console.Read();
}
1
3
S=S+1/N; N=N+1
Пока N<=50,
4
S=0; N=1
2
Цикл_3
2
Цикл_3.
конец
S
в) в)
Рис. 3.4. Окончание
2. Пусть A и B – положительные вещественные числа. Найти такое
наибольшее натуральное число m, что m*B<=A.
{
double A; B;
intm;
Console.WriteLine ("Введите числа A и B... ");
Конец
Console.ReadLine (A);
Console.WriteLine("");
Console.ReadLine (B);
49

m=1;
while (m*B<=A)
{
m=m+1;
}
m=m-1;
Console.WriteLine("Результат...{0} *{1}> {2}", m, B, A);
}
3. Определить наименьшее положительное число Eps такое, что
1+Eps>1.
{
const float C1 = 1.0; C2 = 2.0;
double Eps; Eps1;
Eps=C1;
Eps1=C2;
while (Eps1>1.0)
{
Eps=Eps/2; Eps1=Eps+1;
}
Eps=Eps*2;
Console.WriteLine ("Приближенное значение Eps равно:{0}",Eps);
50
}
4. Разложить целое число на простые множители.
{
int x; m;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
