Файл: Лекция №3 Операторы управления С++.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.05.2025

Просмотров: 188

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Начальные_присваивания; Выражение; Приращение

О п е р а т о р

Рисунок 3.9: Блок-схема оператора for for (x=0;x<=PI;x+=0.1)

{

y=exp(sin(x))*cos(x); printf("x=%f \t y=%f \n",x,y);

}

return 0;

}

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

В С++ есть четыре оператора передачи управления, которые принудительно изменяют порядок выполнения команд: goto, break,

continue и return.

Оператор goto метка;

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

перехода, он передает управление оператору с меткой:

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

Оператор break осуществляет немедленный выход из циклов while, do& while и for, а также из оператора выбора switch.

Оператор continue прерывает выполнение данного шага цикла. Оператор return выражение завершает выполнение функции и

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

3.4. Решение задач с использованием циклов

ЗАДАЧА 3.7. Найти наибольший общий делитель (НОД) натуральных чисел А и В.

Входные данные: А и В. Выходные данные: А НОД .

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

Таблица 3.2. Поиск НОД для чисел А=25 и В=15.

Исходные

Первый шаг

Второй шаг

Третий шаг

данные

А=25

А=10

А=10

А=5

В=15

В=15

В=5

В=5


НАЧАЛО А, В

А<>B

-

+

А

A>B

- КОНЕЦ

+

A=A-B B=B-A

Рисунок 3.10: Поиск наибольшего общего делителя двух чисел

#include <iostream> using namespace std; int main()

{

unsigned int a,b; cout<<"A="; cin>>a; cout<<"B="; cin>>b;

//Если числа не равны, выполнять тело цикла while (a!=b)

//Если число А больше, чем В, то уменьшить его значение на В, if (a>b) a=a-b;

//иначе уменьшить значение числа В на А else b=b-a;

cout<<"NOD="<<a<<"\n"; return 0;

}

Результат работы программы не изменится, если для ее решения воспользоваться циклом с постусловием do& while:

#include <iostream> using namespace std; int main()

{ unsigned int a,b; cout<<"A="; cin>>a; cout<<"B="; cin>>b; do

if (a>b) a-=b; else b-=a; while (a!=b); cout<<"NOD="<<a<<"\n"; return 0;}

ЗАДАЧА 3.8. Вычислить факториал числа N (N!=1×2×3 & ×N).

Входные данные: N целое число, факториал которого необходимо вычислить.

Выходные данные: factorial значение факториала числа N,произведение чисел от 1до N,

целое число.

Промежуточные переменные: i параметр цикла , целочисленная переменная , последовательно принимающая значения 2, 3, 4 и т.д. до N.

Начало N

factorial=1

i=2; i≤N; i++

factorial=factorial*i

factorial

КОНЕЦ

Рисунок 3.11: Вычисление факториала

#include "stdafx.h" #include <iostream.h> using namespace std; int main()

{

unsigned int factorial, N, i;

for (cout<<"N=",cin>>N,factorial=1,i=2;i<=N;factorial*=i,i++); cout<<"factorial="<<factorial<<"\n";

return 0;

}

ЗАДАЧА 3.9. Вычислить сумму натуральных четных чисел, не

превышающих N.

Входные данные: N целое число.

Выходные данные: S сумма четных чисел .

Промежуточные переменные: i параметр цикла ,принимает значения 2, 4, 6, 8 и т.д., также имеет целочисленное значение.


НАЧАЛО N

S=0

i=2

i<=N

-

+

S

S=S+i

КОНЕЦ

i=i+2

Рисунок 3.12: Вычисление суммы четных, натуральных чисел

Решение задачи с помощью цикла while

#include <iostream> using namespace std; int main()

{

unsigned int N,i,S; cout<<"N="; cin>>N; S=0;

i=2;

while (i<=N)

{

S+=i;

i+=2;

}

cout<<"S="<<S<<"\n"; return 0;

}

Решение задачи с помощью цикла for

#include <iostream.h> using namespace std; int main()

{

unsigned int N,i,S;

for (cout<<"N=",cin>>N,S=0,i=2; i<=N;S+=i,i+=2); cout<<"S="<<S<<"\n";

return 0;

}

ЗАДАЧА 3.10. Дано натуральное число N. Определить К количество делителей этого

числа, не превышающих его (Например, для N=12 делители 1, 2, 3, 4, 6. Количество K=5).

Входные данные: N целое число.

Выходные данные: целое число K количество делителей N.

Промежуточные переменные: i параметр цикла ,возможные делители числа N.

НАЧАЛО

N

K=0

i=1; i≤N/2; i++

Остаток от

K

деления N на i

равен нулю?

КОНЕЦ

+

K=K+1

-

Рисунок 3.13: Определение делителей натурального

числа

#include "stdafx.h" #include <iostream.h> using namespace std; int main()

{

unsigned int N,i,K; cout<<"N="; cin>>N;

for (K=0,i=1;i<=N/2;i++) if (N%i==0) K=K+1;

cout<<"K="<<K<<"\n"; return 0;

}

ЗАДАЧА 3.11. Дано натуральное число N. Определить, является ли оно простым. Натуральное число N называется простым, если оно делится без остатка только на единицу и на само себя. Число 13 простое ,так как делится только на 1и 13,а число 12таковым не

является, так как делится на 1, 2, 3, 4, 6 и 12.

Входные данные: N целое число. Выходные данные: сообщение.

Промежуточные переменные: i параметр цикла ,возможные делители числа N.


НАЧАЛО

N

Pr=истина

i=2; i≤n/2; i++

- Остаток от

деления N на i равен 0?

+

Pr=ложь

Pr

-

+

N - простым не

является

N - простое

КОНЕЦ

Рисунок 3.14: Определение простого числа

#include <iostream.h> using namespace std; int main()

{

unsigned int N,i; bool Pr; cout<<"N="; cin>>N; Pr=true;

//Предположим, что число простое for (i=2;i<=N/2;i++)

if (N%i==0) {Pr=false;

break;} if (Pr)

cout<<"N - prostoe \n"; else

cout<<"N - ne prostoe \n"; return 0;

}

ЗАДАЧА 3.12. Поступает последовательность из N вещественных чисел. Определить

наибольший элемент последовательности.

Входные данные: N целое число; Х вещественное число ,определяет текущий элемент

последовательности.

Выходные данные: Max вещественное число , элемент последовательности с

наибольшим значением.

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

НАЧАЛО

N

X

Max=X

i=2; i≤N, i++

X

-

X>Max

+

Max

Max=X

КОНЕЦ

Рисунок 3.15: Поиск наибольшего числа в последовательности

#include <iostream> using namespace std; int main()

{

unsigned int i,N; float X,Max; cout<<"N="; cin>>N; cout<<"X="; cin>>X;

for (i=2,Max=X;i<=N;i++)

{