
Лабы C++ / Лабор3
.docЛабораторная работа №3
Разработка программ с использованием циклов.
Операторы цикла
Операторы цикла задают многократное исполнение операторов тела цикла. Определены три разных оператора цикла:
Итерационный цикл for
Стандартный вид цикла for следующий:
for (инициализация_цикла; выражение-условие; список_выражений)
тело цикла
Оператор for имеет три главные части:
-
инициализация_цикла – это место, где обычно находится оператор присваивания, используемый для установки начального значения переменной цикла.
-
выражение-условие – это выражение, определяющее условие работы цикла.
-
список_выражений – это место где определяется характер изменения переменной цикла на каждой итерации.
Цикл for работает до тех пор, пока условие истинно. Когда условие становится ложным, выполнение программы продолжается с оператора, следующего за циклом for.
Пример
#include <stdio.h>
int main(void)
{
int x;
for(x=1; x<=100; x++) printf(“%d ”,x);
return 0;
}
В цикле for проверка условия выполняется в самом начале. Это означает, что код в цикле может вообще не выполняться, если условие изначально ложно.
Цикл с предусловием while
while (выражение-условие)
тело цикла
Тело цикла – это или пустой, или простой, или составной оператор. Выражением-условием может быть любое выражение, имеющее в качестве истины ненулевое значение. Цикл выполняется, пока условие истинно. Когда условие становится ложным, выполняется строка, следующая за циклом.
Цикл с постусловием do/while
Цикл do/while проверяет условие в конце. То есть, цикл do/while всегда выполняется, хотя бы один раз. Стандартный вид цикла do/while следующий:
do{
последовательность операторов;
}while (выражение-условие);
Хотя в фигурных скобках нет необходимости при наличии одного оператора, они обычно используются для улучшения читабельности и устранения недоразумений (у читателя, а не у компилятора) по поводу цикла.
Во всех циклах тело цикла не может быть описанием или определением. Это либо отдельный оператор, который всегда завершается точкой с запятой, либо составной оператор, либо блок (заключается в фигурные скобки).
Оператор break
Оператор break имеет два назначения. Первое – это окончание работы оператора switch. Второе – это принудительное окончание цикла, минуя стандартную проверку условия.
Когда оператор break встречается в теле цикла, цикл завершается и выполнение программы переходит на строку, следующую за циклом.
Пример
#include <stdio.h>
int main(void)
{
int x;
for(x=1; x<100; x++) {
printf(“%d ”,x);
if(x==10) break;
}
return 0;
}
Данная программа выводит числа от 0 до 10 включительно и заканчивает работу, поскольку break вызывает немедленный выход из цикла, минуя условие x<100.
Оператор continue
Работа оператора continue чем-то похоже на работу оператора break. Но вместо форсированного окончания continue переходит к следующей итерации цикла, пропуская оставшийся код тела цикла. Например, следующая процедура выводит только положительные числа:
do{
scanf(“%d”, &x);
if(x<0) continue;
printf(“%d “, x);
} while(x!=100);
Метки и goto
Хотя goto уже давно не рекомендуют использовать, он по-прежнему используется в программах. goto требует наличия меток для работы. Метка – это корректный идентификатор С, завершаемый двоеточием. Метка должна находится в той же функции, что и goto.
Дальнейшие определения даются для целых чисел.
В случае, когда частное
от деления a на b
– целое, обозначая его буквой q,
имеем a=bq,
т.е. a представляется
произведением b на
целое. Мы говорим тогда, что a
делится на b или b
делит a. При этом
a называем кратным
числа b.
Имеют место две следующие теоремы:
-
Если a кратно m, m кратно b, то a кратно b.
-
Если в равенстве вида k+l+…+n=p+q+…+s относительно всех членов, кроме какого-либо одного, известно, что они кратны b, то и этот один член кратен b.
Разработаем программу, выводящую на консоль все целые неотрицательные решения уравнения x+2y=17.
Можно было бы перебирать все неотрицательные
целые х от 0 до 17 и проверять, является
ли
целым числом или нет. Но, это потребует
повторения цикла 18 раз. Поэтому будем
перебирать все целые неотрицательные
у от 0 до целой части
,
что потребует меньшего числа повторений
цикла, и вычислять х по формуле
.
Если же ни одного решения не будет
найдено выведем на консоль соответствующее
сообщение.
#include <stdio.h>
int main()
{
register int x, y;
bool flag = true;
for(y=0; y<=17/2; y++){
printf("x = %d y = %d\n", 17-(2*y), y);
flag = false;
}
if(flag) printf("No roots\n");
getchar();
return 0;
}
Задание.
Согласно таблице 1 выбрать нужный вариант и разработать программу.
Всюду ниже равенство a = b(mod n) означает, что a равно остатку от деления b на n.
Таблица 1
Номер варианта |
Задание
|
1, 16 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 4x+2y+z=52 |
2, 17 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x2+y2=52 |
3, 18 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x3+2y2=52 |
4, 19 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 6x+3y+z=51 |
5, 20 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 12x+36y+z=144 |
6, 21 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 3x2+36y+z=144 |
7, 22 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 3x2+xy+y2=144 |
8, 23 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения 3x2+xy+y2=225 |
9, 24 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x3+y3=729 |
10, 25 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x2-y2=51 |
11, 26 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x2+3xy+y2=51 |
12, 27 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x2+5xy+y2=51 |
13, 28 |
Разработать программу, которая выводит на консоль все целые неотрицательные решения уравнения x2+3xy+9y2=51 |
14, 29 |
Разработать программу, которая вычисляет наибольший общий делитель двух неотрицательных целых чисел, хотя бы одно из которых не 0. Числа вводить с клавиатуры. |
15, 30 |
Написать программу, реализующую алгоритм Ферма разложения натурального нечётного или кратного 4 числа n на два множителя. Число вводить с клавиатуры. Алгоритм Ферма:
|
Требования к отчету
Отчет должен содержать:
-
конспект теоретической части,
-
лабораторное задание,
-
блок-схему алгоритма,
-
результаты выполнения программ.