ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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++)
{