|
|
|||||||||||||||||||||||||||||
|
Использование операторов передачи управления GOTOИсточник: realcoding Макагон Сергей
1. Немного теории: Оператор GOTO goto <имя метки>; *** <имя метки>: оператор; Оператор goto передает управление непосредственно на оператор, обозначенный меткой <имя метки>. Обозначеный оператор выполняется сразу же после выполнения оператора goto, если оператор с данной меткой отсутствует или есть больше одного оператора обозначенного одной и той же меткой, то выдается сообщение про ошибку. if ( errorcode > 0 ) goto exit; *** exit: return(errorcode); В примере оператор goto передает управление на оператор, обозначенный меткой exit, когда происходит ошибка. Оператор CONTINUE while (i > 0 ) { x = f(i); if (x == 1) continue; y = x*x; } Тело оператора выполняется, если і > 0. сначала значение f(i) присваивается переменной х, потом, если х = 1 выполняется оператор сontinue, при этом остальные операторы тела цикла игнорируются и выполнение цикла повторяется с его заголовка. 2. Теперь предлагается для рассмотрения исходник квадратного уравнения, написанный с использованием вышеуказаных операторов, с соответствующими месту комментариями. //кв.уравнение #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(); //программа ждет нажатия любой клавиши для перехода далее } //конец програми Заметка: Не стоит злоупотреблять операторами передачи управления - я думаю (хотя, не только я), что это рушит логическую структуру программы, однако, если они действительно необходимы, ими можно пользоваться. Ссылки по теме
|
|