Бочаров презентации 1 семестр / Tech_Progr_PPT_2p_2016
.pdfУправляющие операторы
(продолжение)
Текст программы деления. Цикл с предусловием. Вариант 1
#include <stdio.h> int main(void)
{
int a=1,b=0; // инициализировали нулем, чтобы войти в цикл! double c;
while(b == 0)
{
printf("Enter two integer numbers: "); scanf("%d%d", &a, &b);
if (b==0)printf("\nError: division by zero. Try again\n\n");
}
c = (float) a/b;
printf("\nThe result = %10.3f\n\n", c); return 0;
}
21 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Текст программы деления. Цикл с предусловием. Вариант 2
#include <stdio.h> int main(void)
{
int a,b; // инициализация не является необходимой double c;
printf("Enter two integer numbers: "); scanf("%d%d", &a, &b);
while(b == 0)
{
printf("\nError: division by zero. Try again\n\n"); printf("Enter two integer numbers: "); scanf("%d%d", &a, &b);
}
c = (float) a/b;
printf("\nThe result = %10.3f\n\n", c); return 0;
}
22 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Оператор цикла с параметром
Он очень похож на цикл for в других языках программирования, но более гибкий и универсальный. Применяется обычно, когда для выполнения операторов в теле цикла задано точное число повторений. Для подсчета числа повторений используется счетчик на основе специальной переменной – параметра цикла. Цикл завершается, когда содержимое счетчика становится равным заданному значению. Однако, есть средства досрочного прекращения цикла или досрочного перехода к его началу.
В самом общем виде синтаксис следующий:
for (выражение1; выражение2; выражение3) оператор;
Чаще всего применяется в такой форме:
for (инициализация параметра; проверка условия; изменение параметра) оператор;
23 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Обычно инициализация используется для присвоения начального значения параметру цикла. Проверка условия это условное выражение, которое определяет, когда цикл должен быть завершен. Проверка выполняется в начале, т.е. это цикл с предусловием. Вхождение в цикл происходит только при выполнении условия. Если результат проверки оказывается истинным, т.е. условие выполняется, то осуществляется вход в цикл, переход к его началу. После завершения всех действий в теле цикла осуществляется переход назад к проверке условия. Если условие не выполняется, то осуществляется переход вперед – к оператору, следующему за циклом, как в цикле while. Изменение параметра это выражение, которое показывает, с каким приращением или убавлением изменяется параметр цикла после завершения каждой итерации,
т.е.каждого прохода цикла. Простейший пример:
for (int i=0; i<10; i++) printf("%d",i);putchar('\n'); for (int i=9; i>=0; i--) printf("%d",i);putchar('\n');
Печать чисел от 0 до 9 и от 9 до 0 в двух строках.
24 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Переменная цикла может быть не только числом, но также, например, символом:
for (ch='A'; ch<='Z'; ch++) printf("%c\n",ch);
/* вывод в столбик заглавных латинских букв в алфавитном порядке */
Цикл может быть бесконечным – из-за ошибки в алгоритме или если это специально предусмотрено. Например, именно таким образом часто реализуется главная функция в программе. Примеры:
for (k=1; k>0; k++) printf(”Infinite loop!”); for (j=1; 1; j++) printf(”Infinite loop!”);
for (; ;) printf(”Infinite loop!”);
Для прекращения выполнения цикла используется оператор break
25 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Когда в теле цикла встречается оператор break, то его выполнение прекращается, а управление передается на оператор, следующий за концом цикла.
Оператор continue также вызывает изменение штатной последовательности выполнения цикла. Когда он встречается в теле цикла, управление передается на начало следующей итерации цикла – в ту точку программы, где происходит изменение параметра цикла.
Операторы break и continue могут использоваться также в циклах с предусловием и с постусловием. Первый из них вызывает досрочное прекращение цикла, а второй – прерывание текущей итерации и передачу управления на проверку условия для следующей итерации. Пример:
for (;;)
{
ch=getchar();
if ((ch=='z') || (ch=='Z')) break; printf("%c", ch);
}//эхо-печать введенных символов до ввода ’z’ или ’Z’
26 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Есть также оператор передачи управления goto. Управление передается в точку программы, где установлена метка (label). Метка это идентификатор, после которого стоит двоеточие.
В соответствии с общепринятой сейчас парадигмой (системой взглядов, концепцией) структурного программирования хорошим стилем считается исключение из программ оператора goto или использование его лишь в случаях самой крайней необходимости, а также максимальное ограничение в использовании т.н. неструктурных операторов break и continue.
Это делается для получения понятного для чтения и удобного для отладки кода программы, в котором каждый блок имеет только один вход и один выход, оператор цикла с параметром управляется только счетчиком.
Категорически запрещается, хотя это и допускается синтаксисом языка Си, менять значение параметра цикла внутри тела цикла, поскольку это ведет к совершенно непредсказуемым результатам при работе программы. Параметр цикла должен изменяться только так, как указано в заголовке оператора цикла.
27 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Оператор множественного выбора служит эквивалентом сложного условного оператора:
if <…> else if <…> else if <…> else if <…> и т.д.
Его синтаксис следующий: switch (выражение)
{
case константа1: операторы;
break; // break не является обязательным case константа1: операторы;
break; // break не является обязательным case константа1: операторы;
break; // break не является обязательным и т.д.
default: операторы; // default не является обязательным
}
28 |
Технология и языки программрования |
Управляющие операторы
(продолжение)
Пример: при вводе строчных букв a, b, c выводятся соответствующие им прописные буквы. При вводе других символов выдается сообщение об ошибке.
char ch; ch=getchar();
switch (ch)
{
case 'a': printf("A\n"); break;
case 'b': printf("B\n"); break;
case 'c': printf("C\n"); break;
default: printf("You must enter only a, b or c!\n");
}
29 |
Технология и языки программрования |