Рабочие листы
к вашим урокам
Скачать
1 слайд
Управление
Выражения – вычисление значений
Операторы – последовательность изменений состояния памяти
Процедуры и функции – подпрограммы, рекурсия
Обработка исключительных ситуаций – восстановление после ошибок
2 слайд
Выражения
Выражения строятся из
имён переменных
литеральных значений и имён констант
применения операций
разыменования, взятия адреса, выборки компонент массивов и структур
явного приведения типа и вычисления размера типа
вызова функций и процедур
группирования вычислений скобками
условного и последовательного выражений
3 слайд
Выражения
4 слайд
Выражения – приоритет операций
5 слайд
Выражения – приоритет операций (пример)
x = (*a[i+1].b + c * 2) & ( (x&y|07) << 3)
[] и . сильнее, чем *
* сильнее, чем +
& сильнее, чем |
<< сильнее, чем |
& сильнее, чем =
Пусть int a = 30000; тогда
((long) a * a) равно 60000
(long) (a * a) – переполнение
(long) сильнее *
Cкобки (в умеренном количестве) облегчают понимание
6 слайд
Условные выражения
Условное
Вычисляется только одна из ветвей
i < 0 || i>=N ? 0 : A[i]
Тип – минимальный больший типов ветвей
Логические связки (John McCarthy)
A && Bэквивалентно (A ? B : 0)
A || B эквивалентно (A ? 1 : B)
Пример: i < N && A[i] != 0
сравнить i<N AND A[i] <> 0 (Pascal)
Пример: A[i] > max && A[i]=max эквивалентно
if (A[i] > max) A[i]=max;
7 слайд
Последовательное выражение
Осмысленно только для выражений с побочным эффектом
Результат – значение последнего выражения
Пример:
c = (a=3, b=2+a, a+b)
A[i,j] = i+j эквивалентно A[j] = i+j
8 слайд
Операторы
Синтаксис:
; - пустой, ничего не делать
выр; - вычислить выражение и забыть.
9 слайд
Операторы - пример
y = (x = 1)+1;
loop:
x += 2;
goto swap;
y = y++ + ++x;
swap:
{ int t;
t = x, x=y, y=x;
goto loop;
}
x = 0;
«Спагетти» код.
Область видимости метки - по тем же правилам, что и для других объектов (?)
Переменная t доступна только внутри блока
В программе может быть недоступный код
goto следует использовать только в крайних случаях.
10 слайд
Ветвления&C°
Выбор одной из ветвей в зависимости от значения выражения (условия)
Синтаксис:
11 слайд
Условный
Синтаксис:
Пример:
if (‘a’ <= с && c<=‘z’
|| ‘а’ <= c && c<=‘п’)
с -= 0x20;
else if (‘р’ <= c && c<=‘я’)
c -= 0x50;
If “a” <= с And c<=“z” _
Or “а” <= c And c<=“п” Then
с = Chr(Asc(c)-&H20)
ElseIf “р” <= c And c<=“я” Then
c = Chr(Asc(c)-&H50)
End If
VB:
C:
12 слайд
Условный оператор или условное выражение?
Сравнить
if (‘a’ <= с && c<=‘z’
|| ‘а’ <= c && c<=‘п’)
с -= 0x20;
else if (‘р’ <= c && c<=‘я’)
c -= 0x50;
с = (‘a’ <= с && c<=‘z’
|| ‘а’ <= c && c<=‘п’
? с - 0x20
: ‘р’ <=c && c<=‘я’
? c - 0x50
: c);
Операторы внутри выражений (Algol-68)
(вещ s:=0; для i = 1 до N цк s+:= A[i] кц; s)
13 слайд
Условный оператор или условное выражение?
Сравнить
if (x>0)
if (y>0)
*p ++;
else
*p --;
else
if (y>0)
*q ++;
else
*q --;
*(x>0 ? p : q) +=
(y>0 ? 1 : -1)
Условный оператор не вычисляет значения (а в Algol-68, Автокоде Эльбрус – вычисляет).
14 слайд
Арифметический условный
(FORTRAN)
L = 0, R = N-1, found = 0;
Loop:
if (L<=R)
{
i = (L+R) / 2;
if (A[i] == x)
{
found = 1;
goto Done;
}
else if (A[i] < x)
R = i-1;
else
L = I +1;
goto Loop;
}
Done:
L = 0
R = N-1
FOUND = 0
100 IF (L-R) 101,101, 200
101 I = (L+R) / 2
IF (A(I) – X) 102, 103, 104
102 R = I - 1
GO TO 100
103 L = I + 1
GO TO 100
104 FOUND = 1
200
C:
15 слайд
Переключатель
Синтаксис:
Семантика:
Переход на метку case, соответствующую значению выбирающего выражения
При отсутствии таковой – переход на метку default
При отсутствии как нужного case, так и default – переход на конец переключателя
break; - переход на конец переключателя.
выход:
16 слайд
Переключатель – пример (С)
switch (x % 6)
{
case 0 :
case 2:
x += 2;
default :
x += 1;
break;
case 1 :
x = 0;
break;
}
int t = x % 6;
if (t==0) goto L0
if (t==1) goto L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault :x += 1;
goto Ldone;
L1 :x = 0;
goto Ldone;
Ldone:
17 слайд
Переключатель – пример (С)
x%6 вычисляется один раз;
Выбор метки можно реализовать эффективнее (таблица, дихотомия,…)
«Провал» после x+= 2; - важен порядок ветвей
Значения case - константы
int t = x % 6;
if (t==0) goto L0
if (t==1) goto L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault :x += 1;
goto Ldone;
L1 :x = 0;
Ldone:
18 слайд
Переключатель – пример (Pascal)
case x mod 6 of
0, 2: begin
x := x+2;
x := x+1;
end;
1 : x := x+1;
else
x := 0;
end
switch (x % 6)
{
case 0 :
case 2:
x += 2;
default :
x += 1;
break;
case 1 :
x = 0;
break;
}
19 слайд
Переключатель – пример (Pascal)
case ch of
'A'..'Z', 'a'..'z' :
WriteLn('Буква');
'0'..'9' :
WriteLn('Цифра');
'+', '-', '*', '/' :
WriteLn('Оператор');
else
WriteLn('Спецсимвол')
end
Интервалы значений в альтернативых:
Наглядность
Возможность транслятору эффективно реализовать переход
20 слайд
Переключатель – пример
(Visual Basic)
Select Case True
Case n = AscW("<")
t = t & "<"
Case n = AscW(">")
t = t & ">"
Case n = AscW("&")
t = t & "&"
Case n = AscW("'")
t = t & "'"
Case n = AscW("""")
t = t & """
Case n > 254, n < 0
t = t & "&#x"
& Hex(n And &HFFFF) & ";"
Case Else
t = t & Chr(n)
End Select
Выражения в Case – не обязательно константы
Последовательный выбор альтернативы
Полностью эквивалентно If … ElseIf… Else … End If
21 слайд
Переключатель – пример (Fortran)
(CONTINUE – пустой оператор)
int t = x % 6;
if (t==0) goto L0
if (t==1) goto L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault :x += 1;
goto Ldone;
L1 :x = 0;
Ldone:
t = X – (X/6)*6 +1
GOTO (0,1,2,3,3,3) t
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
X = 0
100
22 слайд
Вычисляемые метки (Fortran)
0,1,2,4,100 – метки
0,1,2,6 - константы
t = X – (X/6)*6 +1
GOTO (0,1,2,3,3,3) t
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
X = 0
100
t = X – (X/6)*6
ASSIGN 3 TO L
IF (t .EQ.0) ASSIGN 0 TO L
IF (t .EQ.1) ASSIGN 1 TO L
IF (t .EQ.2) ASSIGN 2 TO L
GOTO L, (0,1,2,3)
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
1 X = 0
100
23 слайд
Циклы & C°
Синтаксис:
24 слайд
Базовая форма цикла
for (;;)
{
…
break;
…
continue;
…
}
Loop:
{
…
goto Done;
…
goto Loop;
…
goto Loop;
}
Done:
25 слайд
Цикл for
for (Init-expr;
Test;
Reinit-expr)
{
…
}
Init-expr;
for (;;)
{
if (! Test)
break;
…
Reinit-expr;
}
26 слайд
Циклы while и do…while
while (Test)
{
…
}
for (;Test;)
{
…
}
do
{
…
} while (Test);
for (;;)
{
…
if (!Test) break;
}
27 слайд
Другие формы цикла
28 слайд
Циклы - SETL
for (int n=2; n<=maxN; n++)
{
int test = 0, m;
for (test=0, m=2; m<=n-1 && (test=n % m); m++);
if (test)
printf(“%d “, n);
}
print({n in {2..N} |
forall m in {2..n - 1} | n mod m > 0});
29 слайд
Переменная цикла
Pascal – значение переменной после выполнения цикла неопределено:
for i:=1 to N do
if A[i] = 0 then break;
WriteLn(i);
Algol-68 – переменная цикла является константой в теле цикла
for i from 1 to N do
if A[i] = 0 then i:=N+1 fi
od
С – допускается определение переменной в заголовке цикла
for (int i=0; i<N; i++) printf(“%d\n”,i+=2);
30 слайд
Границы цикла
Алгол-68, Visual Basic – вычисляются один раз
C – вычисляется каждый раз, поскольку понятия «границы цикла» нет
int L = strlen(s), i;
char * p = s;
for (i=0,p=s; i<L; p++)
*p == ‘a’ ? (strcpy(p,p+1), L--) : i++;
31 слайд
Помеченные циклы
Проблема: break и continue действует на ближайший охватывающий цикл или переключатель
Пример: первая строка матрицы с нулевым элементом
for (i=0; i<n; i++)
for (j=0; j<N; j++)
if (A[i][j] == 0)
break;
for (i=0; i<n; i++)
for (j=0; j<N; j++)
if (A[i][j] == 0)
goto done;
done:
for (i=0; i<n; i++)
{
found = 0;
for (j=0; j<N; j++)
if (A[i][j] == 0)
{
found = 1;
break;
}
if (found) break;
}
iloop:
for (i=0; i<n; i++)
for (j=0; j<N; j++)
if (A[i][j] == 0)
break iloop;
Java:
Неправильно:
Рабочие листы
к вашим урокам
Скачать
6 663 436 материалов в базе
Настоящий материал опубликован пользователем Бубело Татьяна Андреевна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс профессиональной переподготовки
300/600 ч.
Курс повышения квалификации
36 ч. — 144 ч.
Курс повышения квалификации
72 ч. — 180 ч.
Мини-курс
6 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.