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