Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
48
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать

Ветвящиеся алгоритмы.

Описанные условные операторы позволяю создавать достаточно сложные программы. Рассмотрим для примера программу решения линейного уравнения ax+b=0.

//

// Решение линейного уравнения ax+b=0

// ( C ) Демонстрационная программа

// 1999 год.

#include <stdio.h>

int main()

{

double a,b,x;

printf(“enter a:”);

scanf(“%lf”,&a);

printf(“enter b:”);

scanf(“%lf”,&b);

if(a==0)

{

if(b==0)

printf(“every x is solution.”);

else

printf(“no solution.”);

}else

{

x=-b/a;

printf(“x=%lf”,x);

}

return 0;

}

Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.

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

Простейший из циклов имеет вид:

while (условие)

{

операторы;

}

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

Имеется аналогичный вариант цикла, но с проверкой в конце

do

{

операторы;

} while (условие);

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

for( инициализация ; проверка_условия ; коррекция) { операторы; }

В таком цикле сначала выполняется инициализация. Обычно – это присвоение начального значения переменной цикла. Инициализация выполняется только один раз. Далее происходит проверка условия. Если она дает истину, то выполняются операторы внутри цикла. После этого выполняется коррекция и повторяется проверка.

В следующем примере складываются первые пять целых чисел:

int sum=0;

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

{

sum+=i;

}

Внутри циклов можно использовать оператор break; для принудительного завершения цикла и оператор continue; для пропуска оставшихся в цикле операторов и перехода к повторению цикла.

Практическое задание №2.

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

Вариант 1.

Напишите программу возведения целого числа a в целую степень n. Разработайте интерфейс, позволяющий пользователю вводить а и n с клавиатуры. Вычислите и распечатайте таблицу степеней числа 2: при n=0..20.

Вариант 2.

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

Даны два целых положительных числа x и y.

Шаг 1 : Из большего числа вычесть меньшее. Результат поместить в переменную c.

Шаг 2: Положить большее число равным c.

Шаг 3: Если , то повторить шаги 1 и 2.

Шаг 4: Если , то НОД=x=y.

Разработайте интерфейс, позволяющий ввести два числа с клавиатуры и получить их НОД.

Контрольные примеры:

НОД(30030, 2380) = 70, НОД(4200, 660) = 60,

НОД(462,819)=21, НОД(10465, 8778) = 7

Вариант 3.

Разработайте программу решения квадратного уравнения . Пользователь должен иметь возможность ввести с клавиатуры коэффициенты a, b, с и получить корни уравнения и . Обработайте особые случаи (, и т.д.).

Контрольные примеры:

;

;

;

; нет корней

Вариант 4.

Вычислите число e путем вычисления следующей суммы:

, где

Вычисления обрывайте по достижении условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Разработайте интерфейс, позволяющий пользователю вводить параметр с клавиатуры. Сравните результат суммирования с точным значением числа e. Проанализируйте поведение суммы при различных .

Вариант 5.

Определите значение машинного нуля для чисел с плавающей запятой у используемого Вами типа компьютера. Для этого определите число такое, что (в смысле компьютерных вычислений. Разработайте интерфейс, позволяющий пользователю вводить начальное значение с клавиатуры.

Вариант 6.

Определите количество значащих цифр для чисел с плавающей запятой у используемого Вами типа компьютера. Для этого определите число такое, что (в смысле компьютерных вычислений. Разработайте интерфейс, позволяющий пользователю вводить начальное значение с клавиатуры.