Лекция 1

Правила оформления программ на Си/Си++.
Операции и основные типы данных.

Лекция 2

Операторы


Лекция 3

Использование библиотечных процедур СИ

 

Лекция 10

Директивы препроцессора

Лекция 11

Видимость и время жизни переменных

Лекция 12

Дополнительные возможности Си++


Лекция 13

Объектно-ориентированное программирование

 

 

главная

Лекция

Лекция №2

Тема: Операторы


Содержание:

Контрольные вопросы

Операторы

Простейшим оператором является оператор присваивания:
double x; int y; x=y; int fl=0, cfl=1;
#define MASK 0xfff
n=MASK;
j=i++;sum+=a[i]; q=(р==0)?(р+=1):(р+=2); l=b!!c;
d=0; a=b++=c++=d++; // значение а непредсказуемо

Обращения к функциям, вложенные операции присваивания, операции увеличения и уменьшения приводят к так называемым "побочным эффектам" - некоторые переменные изменяются в результате вычисления выражений. В любом выражении, в котором возникают побочные эффекты, могут существовать очень тонкие зависимости от порядка, в котором определяются входящие в него переменные. Примером типичной неудачной ситуации является оператор A[I] = I++; Возникает вопрос, старое или новое значение I служит в качестве индекса. Компилятор может поступать разными способами и в зависимости от своей интерпретации выдавать разные результаты.
Оператор if else организует ветвление в программе:

if (условие) оператор 1; else оператор 2;

Если условие истинно, то выполняется оператор 1, иначе - оператор 2. Оператор if else допускает любое число вложений, но проверка прекращается, если встречается истинное условие. Else - условие может опускаться.

if (num!=0 && 12/num==2) cout<<"YES!";
else cout<<"NO";

Более простое ветвление получается с помощью оператора switch:

switch (выражение)
{
case константа 1:
оператор; . . .; оператор;
break;
case константа 2:
оператор; . . .; оператор;
break;
. . . . . . . . . . .
case константа n:
оператор; . . .; оператор;
break;
default:
оператор; . . .; оператор;
}


Выражение может быть только целого типа. Его значение сопоставляется со всеми находящимися внутри switch-оператора case-константами, и выполняются те операторы, для которых установлено равенство. Если равенство не установлено, то выполняются операторы с меткой default:. Оператор break передает управление за пределы оператора switch. Если break отсутствует, то после найденного совпадения будут выполняться все операторы switch.
Оператор for организует цикл:

for(выражение 1; выражение 2; выражение 3 )
оператор;

выражение 3 (приращение) вычисляется после каждого прогона цикла;
выражение 1 (инициализация) вычисляется перед началом цикла;
выражение 2 (условие) - до и после каждого прогона цикла.

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


#include <iostream.h>

void main() {

for(int counter=0, int add_counter=0; counter<10; counter++, add_counter+=counter)
// "," используется для последовательного вычисления нескольких операторов
cout<<"Значение counter "<<counter<<endl;
// endl означает переход на новую строку
cout<<"Значение суммы "<<add_counter<<endl;
}

Для организации цикла с предусловием используется оператор while:
while(выражение)
оператор;
Оператор тела цикла выполняется до тех пор, пока истинно выражение, записанное в скобках.
Выражение вычисляется до начала и после каждого прогона цикла. Цикл не выполняется ни разу, если выражение ложно (равно 0).
Фрагмент программы вычисления суммы чисел от 0 до 9:


#include <iostream.h>

void main()
{
int counter=0, add_counter=0;
while(counter++<10) {
// тело цикла состоит не из одного оператора, поэтому заключено в { }
cout<<"Значение counter"<<counter<<endl;
add_counter+=counter; }
cout<<"Значение суммы "<<add_counter<<endl;
}

Цикл с пост-условием do while имеет вид:


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

Оператор тела цикла выполняется до тех пор, пока истинно условие. Условие проверяется после выполнения оператора тела цикла.
Фрагмент программы копирования строки в строку:


void main() {

char *р, *s;
s="string_s\0"; // строка заканчивается признаком конца - \0
do
*р++=*s++; // копирование строки
while(*s);
} // завершение цикла по концу строки

Оператор continue возвращает управление на начало цикла, пропуская стоящие после него операторы цикла.
Оператором break можно завершить цикл.
Оператор безусловного перехода goto метка; передает управление на оператор, перед которым стоит метка. Метка представляет собой идентификатор с двоеточием и может стоять перед любым выполняемым оператором.

Контрольные вопросы

1. Чем отличаются циклы с пост- и предусловием?
2. Каковы отличия действий операторов break и continue?
3. Для чего применяется оператор switch ?
4. Приведите примеры использования операторов ветвления.

 

 

 
Найти: на
Hosted by uCoz