Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги / 277.pdf
Скачиваний:
12
Добавлен:
07.06.2023
Размер:
1.06 Mб
Скачать

{

int month;

printf ( «Введите число - номеp месяца:» ); scanf ( «%d»,&month);

switch (month) {case 12:

case 1:

case 2: printf (« %d- зимний месяц»,month); break; case 3:

case 4:

case 5: printf ("%d - весенний месяц»,month); break; case 6:

case 7:

case 8: printf ("%d - летний месяц»,month);break; case 9:

case 10:

case 11: printf ("%d - осенний месяц»,month);break; default: printf ("Пpо это мне неизвестно!");

}

getch ();

}

Циклические программы

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

Пусть необходимо протабулировать функцию F(x) на интервале [a,b] c шагом h (где, F(x)=x sin(x), a<b, h>0) и вывести полученные значения функции и аргумента.

Протабулировать функцию - значит вычислить значения функции F(x) на отрезке [a,b] в точках a, a+h, a+2h и т.д. Графическая схема алгоритма приведена на рис.17, программа - в примере pr12.

71

Рис. 24

//Пример pr12 #include <stdio.h> #include <conio.h> #include <math.h> void main ()

{

float x, y, a, b, h; printf("\nВведите a,b,h:"); scanf("%f%f%f»,&a,&b,&h); x=a;

do

{

y=x*sin(x);

printf("\nx=%7.2f,y=%7.2f»,x,y);

x=x+h;

}

72

while (x<=b); getch();

}

В этой программе оператор цикла используется для многократного выполнения группы операторов, расположенных между словами do while. Каждый раз в цикле вычисляется значение y, выводятся x и y, задается новое значение х и проверяется, не выходит ли значение х за пределы интервала. В результате работы этой программы будут напечатаны в два столбика значения x и y.

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

В вышеприведенном примере был использован оператор цикла с постусловием. Синтаксис этого оператора следующий:

do <оператор> while(<условие>)

Здесь do ,while - ключевые слова (перев. с англ.: выполнять и пока); <оператор> - любой оператор языка С++, в том числе и составной

(его называют телом цикла); <условие> - условное выражение типа сравнения, используемое для

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

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

73

//Пример pr13 #include <stdio.h> #include <conio.h> void main()

{

int i; i=1; do

{

printf("\n%d»,i);

i=i+2;

}

while (i<=10); getch();

}

Рис. 25

Проиллюстрируем использование оператора цикла с постусловием на примере, в котором выводятся нечетные числа, меньшие 10. Схема алгоритма приведена на рис.18, программа в примере - pr13.

В результате работы этой программы будут напечатаны в столбик все нечетные числа от 1 до 9.

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

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

while (<условие>) <оператор>;

Здесь while - ключевое слово (перев. с англ.: пока);

<оператор> - любой оператор языка C++, в том числе и составной (этот оператор называют телом цикла);

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

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

74

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

i=1;

while(i<5) printf("Доброе утро!");

Чтобы получить работающий фрагмент программы, добавим в тело цикла оператор, увеличивающий значение i:

i=1;

while (i<5)

{ printf("Доброе утро!"); i=i+1;

}

Проиллюстрируем использование оператора цикла с предусловием на примере pr14, в котором находится среднее арифметическое последовательности чисел (схема алгоритма приведена на рис. 19). Последовательность чисел вводится с клавиатуры и завершается стопкодом. Использование стоп-кода в данном случае состоит в том, что какоето числовое значение заведомо исключается из входной последовательности и используется как стоп-код. Если заранее известно, что число -1 никогда не появится в последовательности, то это число можно использовать для указания ее конца.

75

Рис. 26

//Пример pr14 #include <stdio.h> #include <conio.h> void main ()

{

float number, //Вводимое число sum=0; //Сумма вводимых чисел

int c = 0; //Количество вводимых чисел const float stopcod = -1;

printf ("Введите пеpвое число последовательности:"); scanf ( «%f», &number );

while ( number != stopcod )

{

76

sum = sum+number; c=c+1;

printf( «Введите cледующее число последовательности:» ); scanf ( «%f», &number );

}

if (c == 0) printf ("Сpеднее значение pавно нулю"); else printf ("Сpеднее значение pавно = %f», sum/c); getch ();

}

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

В следующем примере вычисляется сумма ряда с точностью е: s=1+1/2+1/3+1/4+ ... .

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

Рис. 27

77

Соседние файлы в папке книги