ЛАБОРАТОРНАЯ РАБОТА № 3. Реализация циклических алгоритмов




ЛАБОРАТОРНАЯ РАБОТА № 3

Реализация циклических алгоритмов

Цель работы: изучить циклические операторы while, do - while, for, научиться реализовывать циклические алгоритмы. Составить и отладить программу.

 

Теоретические сведения

Под циклом понимается многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений может быть задано в явной или неявной формах. Для организации повторений в языке C++ используются три различных оператора цикла.

1. Оператор цикла с предусловием

while ( выражение )

код цикла

организует повторение операторов кода цикла до тех пор, пока выражение истинно (не равно 0), если выражение = 0 (ложно) при первом входе, то код цикла не выполнится ни разу. Если код цикла состоит более чем из одного оператора, то организуется блок.

2. Оператор цикла с постусловием

do

код цикла

while ( выражение );

организует повторение кода цикла до тех пор, пока выполнится выражение истинно, после чего управление передается следующему за циклом оператору. Данный оператор гарантирует выполнение кода цикла хотя бы один раз.

3. Оператор с предусловием и коррекцией

for ( выражение 1; выражение 2; выражение 3)

код цикла

где выражение 1 – начальное значение параметра цикла; выражение 2 – проверка условия на продолжение цикла; выражение 3 – изменение (коррекция) параметра цикла.

Вначале вычисляется выражение 1, затем проверяется выражение 2, если оно – истинно, то выполня­ет­ся код цикла, затем производится коррекция в выражении 3, и так до тех пор, пока выражение 2 не примет значение «ложь ».

Досрочный выход из операторов цикла выполняет оператор break, а оператор continue выполняет передачу управления в головной оператор цикла.

 

Оператор do …while

 

Задание 3.1. Написать программу, вычисляющую требуемую сумму или произведение.

Таблица – Варианты заданий

Вариант Задание
  Найти сумму квадратов первых n чётных натуральных чисел (n вводится с клавиатуры).
  Найти сумму всех двузначных чисел, кратных 3.
  Найти произведение первых n чётных натуральных чисел (n вводится с клавиатуры).
  Найти сумму всех отрицательных нечётных двузначных числе.
  Найти произведение первых n нечётных натуральных чисел (n вводится с клавиатуры).
  Найти сумму всех отрицательных четных двузначных чисел.
  Найти произведение первых n двузначных натуральных чисел, кратных 3 (n вводится с клавиатуры).
  Найти сумму двузначных нечётных чисел.
  Найти произведение первых n двузначных натуральных чисел, которые делятся на 5 (n вводится с клавиатуры).
  Найти сумму всех двузначных натуральных чисел, кратных 5.
  Найти сумму квадратов первых n натуральных чисел (n вводится с клавиатуры).
  Найти сумму всех двузначных чётных чисел.

Пример программы

Найти сумму первых n двузначных чисел, кратных 11 (n вводится с клавиатуры).

Блок-схема

Код программы:

 

#include <iostream.h>

#include <conio.h>

void main()

{

int n, s = 0, i=0,a=10;

cout << "Input n" << endl;

cin >> n;

do

{ if (!(a%11)) { s+=a; i++;};

a++; }

while ((i<n)&&(a<=99));

cout << "\n n= " << n<< " sum= " << s;

cout << "\nPress any key... " << endl;

getch();

}

Оператор while

 

Задание 3.2. Написать программу, вычисляющую значения функции с точностью до 3-х знаков после запятой на заданном отрезке с заданным шагом и выводящую результаты вычислений в виде таблицы, состоящей из двух столбцов – столбца, содержащего значения аргумента и столбца, содержащего значения функции. Значения концов отрезка и шага должны вводиться с клавиатуры.

 

Таблица – Варианты заданий

