Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 1-12 (от Кати).doc
Скачиваний:
4
Добавлен:
24.04.2019
Размер:
298.5 Кб
Скачать

5.2. Оператор while:

Цикл while является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остаётся истинным выражение while. В языке C# у этого вида цикла две модификации – с проверкой условия в начале (цикл с предусловием) и в конце цикла (цикл с постусловием). Первая модификация имеет следующий синтаксис:

while (выражение) оператор

Эта модификация соответствует стратегии: "сначала проверь, а потом делай". В результате проверки может оказаться, что и делать ничего не нужно. Тело такого цикла может ни разу не выполняться. Конечно же, возможно и зацикливание. В нормальной ситуации каждое выполнение тела цикла – это очередной шаг к завершению цикла. С помощью этого вида цикла факториал вычисляется так:

i = 1; r = 1; while (i <= n) { r = r * i; i++; }

Цикл, проверяющий условие завершения в конце, соответствует стратегии: "сначала делай, а потом проверь". Вот синтаксис этой модификации:

do оператор while(выражение);

Тело такого цикла выполняется, по меньшей мере, один раз. Пример записи цикла:

i = 1; r = 1; do { r = r * i; i++; }while (i <= n)

5.3. Оператор foreach:

Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами. Рассмотрим его подробно в другой моей статье при изучении массивов Массивы в c#.

10) Операторы передачи управления.

Оператор GOTO Конструкция оператора имеет вид:

goto <имя метки>;

***

<имя метки>: оператор;

  Оператор goto передает управление непосредственно на оператор, обозначенный меткой <имя метки>. Обозначеный оператор выполняется сразу же после выполнения оператора goto, если оператор с данной меткой отсутствует или есть больше одного оператора обозначенного одной и той же меткой, то выдается сообщение про ошибку.   Пример: 

if ( errorcode > 0 )

goto exit;

***

exit: return(errorcode);

  В примере оператор goto передает управление на оператор, обозначенный меткой exit, когда происходит ошибка. Метка - это простой идентификатор. Ее имя не должно совпадать с любыми служебными или зарезервированными словами С. Названия меток для одной ф-и должны быть разными. 

Оператор CONTINUE   Данный оператор передает управление на следующую итерацию в операторах цикла doforwhile. Операторы, которые остались в теле вышеуказаных циклов при этом не выполняются. В середине циклу do, while такая итерация означает переход к перерасчету условных выражений и цикла. Для оператора forтакая итерация приводит к приросту переменных цикла і перерасчету условного выражения цикла. 

Пример:

while (i > 0 )

{

x = f(i);

if (x == 1) continue;

y = x*x;

}

   Тело оператора выполняется, если і > 0. сначала значение f(i) присваивается переменной х, потом, если х = 1 выполняется оператор сontinue, при этом остальные операторы тела цикла игнорируются и выполнение цикла повторяется с его заголовка.

Пример:

Теперь предлагается для рассмотрения исходник квадратного уравнения, написанный с использованием вышеуказаных операторов, с соответствующими месту комментариями. //кв.уравнение

#include <stdio.h> //библиотека ввода/вывода

#include <math.h> //библиотека матем. функций

#include <conio.h> //библиотека для работы с экраном - для getch() и clrscr()

#include <iostream.h> //библиотека потокового ввода/вывода - для cout и cin

float a,b,c,d,x1,x2; //переменные

void main () //главная ф-я

{

clrscr(); //очистим экран

cout << "nVvedit A->"; //организуем ввод коэфициэнтов уравнения с помощью

cin >> a; //ф-й потокового ввода-вывода (cout и cin с библиотеки iostream.h)

cout << "nVvedit B->";

cin >> b;

cout << "nVvedit C->";

cin >> c;

d = pow(b,2)-(4*a*c); //найдем дискриминант

if (d < 0) goto d1; //проверяем условия, и, с помощью

if (d==0) goto d2; //меток переходим к соответствующему блоку

if (d>0) goto d3;

d1: { //блок 1: дискриминант < 0

printf("nKoreniv nema");

goto exit; //безусловный переход на exit

}

d2: { //блок 2: дискриминант=0

x1=-b/(2*a)

printf("nx = %f",x1);

goto exit; //безусловный переход на exit

}

d3: { //блок 3: дискриминант>0

x1=(-b-sqrt(d))/(2*a);

x2=(-b+sqrt(d))/(2*a);

printf("nx1 = %f",x1);

printf("nx2 = %f",x2);

goto exit; //безусловный перехід на exit

}

exit: //метка использована для перехода к

//концу программы

getch(); //программа ждет нажатия любой клавиши для перехода далее

} //конец програми

  Заметка:

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