Простые и составные операторы Если ветвь условной конструкции или тело цикла содержит несколько операторов, то они объединяются в составной оператор при помощи “{“ и “}”. Begin в Паскале соответствует “{“ в Си, End - “}”.
Cлайд 2
Пример. Нахождение суммы первых 20 натуральных чисел и вывод сумм на экран. #include #include using namespace std; int main() {int sum=0; //сумма int c=0; //счетчик while (c++
Cлайд 3
Условная конструкция. Различают три формы условной конструкции : простейшая (в Паскале - if … then… ); расширенная (в Паскале - if … then … else … ); выбор (в Паскале - case … of… ).
Cлайд 4
Простейшая условная конструкция. Псевдокод : если то все Си if () В отличие от Паскаля выражение может иметь любой тип. 0, ‘\0’ и NULL считаются ложью, остальные значения - истиной.
Cлайд 5
Расширенная условная конструкция Псевдокод : если то иначе все Си if() else
Cлайд 6
Примеры. if(a>b&&b>c) f=x*x-1; else f=x+1; ‘;’ перед else является частью оператора присваивания в ветви if. if(x>5||x
Cлайд 7
Отличия от Паскаля: 1. Выражение обязательно заключается в скобки. 2. ”;” ставится перед else, если только нет составного оператора. (“;”- часть ). 3. Другой приоритет вычисления логического выражения - сначала операции отношения - затем логические операции !, &&, || (не, и, или). Приоритет операций отношения меньше, чем у операций “+” и “-” и больше, чем у операции присваивания: х>у+2 то же, что и х>(у+2).
Cлайд 8
Допускается вложенность операторов if. Если нет составного оператора, else относится к ближайшему if. Рассмотрим пример. if (number>6) if (number
Cлайд 9
Если необходимо, чтобы else соответствовал первому if, добавим { }. Рассмотрим пример. if (number>6) { if (number
Cлайд 10
Операция условия - сокращённый способ записи if- else (тернарная). В общем виде условное выражение записывается следующим образом: Например: x=(y
Cлайд 11
Множественный выбор: switch и break switch () /*выражение может быть типа int или char*/ { case : //операторы могут отсутствовать case : //константы типа int или char … default: //ветвь не обязательна } Если значение выражения совпадает с одной из констант, выполняются операторы, расположенные после соответствующей константы. Если подходящей метки не найдется, то, если существует строка с меткой "default", будет выполняться оператор, помеченный этой меткой. В противном случае произойдет переход к оператору, расположенно-му за оператором switch.
Cлайд 12
В каждой последовательности операторов последним должен быть оператор break. Выполнение оператора break осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии оператора break будут выполнены все операторы, начиная с помеченного данной меткой и заканчивая оператором default. char ch='1'; switch (ch) { case '1': printf ("один\n"); case '2': printf ("два \n"); default : printf ("три \n"); } один два три
Cлайд 13
В качестве меток-констант используются выражения типа int или char. В качестве метки запрещается использовать переменную. Можно пометить оператор несколькими метками одновременно. Например, case 'E': case 'е': printf ("ель\n"); break;
Cлайд 14
Пример. Игра в города #include #include using namespace std; int main() {setlocale(LC_ALL, "RUS"); char ch; printf (“Введите букву а, б или в. \n"); printf ("Я назову город на эту букву\n"); scanf("%c", &ch); switch (ch) {case 'a': printf ("\n Ашхабад"); break; case ‘б': printf ("\n Белгород"); break; case 'в': printf ("\n Воронеж"); break; default: printf ("\n неизвестная буква"); break; } return 0; }
Cлайд 15
Правила выбора условных операторов Выбор из двух возможностей - выполнить оператор или пропустить его - оператор if. Выбор одного из двух вариантов - if...else. Выбор одного из нескольких - else-if, switch. Если выбор вариантов основывается на вычислении значения переменной или выражения типа float, то switch применить нельзя. Если значения переменной попадают в некоторый диапазон, использовать switch неудобно. Лучше записать: if (i 2).
Cлайд 16
Циклы Существует три базовых структуры цикла: цикл-пока (с предусловием) (в Паскале - while … do…); цикл-до (с постусловием) (в Паскале – repeat …until …); цикл от … до (со счетчиком) (в Паскале - for … to/downto do …).
Cлайд 17
Цикл-пока (while) Псевдокод цикл-пока кц Си while () , где - любого типа. Пока значение выражения отлично от 0 (т.е.истинно), повторяется выполнение операторов в теле цикла. Оператор может быть простым или составным. while является циклом с предусловием, поэтому возможно, что он не выполнится ни разу.
Cлайд 18
Пример 1. Напечатать целые числа от 1 до 100 и их квадраты. /*Здесь и в следующих примерах пропущены операторы #include #include using namespace std; */ int main() { setlocale(LC_ALL,"RUS"); int n=0; printf("число квадрат"); while(n++
Cлайд 19
Пример 2. Сколько членов гармонического ряда S=1+1/2+1/3+...+1/n надо взять, чтобы получить сумму, большую числа dano? int main() { int i=0; float dano, S=0.0; printf ("введите число"); scanf("%f",&dano); while (dano
Cлайд 20
Цикл for Псевдокод цикл от i:= до [ шаг ] кц Си for (; ; )
Cлайд 21
,где – инициализирующее: вычисляется один раз до начала цикла; – проверяемое: вычисляется перед каждым выполнением оператора. Тело цикла выполняется, если значение проверяемого выражения истина (или не равно нулю); – корректирующее: вычисляется после каждого выполнения тела цикла. Перед первым выполнением цикла проверяется , т.е. тело цикла может не выполниться ни разу! Любое выражение, а также оператор может отсутствовать, но точка с запятой сохраняется.
Пример 1. Найти сумму n членов гармонического ряда S=1+1/2+1/3+...+1/n. Операция «запятая» связывает два выражения в одно и гарантирует, что самое левое будет вычисляться первым. Обычно используется для включения дополнительной информации в спецификацию цикла for, например: , < выражение 2> Значением всего выражения является значение . a) s=0.0; for(i=1;i
Cлайд 24
Пример 2. Найти минимальное n, при котором S=1+1/2+1/3+...+1/n > dano. for (n=0, S=0.0; S
Cлайд 25
Пример 3. Счет в порядке убывания for(n=10;n>0;n--) printf ("%d секунд !\n", n); printf("пуск!\n"); Можно использовать любое значение шага цикла, например: for(n=2; n
Cлайд 26
Пример 4. Переменная цикла может быть не только числом, но и символом. for(ch='a';ch
Cлайд 27
Следующие записи эквивалентны: while () и for (; ;) Применение операторов for или while -дело вкуса. Цикл for предпочтительнее, когда в цикле используется инициализация и коррекция переменной, в остальных случаях лучше использовать while. Возможно изменение параметров, входящих в проверяемое и корректирующее выражения, в теле цикла.
Cлайд 28
Пример 6. Вложенные циклы. Вычислить все совершенные числа, меньшие или равные заданному числу smax. Совершенное число равно сумме своих делителей, исключая делитель, равный самому числу. 6=1+2+3.
Cлайд 29
int main() {int n, sum, del, smax; printf ("введите предел"); scanf ("%d", &smax); printf ("совершенное число\n"); for(n=6; n
Cлайд 30
Цикл с постусловием do…while Псевдокод цикл до кц Си do while() Тело цикла всегда выполняется хотя бы один раз. Выполнение цикла продолжается до тех пор, пока выражение не станет ложным (равным 0). В Паскале - наоборот, цикл продолжается пока выражение не станет истинным.
Cлайд 31
Пример.Найти минимальное число членов гармонического ряда с S > dano i = 0; S=0.0; do S+=1.0/(float)++i; while (S< = dano); При помощи этого цикла можно организовать ввод данных с проверкой их правильности, например. do { printf ("введите положительное число"); scanf("%f”, &dano); } while (dano < =0);
Cлайд 32
Управляющие операторы break, continue, goto По возможности следует избегать их использования. Все эти операторы предназначены для безусловного перехода. Частое применение этих операторов - признак низкой квалификации программиста и слабого владения структурным программированием.
Cлайд 33
break - выход из ближайшего цикла любого вида или switch и переход к следующему оператору программы. do {… for(...) {… while( … ) { … if (…) break; /*выход из цикла while*/ … } if(…) break; /*выход из цикла for*/ … } ; if (…) break; /*выход из цикла do while*/ … } while(…);
Cлайд 34
continue - окончание текущей итерации данного цикла. В циклах while и do … while происходит переход к проверке условия продолжения цикла. В цикле for – переход к вычислению корректирующего выражения, а затем к проверке. for (; < выражение2>; ) { while(…) {… continue; … } … continue; }
Cлайд 35
Оператор goto goto метка; Метка должна быть идентификатором, например: goto m1; Допускается использовать в одном случае - выход из вложенного набора циклов при обнаружении каких-либо ошибок. for (…) for (…) for (…) { if () goto Code; } … Code: