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

Методичка для изучения основ С++ 3 циклы

.doc
Скачиваний:
86
Добавлен:
20.05.2015
Размер:
81.41 Кб
Скачать

Оператор ? :

Это условный оператор (тернарная операция), которую часто используют вместо if/else. Это единственный оператор С++, требующий использования трех операндов.

выражение1 ? выражение2 : выражение3

Если выражение1 истинно, то значение всего условного выражения будет выражение2, в противном случае выражение3.

5>3 ? 10 : 12 //5>3 истинно, поэтому значение выражения – 10

3==9 ? 25 :18 //3==9 ложно, поэтому значение выражения – 18

if (k>5) My_res=10; else My_res=x*y; (My_res=k>5 ? 10 : x*y)

Оператор switch:

Этот оператор обеспечивает выбор из расширенного спискаи используется при большом количестве вложенных проверок

switch (целочисленное выражение)

{

case метка1 : оператор(ы)

case метка2 : оператор(ы)

………………………………………

default : оператор(ы)

}

Оператор switch действует как переключатель, который указывает компьютеру, какую строку программы нужно выполнить следующей. Встретив ключевое слово switch, программа переходит к строке, помеченной значением, совпадающим со значением целочисленного выражения. Если таких меток нет, тогда выполняется строчка default. Если же такой строчки нет, тогда выполняется оператор следующий за switch. При переходе к определенной строке в данном операторе, выполнение операции не останавливается автоматически на следующем варианте. Чтобы прервать выполнение в конце некоторой группы операторов, необходимо использовать оператор break: тогда выполнение продолжится с оператора, следующего за switch.

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

Задача Написать программу, которая по двум введенным целым числам и знаку операции над ними (-, +, *, /) выполняет соответствующее математическое действие.

#include<iostream>

#include<clocale>

usingnamespace std;

int main()

{

setlocale(LC_ALL, "Russian");

cout <<"Введите числа и знак операции\n";

inta, b;

char znak;

cin >> a >> znak >> b;

switch(znak)

{

case'-': cout << (a-b); break;

case'+': cout << (a+b); break;

case'*': cout << (a*b); break;

case'/': cout << (a/b); break;

}

return 0;

}

Структура повторения

Последовательность действий выполняющаяся два и более раз называется циклом.

  1. Цикл for (цикл с предусловием)

for (инициализация; условие продолжения цикла; обновление переменной цикла)

тело цикла;

Инициализация цикла выполняется только один раз. Как правило, это выражение применяется для задания начального значения переменной, после чего данная переменная может использоваться для подсчета количества итераций цикла (в этом случае ее называют счетчиком цикла).

Условие продолжения цикла определяет, следует ли завершить выполнение цикла. Если логическое выражение оказывается истинным, программа выполняет тело цикла, в противном случае цикл завершается. В качестве тела цикла может выступать и составной оператор или блок.

Обновление переменной цикла происходит в конце цикла после выполнения его тела. Обычно это приводит к увеличению или уменьшению значения переменной, которая играет роль счетчика итераций. Здесь может использоваться любое допустимое выражение С++.

Пример

#include<iostream>

#include<clocale>

usingnamespace std;

int main()

{

setlocale(LC_ALL, "Russian");

int i;

for (i=0; i<5; i++)

cout << i <<"-я строка "<<'\n';

cout <<"Последняя строка\n";

return 0;

}

В цикле for можно объявлять переменную в области инициализации цикла.

for (int i=0; i<5; i++)

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

for ( ; ; )

тело цикла;

Здесь пропуск условия продолжения истолковывается как истинное значение, поэтому данный цикл будет бесконечным.

  1. Цикл while (цикл с предусловием)

Цикл while представляет собой цикл for, область управления которого не содержит частей инициализации и обновления переменной цикла.

while (условие продолжения цикла)

тело цикла

Сначала программа проверяет условие продолжения цикла. Если в результате вычисления этого выражения получается логическое значение true, выполняются операторы в теле цикла. В качестве тела цикла, также может быть и составной оператор. Далее снова проверяется условие продолжения. Если данное условие оказывается ложным, то цикл прекращается. Для завершения цикла, в его теле должно быть выполнено некоторое действие, которое могло бы оказать влияние на значение условия продолжения цикла.

Пример. Найти все делители целого положительного числа.

Решение

#include<iostream>

#include<clocale>

usingnamespace std;

int main()

{

setlocale(LC_ALL, "Russian");

int num;

cout<<"\nВведитечисло: ";

cin>>num;

int half = num/2;

int div = 2;

while (div <= half)

{

if (!(num % div))

cout << div <<"\n";

div++;

}

return 0;

}

Циклы for и whileпрактически равнозначны. Обычно for применяют в качестве цикла со счетчиком, а whileв том случае, когда количество итераций заранее точно не известно.

  1. Цикл dowhile (цикл с постусловием)

Приведем синтаксис данного цикла

do

тело цикла

while (условие продолжения цикла);

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

Операторы break и ontinue

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

Пример. Вычислить сумму только отрицательных чисел.

Решение

#include<iostream>

#include<clocale>

usingnamespace std;

int main()

