1. Операторы цикла: синтаксис и семантика




Скачать 391.27 Kb.
Название1. Операторы цикла: синтаксис и семантика
страница1/3
Дата публикации27.09.2013
Размер391.27 Kb.
ТипДокументы
uchebilka.ru > Информатика > Документы
  1   2   3
ЗАНЯТИЕ 3

1. Операторы цикла: синтаксис и семантика.


1.1. Оператор for.

1.2. Оператор while.

1.3. Оператор do-while.

2. Многократный ввод-вывод. Понятие однократного и многократного ввода-вывода. Чтение данных до конца файла. Возвращаемое значение функции scanf.

3. Форматированный ввод-вывод. Формат целочисленных и вещественных данных.


4. Математические функции. Библиотека . Алгебраические и тригонометрические функции. Функции округления. Вычисление степени числа. Константа .

5. Задачи

http://acm.uva.es/problemset: 113 (Сила криптографии), 408 (Однородный генератор), 10127 (Единицы), 10509 (Обмануть Мистера Фреймана), 10633 (На редкость простая задача), 10683 (Десятичные часы), 10773 (Назад к математике средней школы), 10783 (Сумма нечетных чисел), 10784 (Диагональ).

http://acm.timus.ru: 1068 (Sum).

http://www.topcoder.com/tc: SRM 326 (AdditionCycles), SRM 343 (PersistentNumber), TCHS 29 (ReverseSums).


^ 1. ОПЕРАТОРЫ ЦИКЛА
Язык Си имеет три конструкции, реализующие операторы цикла: for, while, do-while.
1.1. ОПЕРАТОР for
Цикл for является одним из основных видов циклов, которые имеются во всех универсальных языках программирования, включая С. Однако версия цикла for, используемая в С, обладает большей мощностью и гибкостью.

Основная идея функционирования for заключается в том, что операторы, находящиеся внутри цикла, выполняются фиксированное число раз, в то время как переменная цикла (известная еще как индексная переменная) пробегает определенный ряд значений.
Синтаксис:

for (<выражение инициализации>; <условное выражение>; <выражение цикла>)

<тело оператора>;
Параметры цикла for, заключенные в скобки, должны разделяться точкой с запятой (позиционный параметр), которая делит в свою очередь пространство внутри скобок на три сектора.

Тело оператора for выполняется нуль и более раз до тех пор, пока условное выражение <условное выражение> не станет ложным.

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

Первым шагом при выполнении оператора for является вычисление выражения инициализации, если оно имеется. Далее вычисление продолжается в зависимости от значения условного выражения:

1. Если условное выражение истинно (не равно нулю), то выполняется тело оператора. Потом вычисляется выражение цикла (если оно есть). Процесс повторяется снова с вычислением условного выражения.

2. Если условное выражение опущено, то его значение принимается за истину и процесс выполнения продолжается, как описано выше. В этом случае оператор for может завершиться только при выполнении в теле оператора операторов break, goto, return.

3. Если условное выражение ложно, то выполнение оператора for заканчивается и управление передается следующему оператору в программе.

Оператор for может завершиться при выполнении операторов break, goto, return в теле оператора. В некоторых случаях использование оператора запятая (,) позволит вводить составные выражения в оператор цикла for.

Пример 1.1.1. Вычислить сумму чисел от 1 до 100.
for (s=0,i=1;i<=100;i++)

s = s + i;
Выражение инициализации обнуляет переменную суммы s и присваивает 1 переменной i. Операторы, записанные через запятую, выполняются последовательно. Выражение цикла прибавляет 1 к переменной i, а в теле цикла происходит суммирование переменных s и i. Цикл завершает свою работу когда переменная i достигнет значения 101. То есть последним числом, которое будет прибавлено к переменной s, будет 100. В конце работы оператора for переменная s будет содержать число 5050 – сумму натуральных чисел от 1 до 100.
Пример 1.1.2. Тело цикла, которое не выполняется
for (s=0,i=1;i<1;i++)

s = s + i;
Если в предыдущей программе заменить условное выражение на i < 1, то тело цикла никогда не выполнится. После инициализации s = 0, i = 1 будет проверено условное выражение i < 1. И поскольку оно ложно, то управление программой перейдет на следующий за for оператор.
Пример 1.1.3. Для заданного натурального n вычислить сумму

S = + + … +

