Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tekhnologia_programmirovania.pdf
Скачиваний:
182
Добавлен:
08.04.2015
Размер:
1.76 Mб
Скачать

Управление и циклы 71

Ввод исходных данных производится в цикле do … while. Этот цикл повторится, если будет истинным выражение a < 0 || eps <= 0. Оператор || является логическим оператором ИЛИ и все выражение будет истинным, если введено или отрицательное значение для a, или для точности eps. Синтаксис языка требует, чтобы между do и while была единственная инструкция. Здесь четыре инструкции объединены в одну составную инструкцию фигурными скобками { и }.

Вычисления начинаются с присваивания переменной xn1 значения a. Далее вычисления продолжаются в цикле do while.

Важным приемом программирования является присваивание xn = xn1;

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

Каждое из приближений печатается.

5.3. Переключатель

Для выбора одного из многих вариантов удобно использовать оператор switch, который имеет вид:

switch(выр){

case константа1 : инструкция1

break;

case константа2 : инструкция2

break;

case константаN : инструкцияN

break;

default: инструкция

}

Ветвь default может отсутствовать.

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

72 5

Программа 10. День недели

Программа предлагает ввести номер дня недели и выводит его название.

//Файл DayWeek.cpp

//Программа выводит название дня недели по его номеру #include <iostream.h>

#include <conio.h> int main()

{

int n; // Номер дня недели

cout << "\nВведите номер дня недели от 1 до 7 \n"; cin >> n;

cout << "Это "; switch(n){

case 1: cout << "Понедельник";

break;

case 2: cout << "Вторник";

break;

case 3: cout << "Среда";

break ;

case 4: cout << "Четверг";

break;

case 5: cout << "Пятница";

break;

case 6: cout << "Суббота";

break;

case 7: cout << "Воскресенье";

break;

default: cout << "Неверный номер";

}

getch(); return 0;

}

Ниже приводятся результаты двух запусков программы.

Введите номер дня недели от 1 до 7 5 Это Пятница

Введите номер дня недели от 1 до 7 8 Это Неверный номер

5.4. Операторы break и continue

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

Оператор continue вызывает следующую итерацию охватывающего его цикла for, while, do-while до окончания выполнения всех инструкций

Управление и циклы 73

в теле цикла. Использование операторов break и continue иллюстрируется следующей программой.

Программа 11. Сумма положительных чисел

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

//Файл SumPos.cpp

//Подсчет суммы положительных чисел и их количества #include <iostream.h>

#include <conio.h> int main()

{

int x, sum = 0; // Вводимое число и сумма

int i;

// Параметр цикла

int ipos = 0;

// Количество введенных положительных чисел

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

for(i = 0; ; i++){

// Бесконечный цикл

cin >> x;

 

if(x < 0)

// Если число отрицательное,

continue;

// переход к повторению цикла

if(x == 0)

 

break;

// Выход из цикла

sum += x;

// Увеличение суммы

ipos++;

// Увеличение счетчика положительных чисел

}

cout << "Введено " << i << ” чисел, \n”;

cout << ” из них ” << ipos << ” положительных \n";

cout << "Сумма положительных sum = " << sum << "\n"; getch();

return 0;

}

Результаты работы программы:

Вводите числа:

1 2 3 -1 -4 6 7 -3 -9 0 Введено 9 чисел, из них 5 положительных

Сумма положительных sum = 19

Задачи -. Выбор и циклы

18. Напишите программу, которая вводит целое число и проверяет, является оно четным или нечетным.

745

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

20.Дано трехзначное целое число. Требуется проверить, делится ли оно на 3. Известно, что число делится на 3, если на 3 делится сумма его цифр.

21.Дано трехзначное целое число. Проверить, читается ли оно одинаково слева направо и справа налево. Такие числа называются

палиндромами.

22.Напишите программу, которая запрашивает номер месяца и выводит соответствующее название времени года.

23.Напишите программу, которая спрашивает Ваш возраст в годах и выводит его с правильным использованием слов «год» или «лет», например, 17 лет, 21 год, 22 года.

24.Напишите программу, вводящую номер месяца и выводящую его название.

25.В старояпонском календаре был принят 60–летний цикл, основанный на пяти 12–летних подциклах. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. (1984 год – год зеленой крысы – был началом очередного цикла). Напишите программу, которая вводит номер некоторого года, больший чем 1984, и печатает его название по старояпонскому календарю.