{

setlocale(LC_ALL, "Russian");

int sum, i, n, num;

sum=0;

cout <<"\nВведите количество чисел: ";

cin >> n;

cout <<"\nВведите "<<n<<" чисел\n";

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

{

cin>>num;

if (num>=0)

continue;

sum+=num;

}

cout<<"Сумма отрицательных чисел равна "<<sum<<'\n';

return 0;

}

Задачи

  1. Найти произведение всех целых чисел от 1 до 10.

  2. Напечатать столбиком значения sin 0.1 sin 0.2 sin 0.3 … sin 1.1

  3. Вычислить

  1. Вычислить

  1. Дано натуральное число n. Вычислить значение выражения, в котором n корней:

  1. Вычислить

  1. Дано натуральное число n (n13). Вычислить

  1. Дано вещественное число x. Вычислить

9. Последовательность чисел a0, a1, a2, … образуется по закону a01; ak=kak-1+1/k (k  1,2, … ). Дано натуральное число n . Получить a1, a2, … ,an.

10. Последовательность чисел Фибоначчи fk образуется так:

f0=1, f1=1, fk = fk-2 + fk-1.

Дано натуральное число n . Получить fn.

11. Найти сумму натуральных чисел из интервала от 10 до 80, которые содержат цифру 2.

12. Найти все двузначные числа, которые кратны 4 и у которых сумма цифр также кратна 4.

  1. Определить количество натуральных чисел из интервала от 100 до 500, сумма цифр которых равна 15.

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

15. Найти все трёхзначные числа, которые при делении на 2 дают остаток 1, при делении на 3  остаток 2, при делении на 4  остаток 3, а само число делится на 5.

16. Найти четырёхзначное число, которое при делении на 133 даёт в остатке 125, а при делении на 134 даёт в остатке 111.

17. Квадрат трёхзначного числа оканчивается тремя цифрами, которые как раз и составляют это число. Найти все такие трёхзначные числа.

18. В трёхзначном числе зачеркнули первую цифру слева. Когда полученное двузначное число умножили на 7, то получили данное число. Найти это трёхзначное число.

19. Дано натуральное число n. Вычислить количество его нечётных делителей.

20. Дано натуральное число n. Проверить, верно ли, что сумма его делителей, за исключением самого числа, равна n.

21. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Подсчитать произведение отрицательных элементов последовательности.

22. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Найти среднее арифметическое положительных элементов последовательности.

23. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Сколько раз в этой последовательности меняется знак ? (Например, в последовательности 10 -4 12 56 -23 знак меняется 3 раза)

24. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Найти минимальный элемент последовательности и его номер.

25. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Найти разность между максимальным и минимальным элементами последовательности.

26*. Дана последовательность из 10 действительных чисел, которые вводятся с клавиатуры. Найти порядковый номер того из них, которое наиболее близко к какому-нибудь целому числу.

27*. Даны n различных отрезков на прямой, каждый из которых задан парой действительных чисел (a,b), являющихся координатами концов отрезка. Определить координаты концов отрезка, являющегося пересечением всех этих отрезков. Если такого отрезка нет, то сообщить об этом.

28*. Даны n различных точек на плоскости, каждая из которых задана своими координатами (x,y). Определить радиус наименьшего круга (с центром в начале координат), в который попадают все эти точки.

29. Найти натуральное число от 1 до 1000 с максимальной суммой делителей.

30. Число называется совершенным, если оно равно сумме всех своих делителей, кроме самого этого числа. (Например, 28124714). Получить все совершенные числа из интервала от 1 до 10000.

31. Дано натуральное число n . Найти сумму цифр этого числа.

32. Дано натуральное число n . Поменять порядок цифр числа на обратный.

33. Дано натуральное число n . Найти самую большую его цифру.

34. Дано натуральное число n . Приписать 1 в начало и в конец записи числа n . ( 3456  134561 ).

35. Дано натуральное число n . Поменять местами первую и последнюю цифры числа n .

36. Дано натуральное число n . Выяснить, входит ли цифра 7 в запись числа n2 .

37. Даны действительные числа a1, a2, a3, … . Известно, что a1>0 и что среди a2 ,a3 . . . есть хотя бы одно отрицательное число. Пусть a1, a2, … , an  элементы данной последовательности, предшествующие первому отрицательному элементу (n заранее неизвестно). Получить:

  1. a1  a2  a3  . . . an ;

  2. среднее арифметическое a1, a2, … an ;

  3. a1, a1a2, a1a2a3, … , a1a2 … an ;

  4. a1 + 2a2 + 2a3 + … +2an-1 + an ;

  5. a1a2 + a2a3 + … + an-1an + ana1 ;

  6. n + an ;

  7. a1  an  .

38. Дано 10 вещественных чисел. Верно ли, что в этой последовательности нет отрицательных элементов.

39. Дана последовательность из 10 целых чисел. Определить, со скольких отрицательных она начинается.

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

41. Дано 10 вещественных чисел. Верно ли, что в этой последовательности есть хотя бы одна пара рядом стоящих нулей.

42. Даны натуральные числа n и m. Подсчитать количество чисел из диапазона от m до n, у которых первая и последняя цифры одинаковые.

43*. Даны натуральные числа n и m. Подсчитать количество чисел из диапазона от m до n, в записи которых есть цифра 0.

44*. Даны натуральные числа a и b (ab). Получить все простые числа p, удовлетворяющие неравенствам apb.