Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л3.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
129.54 Кб
Скачать

6.1.7. Оператор безусловного перехода ( goto)

Использование оператора безусловного перехода goto в практике программирования на языке С++ настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

Форма записи:

goto ИмяМетки;

...

ИмяМетки: оператор;

Оператор goto передает управление на оператор, помеченный меткой ИмяМетки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно ИмяМетки не может быть использовано для разных операторов программы. Имя-метки - это идентификатор. Метка представляет собой любое целое число без знака в диапазоне от 1 - 9999 или любое имя, состоящее из допустимых в нем символов. Если метка обозначается цифрой, то предшествующие нули не являются значащими, т.е. 1 и 001 эквивалентны.

Пример:

#include <stdio>

void main()

{ for(int i=1;i<5;i++)

{if (i==3) goto a1;

printf("%d",i);

}

a1:

}

Любой оператор в составном операторе может иметь свою метку.

Используя оператор goto, можно передавать управление внутрь составного оператора. Но нужно быть осторожным при входе в составной оператор, содержащий объявления переменных с инициализацией, так как объявления располагаются перед выполняемыми операторами и значения объявленных переменных при таком переходе будут не определены.

6.2. Сложные операторы

6.2.1. Оператор условия ( if)

Форма записи:

if (выражение) Оператор-1; [else Оператор-2;]

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.

- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.

После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

Пример: Найти наибольшее из трех чисел X, Y, Z.

#include <stdio.h> void main()                                     /* главная функция*/ { int x, y, z, max ;                    /* описание переменных*/ printf(" Введите три числа :\n ");  scanf(" %d %d %d ", &x, &y, &z);  /*ввод трех чисел*/ if( x > y)                                 /*операции сравнивания*/       max=x; else   max=y; if ( z>max)  max=z; printf(" Максимальное из (%d, %d, %d)= %d \n",x, y, z, max); }

На месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.

Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if.

Пример: Решить уравнение вида AX=B.

#include <stdio.h> void main() {  

   float A,B,X;    printf("ВВЕДИ А, В\n");    scanf("%f %f",&A, &B);    if(A!=0)        printf("РЕШЕНИЕ:%f\n", B/A);    else    if(B==0)      printf("X-ЛЮБОЕ ЧИСЛО\n");    else      printf("РЕШЕНИЙ НЕТ\n"); }

Пример: Упорядочить числа А,В,С по возрастанию таким образом, чтобы переменной А соответствовало самое маленькое число, В - среднее, С - наибольшее.

#include <stdio.h>

void main()

{

float a,b,c,h;

printf("Введите a,b,c:\n");

scanf("%f %f %f",&a,&b,&c);

if (a>b) { h=a;

a=b;

b=h;

}

if (a>c) { h=a;

a=c;

c=h;

}

if (b>c) { h=b;

b=c;

c=h;

}

printf("a= %.3f b= %.3f c= %.3f\n",a,b,c);

}

Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.

  Пример:

int main ( )

{

int t=2, b=7, r=3;

if (t>b)

{

if (b < r) r=b;

}

else r=t;

return (0);

}

В результате выполнения этой программы r станет равным 2.

Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:

int main ( )

{

int t=2,b=7,r=3;

if ( a>b )

if ( b < c ) t=b;

else r=t;

return (0);

}

В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.

Следующая программа иллюстрирует вложенные операторы if:

#include <stdio.h>

void main()

{

char ZNAC;

float x,y,z;

printf("Введите знак операции(+ - * /)\n");

scanf("%c",&ZNAC);

printf("Введите y,z\n");

scanf("%f %f",&y,&z);

if (ZNAC == '-') x = y - z;

else if (ZNAC == '+') x = y + z;

else if (ZNAC == '*') x = y * z;

else if (ZNAC == '/') x = y / z;

printf("y%cz=%.3f",ZNAC,x);

}

Из рассмотрения этого примера можно сделать вывод, что конструкции, использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.

Самостоятельная проработка:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]