26.Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника. (При определении расстояний учесть, что площадь треугольника можно вычислить и через три его вершины и через произведение площади основания на высоту.)

При решении следующих задач нужно применить наиболее

подходящий из циклов while, for, do

while.

27. Напишите программу, печатающую таблицу значений

функции

 

 

 

 

 

 

p( x) =

1

 

 

e

1( ln x−1) 2

 

 

 

 

2

x

для x = 0.1, 0.2, ... , 2.

28.Напишите программу, печатающую таблицу умножения для чисел от 0 до 9 в десятичной системе счисления.

29.Дано целое k от 1 до 180. Определить, какая цифра находится в k-й позиции последовательности 10111213…99, в которой выписаны подряд все двузначные числа.

Управление и циклы 75

30.Дано натуральное k. Определить k-ю цифру последовательности 110100100010000100000…, в которой выписаны подряд степени 10.

31.Напишите программу, определяющую k – количество цифр в десятичной записи целого неотрицательного числа n.

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

33.Числа Фибоначчи fn определяются формулами:

f0 = f1 = 1; fn =fn-1 + fn-2 при n = 2, 3,…

Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.

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

35.Напишите программу, выводящую число Фибоначчи с заданным номером n > 1.

36.Напишите программу, выводящую все числа Фибоначчи, значения которых не превышают некоторого числа N.

37.Вычислить S – сумму всех чисел Фибоначчи, которые не превосходят 1000.

38.Напишите программу, вводящую заданное число n пар вещественных чисел x, y. Рассматривая эти пары как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.

39.Дана непустая последовательность положительных

вещественных чисел x1, x2, … , xn (n заранее не известно), за которой следует отрицательное число. Вычислить величину

nx1+ (n–1)x2 + … + 2xn-1 +xn.

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

41.Определить, является ли заданное натуральное число n совершенным, то есть равным сумме всех своих положительных делителей, кроме самого этого числа. Например, число 6 – совершенно: 6 = 1 + 2 + 3.

42.Дано целое n > 0. Напечатать все простые числа из диапазона [2, n]. Простым называется число, которое не имеет делителей, кроме 1

исамого себя.

43.Определить, является ли заданное натуральное число палиндромом, то есть таким, запись которого в десятичной системе счисления читается одинаково слева направо и справа налево.

765

44.Дано натуральное k. Определить k – ю цифру последовательности 12345678910111213 …, в которой выписаны подряд все натуральные числа.

45.Найти все целые корни уравнения

x3 + bx2 + cx +d = 0,

где b, c, d – заданные целые числа, причем d ¹ 0.

Замечание. Целыми корнями могут быть только положительные и отрицательные делители коэффициента d.

46.Дано натуральное число n. Напечатать все числа от 1 до n в десятичной и двоичной системах счисления.

47.Напишите программу, вводящую положительные числа x1, x2,.. Признаком окончания ввода является ввод нуля или отрицательного

числа. Вычислить y=x1+x1x2+x1x2x3+…+ x1x2 ××× xm, где m – число введенных положительных чисел.

48.Подсчитать количество «счастливых» шестизначных автобусных билетов, то есть таких, в номерах которых сумма первых трех цифр равна сумме трех последних. (Можно воспользоваться тем,

что количество «счастливых» билетов равно s02+s12+s22+…+s272, где sn, n = 0, 1,…, 27 – количество чисел от 0 до 999, сумма цифр которых равна n.)

49.Напишите программу, вычисляющую факториал заданного

натурального числа n. Факториал

n – это последовательное

произведение всех чисел от 1 до n: n! = 1∙2∙3∙…∙(n-1) n.

50. Дано вещественное число x

и вещественное число e>0.

Вычислить с точностью e значение следующей функции ex=1 + x/1! + x2/2! + … + xn/n! + …

Вычисления прекратить, когда очередной член суммы xn/n! станет по модулю меньше e.

51. Вычислите с заданной точность e > 0 приближенное значение синуса, используя ряд:

sin x = x - x3/3! + x5/5! -…+(-1)nx2n+1/(2n+1)!+…

52. Не используя стандартные функции, за исключением abs, вычислить с заданной точностью eps>0

y=arctg x = x – x3/3 + x5/5 + … + (-1)nx2n+1/(2n+1) + … (|x| < 1).