Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DOROGOVA.pdf
Скачиваний:
245
Добавлен:
05.06.2015
Размер:
853.4 Кб
Скачать

Пример: Написать программу, которая вычисляет стоимость междугородного телефонного разговора. Исходными данными для программы являются код города, тариф звонка и длительность разговора. Ниже в таблице 4.1. приведены коды некоторых.

Таблица 4.1

 

 

 

 

 

 

 

 

 

 

Город

 

Код

 

 

Цена минуты (руб.)

 

 

 

 

 

 

 

 

 

Владивосток

 

423

 

 

2,2

 

 

 

 

 

 

 

 

 

Москва

 

095

 

 

1,0

 

 

 

 

 

 

 

 

 

Мурманск

 

815

 

 

1,2

 

 

 

 

 

 

 

 

 

Самара

 

846

 

 

1,4

 

 

 

 

 

 

 

 

#include <stdio.h>

 

 

 

 

 

 

#include <conio.h>

 

 

 

 

 

 

void main()

 

 

 

 

 

{

 

 

 

 

 

 

int kod;

// код города

 

 

 

 

 

float cena;

// цена минуты

 

 

 

 

 

int dlit;

// длительность разговора

 

 

 

 

 

float suram; // стоимость разговора

 

 

 

 

 

printf("Введите исходные данные:\n");

 

 

 

 

 

printf("Длительность разговора ->"),

 

 

 

 

 

scanf("%i", &dlit);

 

 

 

 

 

printf("Код города:");

 

 

 

 

 

printf("Владивосток\t432");

 

 

 

 

 

printf("MocKBa\t\t095");

 

 

 

 

 

printf("MypMaнск\t815");

 

 

 

 

 

printf("Caмapa\t\t846");

 

 

 

 

 

printf("\n->");

 

 

 

 

 

 

scanf("%i", &kod);

 

 

 

 

 

printf("Город: ");

 

 

 

 

 

switch (kod)

 

 

 

 

 

 

{

 

 

 

 

 

 

 

case 432:

printf("Владивосток"); cena = 2.2; break;

 

case 95: printf("Москва"); cena = 1; break;

 

 

 

 

 

case 815:

printf("Мурманск"); cena = 1.2; break;

 

case 846:

printf("Самара"); cena = 1.4; break; default:

printf("неверно введен код.");

 

 

cena = 0;

 

 

 

 

 

}

if (cena != 0}

{

suram = cena * dlit;

printf("Цена минуты: %i руб.\n", cena); printf("Стоимость разговора: %3.2f руб.\n", suram); } printf("\nДпя завершения нажмите <Enter>");

}

4.6. Циклы

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

В общем случае можно организовать повтор выполнения участка программы с помощью оператора goto (безусловный переход на метку), а условие выхода из цикла с помощью оператора if.

Пример: Ввод чисел с клавиатуры и их суммирование до тех пор пока сумма не превысит 100. #include <stdio.h>

void main() { int x,s=0;

M:if (s<100)

{printf("x=");

scanf("%d",&x);

s=s+x;

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

goto M;//переход на следующий проход цикла

}

 

else goto K;

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

K: printf(("s=%d", s);

 

}

 

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

В языках С/С++ таких циклов три это операторы while, do-while и for. Кроме того, специально для расширения возможностей этих трех операторов, в языке предусмотрены еще два оператора continue и break (с оператором break мы уже познакомились, рассматривая возможности оператора switch, по сути в обоих случаях он делает одно и то же).

4.6.1. Цикл с предусловием while

Цикл while используется в том случае, когда не известно точное число повторов (итераций). Оператор цикла с предусловиемпредставлен на рис. 4.4. и имеет вид:

while (выражение) оператор

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

Схема выполнения оператора while следующая:

1.Вычисляется выражение.

2.Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.

3.Процесс повторяется с пункта 1.

Важно отметить, что выражение вычисляется до начала и после каждого прогона цикла. Цикл не выполняется ни разу, если выражение ложно (равно 0).

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

Пример: вычисление суммы чисел от 0 до 9 #include <stdio.h>

void main()

 

Рис. 4.4. Схема цикла с предусловием

{

 

int i=0, sum=0;

 

while (i++ < 10)

// условие выполнения тела цикла

{

 

printf("Значение counter\n");

sum += i;

//аналог: sum= sum + i

}

// конец тела цикла

printf("Значение суммы=%d\n",sum);

}

В выражении (i++ < 10) сначала выполняется операция инкремент i++, а затем проверка i< 10. С помощью оператора while легко организовать бесконечный цикл.

Пример: Бесконечный цикл. while (1)

{операторы цикла

break;

...

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

}

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

4.6.2. Цикл с постусловием do-while

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

Вид оператора:

do оператор while (выражение)

Рис. 4.5. Схема цикла с постусловием

Схема выполнения оператора do…while:

1.Выполняется тело цикла (которое может быть составным оператором).

2.Вычисляется выражение.

3.Если выражение ложно, то выполнение оператора do…while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Пример: Вывести на экран числа от 0 до 10.

int x=0; do

{ printf("%d\n",x); x++;

} while (x<10); printf("Вывод закончен!");

Пример: Вводить данные с клавиатуры пока их значения лежат в диапазоне от 10 до 150.

int input=0, minvalue=10, maxvalue=150;

do

{ printf("Введите значение input \n"); scanf("%d",&input);

}

while ( input < minvalue || input > maxvalue ); ….

4.6.3. Пошаговый цикл. Оператор for

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

Пошаговый цикл имеет следующий вид:

for ( выражение 1 ; выражение 2 ; выражение 3 ) тело цикла

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

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

Выражение 2 определяет условие, при котором тело цикла будет выполняться.

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

Схема выполнения оператора for представлена на рис. 4.6., последовательность действий такова:

1.Вычисляется выражение 1 (один раз перед входом в цикл).

2.Вычисляется выражение 2 (перед каждым проходом цикла).

3.Если значения выражения 2 – TRUE (отлично от нуля), то выполняется тело цикла, иначе (если выражение FASLE) – цикл прекращается и управление передается оператору, следующему за оператором for.

4.Вычисляется выражение 3 (модификация данных после каждой итерации цикла), осуществляется переход к пункту 2.

Существенно то, что проверка условия выполняется в начале цикла, это значит, что тело цикла может ни разу не выполниться (если выражение ложно).

Рис. 4.6. Схема пошагового цикла

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

Пример: Из бесконечного цикла можно выйти с помощью оператора break. for ( ; ; )

{ . . .

break;

. . .

}

Пример: вычислить сумму квадратов целых чисел от 1 до 20. main()

{int n=20, s=0;

for ( int i = 1; i <= n; i++ ) s += i*i; printf("\ns=%d",s);

}

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

i=1

инициализация переменной i путем присваивания ей начального значения;

i <= n

задает условие повтора цикла до тех пор, пока значение переменной i остается меньше

или равно n;

 

i++

приращение значения переменной i после каждого повтора цикла.

Тело цикла состоит из одного простого оператора: s += i*i. Пока i <= n происходит накопление суммы в переменной s. После выхода из цикла переменная s выводится на экран дисплея.

Та же задача, выполненная с помощью оператора while

int n=20, s=0; while(i <= n)

{s += i*i; i++;

}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]