Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab3(основы программирования).doc
Скачиваний:
32
Добавлен:
20.11.2019
Размер:
137.73 Кб
Скачать

1. Вычисляется выражение 1.

2. Вычисляется выражение 2.

3. Если значения выражения 2 отлично от нуля (истина), выполняется оператор тела цикла (если необходимо циклически выполнить совокупность операторов, они оформляются в составной оператор), вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.

Оператор цикла вида for (выражение 1; выражение 2; выражение 3) тело цикла ; может быть заменен оператором while следующим образом:

выражение 1;

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

{ тело цикла;

выражение 3;

}

Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным и цикл for может заменит цикл while. Рассмотренный пример суммирования чисел с использованием цикла for можно переписать следующим образом:

int x, Sum;

cin >> x; //вводим первое число

for (Sum = 0; x!=0; )

(

Sum += x; //складываем очередное введенное число с суммой

cin >> x; //ввод следующего числа

}

cout << Sum; //вывод посчитанной суммы

Чаще всего оператор for используется в циклах, для которых можно заранее вычислить количество выполняемых шагов. Рассмотрим пример.

int i,b;

for (i=1; i<10; i++)

cout<<i<<”^2=”<<i*i<<endl;;

В этом примере вычисляются и выводятся на экран квадраты чисел от 1 до 9. Переменная i выполняет роль счетчика цикла, начальное значение ей присваивается в выражении 1 оператора for, модификация (увеличение на 1) производится в выражении 3, а проверка на достижения предельного значения – в выражении 2. Таким образом, строка вида

for (cчетчик_цикла=начальное_значение;

счетчик_цикла<предельное_значение+1; счетчик_цикла+=шаг_изменения)

является канонической для языка С++ и используется очень часто. Необходимо также отметить, что в подобной интерпретации (цикл со счетчиком) оператор for не накладывает никаких ограничений на переменную цикла: она может быть, например, вещественного типа, шаг ее изменение может быть отличен от 1 или -1.

Некоторые варианты использования оператора for повышают его гибкость за счет возможности использования нескольких переменных, управляющих циклом.

Пример:

int main()

{ int top, bot;

char string[100], temp;

for ( top=0, bot=100 ; top < bot ; top++, bot--)

{ temp=string[top];

string[bot]=temp;

}

return 0;

}

В этом примере, реализующем запись строки символов в обратном порядке, для управления циклом используются две переменные top и bot. Отметим, что на месте выражение 1 и выражение 3 здесь используются несколько выражений, записанных через запятую, и выполняемых последовательно.

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

unsigned int n, f;

cin >> n;

for (unsigned int i=2, f=1; i<=n; f*=i++);

cout << f;

В последнем примере оператор тела цикла вырожден в пустой оператор, поскольку все необходимые для вычисления действия (вычисление факториала последовательным перемножением чисел, модификация переменной цикла) сосредоточены в модифицирующем выражении оператора for.

Еще один пример с использованием пустого оператора в теле цикла for.

for (i=0; t[i]<=10 ; i++) ;

В данном примере переменная цикла i принимает значение номера первого элемента массива t, значение которого больше 10.

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

for (;;)

{ ...

if (условие окончания цикла) break;

...

}

Оператор break предназначен для принудительного завершения охватывающего оператора. Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do while, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.

Оператор continue используется только внутри операторов цикла, но в отличие от break прерывает выполнение текущей итерации цикла, передавая управление на начало следующей итерации цикла, при этом выражение 3 оператора for будет выполнено.

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

int p, val, i;

for (i=1; i<=20; i++) //перемножаем 20 чисел

{

cin >> val; //вводим очередное число

if (val==1) continue; //если ввели единицу – к следующему числу

if (val==0) //если ввели 0

{pr=0;break;} //обнуляем произведение, выходим из цикла

pr*=val; //домножаем текущее произведение на введенное число

}

cout << pr; //выводим полученное произведение

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