Вариант Функция Отрезок Шаг
  [0o;360o] 20o
  [0o;180o] 15o
  [-6;5]  
  [1;5] 0,5
  [-90o;90o] 20o
  [0;10]  
  [0.05;1] 0,25
  [1;20]  
  [0;p]
  [0; ]
  [90o;270o] 30o
  [-p;p]

Пример программы

Написать программу, вычисляющую значения функции с точностью до 2-х знаков после запятой на отрезке [-10;4] с шагом 2 и выводящую результаты вычислений в виде таблицы, состоящей из двух столбцов – столбца, содержащего значения аргумента и столбца, содержащего значения функции. Значения концов отрезка и шага должны вводиться с клавиатуры.

Блок-схема

Код программы

#include <iostream.h>

#include <conio.h>

#include <windows.h> //библиотека используется в функции RUS

#include <math.h>

char bufRus[256]; //глобальная переменная bufRus используется в функции RUS

//---------------------------------------------------------------------------

char* RUS(const char*text) //функция поддержки русского языка

{

CharToOem(text,bufRus);

return bufRus;

}

//------------------------------------------------------------------------

void main()

{ double x,y,h,a,b;

cout << RUS("Введите значение концов отрезка\n");

cin >> a >> b;

cout << RUS("Введите шаг\n");

cin >> h;

cout << ("----------------\n");

cout << RUS(" X | Y \n");

cout << ("----------------\n");

x=a;

while (x<=b)

{

y=x/2+1;

cout <<"\n "<< x <<" | " << y << endl;

x=x+h;

}

cout << ("----------------\n");

cout << "\nPress any key... " << endl;

getch();

}

Оператор for

Задание 3.3 Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y (x), суммы S (x) и | Y (x)– S (x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Так как значение S (x) является рядом разложения функции Y (x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания.

 

Вариант Функция S(x) Функция Y(х)
  .
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Пример выполнения задания

Написать и отладить программу вывода всех значений функции S (x) для аргумента х, изменяющегося в интервале от а до b c шагом h и заданном n.

.

Текст программы предложенного задания может иметь следующий вид (в комментариях указаны действия по вводу-выводу в потоках, набираемые вместо записанных):

#include <stdio.h> // #include <iostream.h>

#include <conio.h>

void main()

{

double a, b, x, h, r, s;

int n, zn = -1, k;

puts("Input a,b,h,n"); // cout << "Input a,b,h,n" << endl;

scanf("%lf%lf%lf%d", &a, &b, &h, &n); // cin >> a >> b >> h >> n;

for(x = a; x<=b; x+=h) {

r = s = 1;

for(k = 1; k<=n; k++) {

r=zn*r*x/k;

s+=r;

}

printf("\n x= %8.2lf sum= %8.5lf", x,s);

// cout << "\n x= " << x << " sum= " << s;

}

puts("\nPress any key... "); // cout << "\nPress any key... " << endl;

getch();

}

Результат программы с введенными в одной строке значениями a =0.1, b =1.0, h =0.1 и n =10, будет иметь следующий вид:

Контрольные вопросы

 

1. Что сгенерирует на выходе приведённый ниже код в программе, содержащей объявление переменной x типа int?

 

x=10;

while (x>0)

{

cout << x << endl;

x = x – 3;

}

 

  1. Что будет сгенерировано на выходе в предыдущем упражнении, если вместо знака > в нём использовать знак <?
  2. Что сгенерирует на выходе приведённый ниже код в программе, содержащей объявление переменной x типа int?

x =10;

do

{

cout << x << endl;

x = x – 3;

} while (x>0);

 

  1. Что сгенерирует на выходе приведённый ниже код в программе, содержащей объявление переменной x типа int?

 

x = -42;

do

{

cout << x << endl;

x = x – 3;

} while (x>0);

 

  1. Каково важнейшее отличие оператора while от do…while?
  2. Что делает оператор break? Где его можно размещать?
  3. Что выведет код

int count=3;

while (count -- >0)

cout<<count<< “ “;

при выполнении в составе полной программы?

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-11-18 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: