Здавалка
Главная | Обратная связь

Операторы перехода (break, continue, return, goto)



Оператор break обеспечивает прекращение выполнения операторов switch, do, for, while. После выполнения оператора break управление передается первому внешнему оператору.

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

int main()

{ int a,b;

for (a=1,b=0; a<100; b+=a,a++)

{ if (b%2) continue;

... /* обработка четных сумм */

}

return 0;

}

Когда сумма чисел от 1 до а становится нечетной, оператор continue передает управление на очередную итерацию цикла for, не выполняя операторы обработки четных сумм.

Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:

return [выражение] ;

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

Если в какой-либо функции отсутствует оператор return, то передача управления в вызывающую функцию происходит после выполнения последнего оператора вызываемой функции. При этом возвращаемое значение не определено. Если функция не должна иметь возвращаемого значения, то ее нужно объявлять с типом void.

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

int sum (int a, int b)

{ renurn (a+b); }

Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

void prov (int a, double b)

{ double c;

if (a<3) return;

else if (b>10) return;

else { c=a+b;

if ((2*c-b)==11) return;

}

}

В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.

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

Формат этого оператора следующий:

goto имя-метки;

...

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

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

 

Примеры программ

Ниже рассматриваются примеры программ, демонстрирующих выполнение операций и основных операторов языка С/С++.

Пример . Разработать программу перевода числа из десятичной системы счисления в систему с основанием меньшим либо равным 33.

#include <stdio.h>

void fc(int);

void fd(double,int);

char ms[20]; // внешний массив (обнуляется при описании)

void main()

{ int k1=10, k2=11, t, num1, i, ss;

char znak='+'; // для знака результата

double num; // число в десятичной системе счисления

printf("\nВведите исходное число : ");

scanf("%lf",&num);

num<0?znak='-',num*=-1:num; // выделение знака числа

printf("\nВведите основание новой с/с");

scanf("%d",&ss);

printf("\nВведите точность для дробной части числа с/с");

scanf("%d",&t);

num1=num; // выделение целой части числа

num-=num1; // выделение дробной части числа

while(num1>=ss)

{ i=num1%ss; // получаем остаток от деления на основание

num1/=ss; // выделяем целую часть от деления

ms[k1--]=i>9?i-10+'a':i+'0'; // формирование символа цифры числа

} // в новой системе счисления

ms[k1--]=num1>9?num1-10+'a':num1+'0';

ms[k1]=znak;

ms[k2++]='.'; // десятичная точка

while(num!=0 && k2-11<=t)

{ // num*=ss,i=num,num-=i; // получаем произведение и

// выделяем целую часть

num=(num*=ss,i=num,num-=i);

ms[k2++]=i>9?i-10+'a':i+'0';

}

printf("\n");

for (i=k1;i<k2;i++) printf("%c",ms[i]); // вывод числа на экран

}

 

Пример . Разработать программу нахождения простых чисел в заданном интервале.

 

#include <stdio.h>

void main() // нахождение простых чисел в интервале

{ int num1,num2,del,i;

do

{ printf("введите нижнюю и верхнюю границы интервала ");

scanf("%d%d",&num1,&num2);

if (num1>=num2) printf("\n ошибка при вводе границ инт-ла");

} while(num1>=num2);

printf("\nсписок простых чисел :");

for(i=num1; i<num2; i++)

{ for(del=2; del<=i-1; del++)

if (i % del==0) break;

if (del==i) printf(" %d",i);

}

}

В примере цикл for(del=2;del<=i-1;del++) является вложенным в цикл for(i=num1;i<num2;i++). Это означает, что при изменении значения переменной i внешнего цикла на 1 переменная del примет все значения в интервале от 2 до i-1. Затем значение переменной i вновь увеличится на 1, переменная del опять примет значения от 2 до i-1 и так до тех пор, пока выполняется условие продолжения внешнего цикла (i<num).

Пример . Ввести целые числа M и N. Определить, являются ли они взаимно простыми, т.е. не имеют общих делителей

#include <conio.h>

#include <stdio.h>

void main()

{ clrscr();

int i,m,n,min;

printf("Введите m и n: ");

scanf("%d%d",&m,&n); // ввод переменныx m и n

if (m<n) min=m; // поиск минимального числа

else min=n;

for (i=2;i<=min/2;i++) // поиск делителя в интервале [2,min]

if (m%i!=0 && n%i!=0) // проверка остатков от деления

{ printf("Числа %d и %d не взаимнопростые. Делитель: %d",n,m,i);

return;

}

if (!(m%min) && !(n%min)) // m и n делятся на минимальное из них

printf("Числа %d и %d - взаимнопростые ",n,m);

return;

}

Пример . Найти совершенные числа на отрезке [N1;N2]. Совершенное число, если оно равно сумме всех своих делителей, включая 1, но не включая самого себя.

#include <conio.h>

#include <stdio.h>

int main()

{ int num1,num2,del,i;

do

{ clrscr();

puts("Введите интервал для поиска: ");

if (scanf("%d %d",&num1,&num2)!=2)

{ fflush(stdin);

continue; // перемещаемся на проверку условия цикла while

}

if (num1>num2) puts("Ошибка ввода");

} while (num1>=num2);

for (i=num1;i<num2;i++)

{ for (del=2;del<i;del++)

if (i%del==0) break; // если остаток от деления равен 0

// выход из внутреннего цикла

if (del==i) printf("%3d",i); // найдено совершенное число

}

return 0;

}

 

Пример . Разработать программу вычисления N!, в которой использованы все три оператора цикла.

#include<stdio.h>

void main( )

{ unsigned num, i;

char c;

long unsigned res,;

puts(" Вычисление факториала. ");

do{

do{

printf(" Введите число : ");

scanf("%u", &num);

} while(num<0); // num должно быть положительным

res=1;

for( i= 1; i<=num; i++) res*=i;

printf("\n %u! = %lu \n", num, res);

printf(" Повторить ?(y/n) ");

fflush(stdin);

while(((c=getchar()) !=’y’) && (c!=’n’)); //ожидается нажатие

// только клавиш ‘y’ или ‘n’

}while(c==’y’);

}

 

Пример .Ввести интервал значений аргументов образующих интервал [x1,x2] для элементов которого необходимо вычислить значение sin с шагом 0.1, точность вычисления eps и число n. Вычислить значение функции sin(x) заданное рядом:

вычисление функции sin(x) для каждого xÍ[x1,x2] прекратить, если достигнута заданная точность еps, либо взято в разложении ряда n членов.

#include <stdio.h>

#include <math.h>

void main()

{

double x,x1,x2;

double s,sn; // сумма и текущее слагаемое ряда

double eps=0.0001; // точность результата вычисления

int n;

int nn; // число членов в степеннном ряде

printf("введите нач. и кон. значение х ");

scanf("%lf%lf",&x1,&x2);

printf("введите max число членов степ. ряда ");

scanf("%d",&nn);

for (x=x1; x <= x2; x += 0.1)

{ for (s=0., sn = x, n=1; fabs(sn) > eps && n<nn ; n++)

{ s += sn;

sn = - sn * x * x / (2.*n * (2.*n + 1));

}

printf("\nx=%0.1lf\tsin=%0.4lf",x,s); // вычисленное значение sin

printf("\t%0.4lf",sin(x)); // контрольное значение sin

}

}

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.