Порядок выполнения работы

  1. Ознакомьтесь с теоретическими основами программирования циклических процессов на языке С++ в настоящих указаниях и конспектах лекций.

  2. Получите вариант задания у преподавателя.

  3. Составьте алгоритм решения задачи согласно варианту задания, оформите его в графической форме.

  4. Используя разработанный алгоритм, напишите программу .

  5. Отладьте разработанную программу и покажите результаты работы про­граммы преподавателю.

  6. Составьте отчет по лабораторной работе.

  7. Отчитайте работу преподавателю.

Содержание отчета

Отчет по лабораторной работе должен содержать следующие сведения:

  • название и цель работы;

  • вариант задания;

  • графическую схему алгоритма решения задачи;

  • листинг разработанной программы с комментариями;

  • результаты работы программы.

Пример оформления отчета:

Вариант№11 (пример)

  1. Дано n целых чисел. Найти количество отрицательных значений и количество тех значений, которые больше первого из n чисел. Числа по одному вводятся с клавиатуры.

#include <conio.h>

#include <math.h>

#include <iostream.h>

main()

{ int x=0,c=0,n=4,first,otric=0,bol=0,i;

clrscr();

cout<<"Vvedite 1-oe chislo: ";

cin>>first;

if (first<0) otric++;

for (i=2;i<=n;i++)

{

cout<<"Vvedite "<<i<<"-oe chislo: ";

cin>>x;

if (x<0) otric++;

if (x>first) bol++;

}

cout<<"Kol-vo otricatelbnbIx chisel:"<<otric<<"\n";

cout<<"Kol-vo chisel bolbshix pervogo: "<<bol;

getch();}

Дана последовательность чисел. Определить количество чисел, две последних цифры которых кратны 3.

#include <conio.h>

#include <math.h>

#include <iostream.h>

main()

{

int x,c,n,i,m=0;

clrscr();

do

{

cout<<"Vvedite chislo: ";

cin>>x;

c=x%100;

n=c/10;

i=c%10;

if (x/10!=0)

if ((n%3==0)&&(i%3==0)) m++;

}

while(x!=0);

cout<<"Iskomye chisla: "<<m;

getch();

}

Варианты заданий

Вариант№1

  1. Даны n целых чисел. Определить, являются ли эти числа равными или все они не меньше заданного А.

  2. Дана последовательность чисел. Определить порядковый номер числа, которое содержит наибольшее количество цифр.

Вариант№2

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

  2. Дано число. Разделить цифры, стоящие на нечётных местах на 3. Если не делятся без остатка, то оставить без изменения.

Вариант№3

  1. Дано n целых чисел. Найти количество отрицательных значений и количество тех значений, которые больше первого из n чисел. Числа по одному вводятся с клавиатуры.

  2. Дана последовательность чисел. Посчитать сумму цифр всех отрицательных чисел.

Вариант№4

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

  2. Дана последовательность чисел. Посчитать сумму цифр всех чётных чисел.

Вариант№5

  1. Дана последовательность целых чисел. Известно, что среди них несколько раз встречаются два подряд идущих нуля. Определить, сколько раз встречается эта ситуация.

  2. Дана последовательность чисел. Посчитать произведение цифр последнего числа, кратного 5.

Вариант№6

  1. Дана последовательность целых чисел до 0. Найти сумму целых чисел, которые одновременно больше 20, меньше 100 и кратны 3.

  2. Дана последовательность чисел. Посчитать произведение цифр первого числа, кратного 3.

Вариант№7

  1. Дана последовательность n целых чисел, где n- задано. Определить ,все ли числа попадают в заданный интервал [ x, y ].

  2. Дано число. Посчитать сумму цифр, стоящих на чётных местах числа.

Вариант№8

  1. Дана последовательность вещественных чисел. Определить, образуют ли они возрастающую последовательность.

  2. Дано число. Посчитать произведение тех цифр числа, которые кратны 3.

Вариант№9

  1. Дана последовательность целых чисел. Определить количество чисел, кратных разности текущего и предыдущего чисел.

2. Дано число. Посчитать разность между первым и последним числом.

Вариант№10

  1. Дана последовательность из 100 целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.

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

Литература

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]