Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы C++ / Лабор3

.doc
Скачиваний:
33
Добавлен:
05.06.2015
Размер:
56.32 Кб
Скачать

Лабораторная работа №3

Разработка программ с использованием циклов.

Операторы цикла

Операторы цикла задают многократное исполнение операторов тела цикла. Определены три разных оператора цикла:

Итерационный цикл for

Стандартный вид цикла for следующий:

for (инициализация_цикла; выражение-условие; список_выражений)

тело цикла

Оператор for имеет три главные части:

  1. инициализация_цикла – это место, где обычно находится оператор присваивания, используемый для установки начального значения переменной цикла.

  2. выражение-условие – это выражение, определяющее условие работы цикла.

  3. список_выражений – это место где определяется характер изменения переменной цикла на каждой итерации.

Цикл 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.

Имеют место две следующие теоремы:

        1. Если a кратно m, m кратно b, то a кратно b.

        2. Если в равенстве вида 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 на два множителя. Число вводить с клавиатуры.

Алгоритм Ферма:

  1. вычислить корень квадратный из n,

  2. присвоить числу x значение целой части корня квадратного из n, y присвоить 0,

  3. если х>0,5(n+1), то n – простое и конец алгоритма,

  4. вычислить значение z = x2–y2–n,

  5. если z=0, то вывести делители n: (x+y), (x-y) и конец алгоритма, если z < 0, то увеличить х на 1 и перейти к шагу 3, если если z > 0, то увеличить y на 1 и перейти к шагу 3.

Требования к отчету

Отчет должен содержать:

  1. конспект теоретической части,

  2. лабораторное задание,

  3. блок-схему алгоритма,

  4. результаты выполнения программ.

Соседние файлы в папке Лабы C++