Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ - С-С++методичка и титул.doc
Скачиваний:
12
Добавлен:
08.11.2019
Размер:
789.5 Кб
Скачать

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

Оператор if помимо вычислений осуществляет заданную условием передачу управления. Однако, во многих случаях при выполнении сложных операторов (условных, выбора вариантов, цикла), требуется выполнить безусловную передачу управления из одного места программы в другое, для чего используются операторы goto, break, continue, return.

Оператор безусловного перехода имеет вид:

goto метка, где

goto (идти на) – ключевое слово (неразделенное);

метка – идентификатор помеченного оператора, на который передается управление.

Помеченный оператор имеет вид

метка : оператор.

Между меткой и помеченным оператором ставится разделитель двоеточие (:).

Оператор goto позволяет передавать управление из любого места программы на любой оператор.

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

goto fin;

.…….

fin : ; // помеченный пустой оператор

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

Операторы continue и return используются в операторах цикла и в функциях, где и будут рассмотрены.

Оператор выбора (switch)

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

switch (выражение)

{ case метка : операторы;

……..

default : операторы;

}, где

switch (переключатель), case (вариант), default (отсутствие варианта) – ключевые слова;

выражение – переключатель для получения значения целого или символьного типа;

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

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

Действие оператора выбора состоит в следующем:

  • По значению выражения определяется совпадающая с ним метка варианта (ветви) действий алгоритма.

  • После выполнения операторов варианта с данной меткой выполняются операторы следующих вариантов, если только не встретится оператор передачи управления goto или break. Оператор goto может передать управление любому оператору программы, а оператор break (прервать) передает управление оператору, следующему за оператором switch.

  • Если нужная метка не найдена и есть необязательное ключевое слово default, то выполняются операторы идущие за ним, в противном случае управление передается оператору, следующему за оператором switch.

Пример 15:

Программа выбора вариантов вычислений.

#include <stdio.h> // функции стандартного ввода-вывода

#include <conio.h> // функции консольного ввода-вывода

#include <math.h> // математические функции

void main ( ) // главная функция

{ int i ; float F, x; // описание переменных

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

printf (“Введите i, x:”);

scanf (“%d%f”, &i, &x); // ввод исходных данных

switch (i -2) // переключатель выбора вариантов

{ case 2: F = sin(x); break; // метка и вариант вычислений

case 10: case 12: F = x * x ; break;

default : printf (“Вариант отсутствует”);

goto fin; // переход на конец программы

}

printf (“F = %f”, F); // вывод результата

fin : ; // пустой оператор – конец программы

}

Пример 16.

Ввести два числа, знак операции (+, -, *, /) и вычислить выражение. Рассмотрим решение этой задачи с использованием операторов if и switch.

1. Программа использования вложенных операторов if.

#include <conio.h>

#include <stdio.h>

void main ( )

{ float x, y, rez; // переменные для чисел и результатов

char sign; // переменная для знака операции

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

printf ( “\n Введите 2 числа x, y :”);

scanf (“%f%f” , &x, &y); // ввод чисел

fflush (stdin); // очистка буфера ввода

printf (“Введите знак операции (+, –, *, / или иной):”) ;

scanf (“%c”, &sign); // ввод символа операции

// sign = getchar (); другой вариант ввода символа

if (sign ==”+”) rez = x+y; // проверка знака и результат операции

else if ( sign == ”–”) rez = x–y;

else if (sign == ” *” ) rez = x * y;

else if (sign == ” / ”)

{ if (y==0) // проверка делителя

{ printf (“Деление на 0!”);

goto fin; //выход на конец программы

}

else rez = x / y;

}

else

{ printf (“Неизвестная операция!”);

goto fin ; //выход на конец программы

}

printf(“x %c y=%5.1f”, sign, rez); //вывод результата операции

fin : ; //помеченный пустой оператор

}

Pезультат программы:

Введите 2 числа x, y: 5 7

Введите знак операции (+, –, *, / или иной): *

x * y = 35.0

2. Более рационально решать эту задачу с использованием оператора выбора вариантов. Программа использования оператора выбора switch для определения знака операции:

#include<conio.h>

#include<stdio.h>

void main ()

{ float x, y, rez; // переменные для чисел и результата

char sign; // переменная для знака операции

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

printf (“\nВведите 2 числа x, y: “);

scanf (“%f%f”, &x, &y); // ввод чисел

fflush (stdin); // очистка буфера ввода

printf (“Введите знак операции (+, –, *, / или иной): “);

scanf (“%c”, &sign); // ввод символа операции

switch (sign) // переключатель для знака операции

{ case ‘+’ : rez=x + y; break; // выбор варианта и выход из него

case ‘– ’ : rez=x – y; break;

case ‘ * ’ : rez=x * y; break;

case ‘ / ’ : if (y==0) // проверка деления

{ printf(“Деление на 0! ”);

goto fin; // выход на конец программы

}

else

{ rez= x / y; break; }

deafult : printf(“Неизвестная операция”);

goto fin; //выход на конец программы

printf(“x %c y=%5.1f”,sign,rez); //вывод результата операции

fin : ; //помеченный пустой оператор

}

Результат программы: