
- •Г.В. Ваныкина, т.О. Сундукова
- •Часть 1. Введение в программирование Тула - 2009
- •Содержание
- •Предисловие
- •Лабораторная работа №1
- •Лабораторная работа №2 Типы данных. Стандартные потоки ввода-вывода данных
- •Лабораторная работа №3 Константы. Стандартные потоки ввода-вывода вещественных данных
- •Лабораторная работа №4 Форматированный ввод-вывод данных
- •Лабораторная работа №5 Присваивание. Арифметические операции
- •Лабораторная работа №6 Логические и поразрядные операции. Операции сравнения и определения размера
- •Лабораторная работа №7 Математические функции. Выражения
- •Математические функции – файл math.H
- •Лабораторная работа №8 Линейные программы. Преобразование типов
- •Лабораторная работа №9 Операторы выбора: оператор условия if
- •Лабораторная работа №10 Решение задач с использование оператора условия if
- •Лабораторная работа №11 Операторы перехода. Операторы выбора: оператор-переключатель switch
- •Лабораторная работа №12 Решение задач с использованием оператора-переключателя switch
- •Лабораторная работа №13 Операторы цикла: оператор цикла с параметром for
- •Лабораторная работа №14 Операторы цикла: оператор цикла с предусловие while
- •Лабораторная работа №15 Операторы цикла: оператор цикла с постусловием do … while
- •Лабораторная работа №16 Решение задач с использованием операторов цикла
- •Лабораторная работа №17 Функции пользователя
- •Лабораторная работа №18 Решение задач методом процедурной абстракции
- •Лабораторная работа №19 Рекурсивные функции
- •Индивидуальные задания Требования к оформлению индивидуальных заданий
- •Задание 1. Линейные программы
- •Задание 2. Задачи на составление логических выражений
- •Задание 3. Условный оператор
- •Задание 4. Цикл с параметром
- •Задание 5. Циклы с условиями
- •Задание 6. Числовые функции
- •Задание 7. Функции
- •Задание 8. Рекурсия
- •Литература
- •Часть 1. Введение в программирования
Лабораторная работа №16 Решение задач с использованием операторов цикла
Цель работы: научиться решить задачи, используя, операторы цикла for, while и do…while в языке C++.
Теоретические сведения
Циклом называется непрерывная группа последовательных операторов, заканчивающаяся командой перехода (передачи управления) на начало этой части. То есть, основным свойством цикла является многократное выполнение некоторой группы операторов. При этом компьютер должен выполнить одни и те же действия над разными данными.
Оператор цикла for вида
for (выражение_1; выражение-условие; выражение_3)
операторы;
может быть заменен оператором while следующим образом:
выражение_1;
while (выражение-условие)
{
выражение_3;
операторы;
}
Так же, как и при выполнении оператора for, в операторе while вначале происходит проверка условия.
Приведем примеры решения одной и той же задачи с применением:
оператора цикла с параметром (оператор for);
оператора цикла с предусловием (оператор while);
оператора цикла с постусловием (оператор do...while).
Задача. Вводятся вещественные числа и вычисляются сумма положительных и сумма отрицательных чисел. Окончание работы – ввод нулевого числа.
Пример 1. Для решения задачи применяется цикл с параметром.
#include <stdio.h>
void main () {
float x, sumPlus=0, sumMinus=0;
for(x=1; x != 0;) {
printf("x="); scanf("%f",&x);
if (x < 0)
sumMinus+=x;
else
sumPlus+=x;
}
printf("sumPlus=%.3f\n",sumPlus);
printf("sumMinus=%.3f\n",sumMinus);
}
Пример 2. Для решения задачи применяется цикл с предусловием.
#include <stdio.h>
void main () {
float x, sumPlus=0, sumMinus=0;
x=1;
while (x != 0){
printf("x="); scanf("%f",&x);
if (x < 0)
sumMinus+=x;
else
sumPlus+=x;
}
printf("sumPlus=%.3f\n",sumPlus);
printf("sumMinus=%.3f\n",sumMinus);
}
Пример 3. Для решения задачи применяется цикл с постусловием.
#include <stdio.h>
void main () {
float x, sumPlus=0, sumMinus=0;
do {
printf("x="); scanf("%f",&x);
if (x < 0)
sumMinus+=x;
else
sumPlus+=x;
}
while(x != 0);
printf("sumPlus=%.3f\n",sumPlus);
printf("sumMinus=%.3f\n",sumMinus);
}
Вложенные циклы
Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Вложенный цикл по отношению к циклу, в тело которого он вложен, будет именоваться внутренним циклом. Цикл, в теле которого существует вложенный цикл, будет именоваться внешним циклом по отношению к вложенному. Внутрь вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности, как правило, не ограничивается.
Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Например, взяв три вложенных друг в друга цикла, каждый по 10 итераций, получим 10 исполнений тела для внешнего цикла, 100 для цикла второго уровня и 1000 в самом внутреннем цикле.
Одна из проблем, связанных с вложенными циклами, – организация досрочного выхода из них. В языке С++ для этого есть оператор досрочного завершения цикла break, но он, как правило, обеспечивает выход только из цикла того уровня, откуда вызван. Вызов его из вложенного цикла приведёт к завершению только этого внутреннего цикла, внешний же цикл продолжит выполняться. Проблема может показаться надуманной, но она действительно иногда возникает при программировании сложной обработки данных, когда алгоритм требует немедленного прерывания в определённых условиях, наличие которых можно проверить только в глубоко вложенном цикле.
Пример 4. Напечатать n простых чисел.
#include<stdio.h>
void main() {
int a=1,n,d,i;
printf("\nВведите n=");
scanf("%d", &n);
for(i=0;i<n;)//внешний цикл
{
a++;d=1;
do //внутренний цикл
{
d++;
}
while(a%d!=0);// конец внутреннего цикла
if(a==d){
printf("a=%d\n", a);
i++;}
}// конец внешнего цикла
}
Задания
Составьте программу для решения задачи. Найти наибольший общий делитель двух заданных натуральных чисел, используя алгоритм Евклида.
Составьте программу для решения задачи. Напечатайте числа в виде таблицы для данного натурального n. В приведенном примере n=6.
6 5 4 3 2
5 4 3 2
4 3 2
3 2
2
Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и, естественно, исключая самое число. Например, совершенным является число 6 (6= 1+2+3). Найти все совершенные числа, меньшие 10 000.
Домашние задания
Наберите коды программ из Примеров 1, 2, 3 и 4. Сохраните коды программ. Выполните компиляцию и запуск программ. Введите свои данные в качестве входных.
Составьте программу для решения задачи. Найти наименьшее общее кратное двух заданных натуральных чисел.
Составьте программу для решения задачи. Напечатайте полную таблицу умножения в виде:
Таблица умножения.
1*1=1 1*2=2 . . . 1*9=9
2*1=2 2*2=4 . . . 2*9=18
. . . . . . . . . . . . . . . . . .
9*1=9 9*2=18 . . . 9*9=81
Составьте программу для решения задачи. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается). Например, 220 (1+2+4+5+10+11+20+22+44+55+110=284) и 284 (1+2+4+71+142=220) – дружественные числа. Пары необходимо выводить по одной в строке, разделяя пробелами. Найти все пары натуральных дружественных чисел, меньших 10 000.
Индивидуальное задание №1. Номер варианта определяется по журналу. Составьте программу для решения задачи. Вычислите сумму для заданного натурального n и вещественного x.
Индивидуальное задание №2. Номер варианта определяется по журналу. Составьте программу для решения задачи. Дана последовательность целых чисел, за которой следует 0.
Варианты индивидуального задания №1
№ |
Задание |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Варианты индивидуального задания №2
№ |
Задание |
|
Найти сумму четных элементов этой последовательности. |
|
Найти сумму элементов с четными номерами из этой последовательности. |
|
Найти количество элементов, расположенных после первого минимального. |
|
Найти сумму элементов с нечетными номерами из этой последовательности. |
|
Найти количество элементов, расположенных после последнего максимального. |
|
Найти разность минимального и максимального элементов в этой последовательности. |
|
Найти количество элементов, расположенных после последнего минимального. |
|
Найти количество четных элементов этой последовательности. |
|
Найти количество элементов этой последовательности, кратных ее первому элементу. |
|
Найти количество элементов этой последовательности, кратных числу K1 и не кратных числу K2. |
|
Определить, каких чисел в этой последовательности больше: положительных или отрицательных. |
|
Определить, каких чисел в этой последовательности меньше: четных или нечетных. |
|
Найти номер первого минимального элемента этой последовательности. |
|
Найти номер первого максимального элемента этой последовательности. |
|
Найти номер последнего минимального элемента этой последовательности. |
|
Найти номер последнего максимального элемента этой последовательности. |
|
Найти минимальный положительный элемент этой последовательности. |
|
Найти минимальный отрицательный элемент этой последовательности. |
|
Найти максимальный отрицательный элемент этой последовательности. |
|
Найти максимальный положительный элемент этой последовательности. |
|
Найти количество элементов, расположенных перед первым минимальным. |
|
Найти количество элементов, расположенных перед первым максимальным. |
|
Найти сумму минимального и максимального элементов в этой последовательности. |
|
Найти количество нечетных элементов этой последовательности. |
|
Найти количество элементов, расположенных перед последним максимальным. |
|
Найти сумму нечетных элементов этой последовательности. |
|
Найти количество элементов, являющихся совершенными числами. |
|
Найти количество элементов, являющихся простыми числами. |