Сумму будем вычислять в переменной s, имеющей тип double. Каждое слагаемое имеет вид , где 1  in. На языке Си это выражение можно записать как 1.0 / (i * (i + 1)) или как 1.0 / i / (i + 1). В качестве числительного следует писать 1.0, а не 1, так как результат деления должен быть действительным. В цикле последовательно прибавляем к нулю все слагаемые 1.0 / i / (i + 1) для i от 1 до n.
#include

int i,n;

double s;

void main(void)

{

scanf("%d",&n);

s = 0;

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

s += 1.0 / i / (i+1);

printf("%lf\n",s);

}
Указанную сумму можно также вычислить непосредственно. Заметив, что

=

можно получить:

S = + + … + = + + . . . + = 1 –
Пример 1.1.4 [Вальядолид, 10127]. Единицы. Дано натуральное число n (0  n  10000), которое не делится ни на 2, ни на 5. Существуют числа, которые состоят только из единиц и делятся на n. Найти количество единиц в минимальном таком числе.

Пример входа

Пример выхода

3

7

9901

3

6

12

Для числа n = 3 наименьшим числом, состоящим из одних единиц и которое делится на 3, будет 111. Для n = 7 таким числом будет 111111.

Построим последовательность чисел a1 = 1, ai = (10*ai-1 + 1) mod n. ai содержит остаток от деления числа, состоящего из i единиц, на n. Как только для некоторого i значение ai станет равным 0, останавливаем итерационный процесс. Число, состоящее из i единиц, делится нацело на n.
#include

void main(void)

{

int n, one, count_ones;

for(;scanf("%d",&n) == 1;)

{

for(one = 1, count_ones = 1; one > 0; count_ones++)

one = (10 * one + 1) % n;

printf("%d\n",count_ones);

}

}
Упражнение 1.1.1. Вычислить значение произведения

* * * … *

для заданного n при помощи цикла for и непосредственно при помощи математических преобразований.
^ 1.2. ОПЕРАТОР while
В конструкции while вычисляется выражение. Если его значение отлично от нуля (истинно), то выполняется тело оператора и выражение вычисляется снова. Этот цикл продолжается до тех пор, пока значение выражения не станет нулем, после чего выполнение программы продолжается с места после тела оператора.

Синтаксис:

while (<выражение>) <тело оператора>;

Пример 1.2.1. Вычислить сумму чисел от 1 до 100.
#include

int s, i;

void main(void)

{

s = 0; i = 100;

while(i > 0)

{

s = s + i;

i--;

}

printf("%d\n",s);

}
Изначально значение суммы s положили равным нулю. В переменной i содержится очередное слагаемое, которое будет прибавляться к сумме s. Первым таким слагаемым будет i = 100. Пока выражение, заключенное в круглые скобки цикла while будет истинным, совершается тело цикла. В теле цикла к сумме s прибавляется слагаемое i и это слагаемое уменьшается на 1. Цикл закончит свое выполнение, когда слагаемое i станет равным нулю и не будет выполняться условие i > 0.
Операторы можно разделять запятой (‘,’), тогда они будут выполняться последовательно. Если два оператора в теле цикла while объединить в последовательное выполнение, то можно не брать в фигурные скобки тело цикла:
#include

int s, i;

void main(void)

{

s = 0; i = 100;

while(i > 0)

s += i, i--;

printf("%d\n",s);

}
^ Упражнение 1.2.1 [Топкодер, SRM 343, PersistentNumber]. По заданному числу х определим функцию p(x), равную произведению его цифр. Образуем последовательность x, p(x), p(p(x)), … . Стойкостью числа x назовем наименьший индекс однозначного числа в указанной последовательности. Нумерация индексов в последовательности начинается с нуля. Например, для x = 99 имеем: p(99) = 9 * 9 = 81, p(81) = 8 * 1 = 8. Стойкость числа 99 равна 2.
Класс: PersistentNumber

Метод: int getPersistence(int n)

Ограничения: 0  n  2 * 109.
^ Вход. Целое число n.
Выход. Стойкость числа n.
Пример входа

n

99

268

86898


^ Пример выхода

2

4

7
Упражнение 1.2.2 [Топкодер, TCHS 29, ReverseSums]. Для нахождения обратной суммы следует сложить заданное число с числом, цифры которого идут в обратном порядке. Например, для числа 1325 результатом будет 1325 + 5231 = 6556.

Класс: ReverseSums

Метод: int getSum(int n)

