Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






 

Синтаксическая диаграмма:

 
 

 

 


Между зарезервированными словами do и while располагается оператор, который завершается точка с запятой, или произвольное количество операторов, заключенных в операторные скобки. После знака ”}” точка с запятой не ставится. В частном случае здесь может быть лишь один пустой оператор.

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

В теле цикла do - while должно изменяться значение выражения, записанного после слова while, таким образом, чтобы это выражение, в конечном счете, приняло значение false, в противном случае будет иметь место зацикливание программы. В целом, цикл do – while выполняется так же, как и цикл while. Отличие состоит в том, что операторы тела цикла do – while выполняются до проверки условия продолжения цикла, поэтому они выполнятся, по крайней мере, один раз.

 

 

Схема выполнения:

 

Пример 1. Распечатать цифры целого числа a в обратном порядке.

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

 

Блок-схема.

 
 

 


Си-программа

 

int main()

{

int a, d, a1;

//Ввод значения а

a1=abs(a);

do

{

d = a1 % 10; a1 = a1 / 10;

printf(" %1d", d);

}

while (a1! = 0);

getch();

return 0;

}

 

Пример 2. Определить среднее арифметическое цифр целого числа a.

 

Для решения задачи вводятся две переменные sumdig (сумматор) для накапливания суммы цифр числа, которые выделяются по известному алгоритму, и koldig (счетчик) для подсчета количества цифр, к которому в каждом проходе по циклу прибавляется 1. Перед циклом эти переменные обнуляются. При определении среднего арифметического цифр s, используется преобразование sumdig к типу float для получения вещественного результата.

 

Блок-схема.

 
 

 

 


Си-программа

 

intmain()

{

inta, a1, koldig, sumdig;

floats;

//Ввод значения а

a1=abs(a);

koldig=0; sumdig=0;

do

{

sumdig+=a1%10;

koldig ++; a1=a1/10;

}

while(a1! =0);

s = (float)sumdig / koldig;

//Печать s

getch();

return0;

}

Пример 3. Удалить из исходного числа a все цифры 5.

 

Блок-схема.

 
 

 

 


Пусть задано число 35475, после преобразования должно получиться число 347. Для решения задачи используется алгоритм выделения цифр числа. Из выделенных цифр формируется новое число с использованием весовых коэффициентов разрядов числа. Весовой коэффициент нулевого разряда равен 1. Так как выделение цифр начинается с младшей, то переменной p перед циклом присваивается значение 1.

После выделения очередной цифры, она умножается на весовой коэффициент и добавляется в сумматор s. Переменная p умножается на 10, для получения весового коэффициента очередного (старшего) разряда. Эти действия выполняются в том случае, если цифра не равна 5. Для заданного числа получим s = 7*1 + 4*10 + 3*100 = 347.

После получения s проверяется знак исходного числа, и в переменную a записывается значение s с определенным знаком.

Си-программа

 

intmain()

{

inta, a1, digit, s, p;

//Ввод значения а

a1 = abs(a); s = 0; p = 1;

do

{

digit=a1%10; a1=a1/10;

if(digit! = 5)

{s += digit * p; p *= 10; }

}

while(a1! =0);

if(a < 0)a = -s; elsea = s;

//Ввод a

getch();

return0;

}

 

Пример 4. Получить число b, в котором цифры исходного числа a переставлены в обратном порядке. Схема Горнера.

Полином (многочлен)

целесообразно всегда вычислять по схеме Горнера:

.

Схема Горнера обладает следующими преимуществами по сравнению с обычной записью полинома:

- меньшее количество операций умножения;

- меньшая погрешность вычислений;

- удобство реализации вычислений в виде цикла.

Для вычисления полинома по обычной схеме требуется операций умножения, по схеме Горнера - таких операций.

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

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

Вычисления в программе организуются по следующей методике:

P = an

P = P * x + an-1

P = P * x + an-2

...................

P = P * x + a1

P = P * x + a0

 

Если считать, что в приведенных формулах a0 … an это цифры числа, а x – основание степени счисления, например 10, то схему Горнера можно использовать для получения числа из его цифр. Цифра старшего разряда должна включаться в схему Горнера первой. При использовании рассмотренных алгоритмов выделения цифр из числа первой выделяется цифра младшего разряда. Если ее включить в схему Горнера первой, она станет цифрой старшего разряда. При дальнейшем выделении цифр и включении их в схему Горнера, в сформированном числе цифры исходного числа будут расположены в обратном порядке.

 

Блок-схема.

 

 
 

 


Максимальное значение числа типа int составляет 2147483647. Поэтому, если введенное число будет больше 1000000000, а младшая цифра, например, равняется 5, то при перестановке цифр в обратном порядке получится число, превышающее диапазон допустимых значений заданного типа (возникает переполнение). В итоге результат будет неверен. Потому в программе осуществляется проверка условия a1> 1000000000.

 

Си-программа

 

intmain()

{

inta, a1, digit, b;

//Ввод значения а

a1=abs(a);

if(a1> 1000000000)

{ printf(" Преобразование может вызвать переполнение\n");

getch();

exit(0);

}

b = a1 % 10;

while(a1> 9)

{

a1 = a1 / 10;

digit = a1 % 10;

b = b * 10 + digit;

}

if(a< 0)b=-b;

//Печать b

getch();

return0;

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.