Ограничения: 1  n  99999.
^ Вход. Натуральное число n.
Выход. Сумма заданного числа с обратным.
Пример входа

n

1325

100

1


Пример выхода

6556

101

2
^ 1.3. ОПЕРАТОР do-while
Оператор цикла do-while проверяет условие окончания в конце, после каждого прохода через тело цикла; тело цикла всегда выполняется по крайней мере один раз. Сначала выполняется тело оператора, затем вычисляется выражение. Если оно истинно, то тело оператора выполняется снова и т.д. Если выражение становится ложным, цикл заканчивается.
Синтаксис:

do <тело оператора> while (<выражение>);

Тело оператора do выполняется один или несколько раз до тех пор, пока выражение <выражение> станет ложным (равным нулю). Вначале выполняется <тело оператора>, затем вычисляется <выражение>. Если выражение ложно, то оператор do завершается и управление передается следующему оператору в программе. Если выражение истинно (не равно нулю), то тело оператора выполняется снова и снова проверяется выражение. Выполнение тела оператора продолжается до тех пор, пока выражение не станет ложным.

Пример 1.3.1. Вычислить сумму чисел от 1 до 100.
#include

int s, i;

void main(void)

{

s = 0; i = 100;

do {

s = s + i;

i--;

} while(i > 0);

printf("%d\n",s);

}
В переменной s накапливается сумма, переменная i принимает все значения от 100 до 1. В теле цикла происходит прибавление значения i к сумме s и уменьшение i на 1. Цикл повторяется пока выражение (i > 0) истинно. Как только значение переменной i станет равным 0, цикл завершается и управление передается следующей команде.
Упражнение 1.3.1 [Топкодер, SRM 326, AdditionCycles]. Имеется число n в границах от 00 до 99, записанное двумя цифрами (если число меньше 10, то перед ним стоит ведущий 0). Сложим цифры числа. Припишем к правой цифре первого числа правую цифру суммы и получим новое число. Если повторять несколько раз описанную процедуру, то снова можно получить n. Например:

число

сумма цифр

конкатенация цифр

26

2 + 6 = 8

68

68

6 + 8 = 14

84

84

8 + 4 = 12

42

42

4 + 2 = 06

26

По заданному числу n следует найти количество шагов описанных преобразований, через которое можно снова получить n.
Класс: AdditionCycles

Метод: int cycleLength(int n)

Ограничения: 0  n  99.
  1   2   3

Добавить документ в свой блог или на сайт

Похожие:

1. Операторы цикла: синтаксис и семантика iconЛабораторная работа 2 Условные операторы и операторы цикла языка С++
Создать программу, которая вычисляет значения функции заданного диапазона; необходимо организовать ввод границ интервала, значения...

1. Операторы цикла: синтаксис и семантика iconЛекция 6 Операторы цикла
Формат оператора. Язык т 0 содержит три оператора, позволяющие выполнять повторяющиеся действия. Это операторы For…To…Do, While…Do...

1. Операторы цикла: синтаксис и семантика iconПрограмма на языке С# состоит из последовательности операторов, каждый...
С# состоит из последовательности операторов, каждый из которых определяет законченное описание некоторого действия и заканчивается...

1. Операторы цикла: синтаксис и семантика iconПростые операторы в Паскале. План. Операторы ввода-вывода данных....

1. Операторы цикла: синтаксис и семантика icon1. Тернарный условный оператор: синтаксис, семантика, примеры
Если истинно, то оператор возвращает значение, которое возвращает, иначе возвращается значение выражения

1. Операторы цикла: синтаксис и семантика iconСтатья организована следующим образом. В разд. 1 описаны синтаксис...
...

1. Операторы цикла: синтаксис и семантика iconСтатья организована следующим образом. В разд. 1 описаны синтаксис...
...

1. Операторы цикла: синтаксис и семантика iconУрок №5 Операторы. Пустой оператор. Составной оператор Урок №6 Оператор...
Урок №13 Особенности использование массивов и указателей в программе. Ввод-вывод данных с помощью указателей

1. Операторы цикла: синтаксис и семантика iconОсновные операторы cSmarty
Субд odb. В основе языка лежит синтаксис паскаля и freepascal с вставками html кода. В шаблонах по умолчанию идет html код, программный...

1. Операторы цикла: синтаксис и семантика iconЛабораторная работа №3
Научиться составлять программы, используя операторы цикла. Научиться оформлять циклические схемы алгоритма

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<