Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_по_проге_Берлин / Книги / учебное пособие ОАиП.pdf
Скачиваний:
49
Добавлен:
11.02.2015
Размер:
947 Кб
Скачать

putchar(c);

// вывод введенного символа

}

В рассматриваемом примере приоритет операции != выше чем =, таким образом, выражение с=getchar() взято в скобки, чтобы сначала ввести символ, а затем сравнить его с EOF.

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

Директива #include

Директива препроцессора #include вставляет текст внешнего файла в текст программы, содержащей директиву. Директива имеет один из форматов:

#include <имя файла> #include ”имя файла”

Файл, указываемый в директиве #include должен быть в формате ASCII. Угловые скобки указывают препроцессору искать включаемый файл в каталогах, определенных по умолчанию в IDE. Двойные кавычки указывают вначале производить поиск в текущем каталоге, а затем если файл не найден, в тех же каталогах, что и с угловыми скобками. Директива #include чаще всего используются для включения заголовочных файлов. Заголовочные файлы представляют собой библиотечные функции и имеют расширение h.

Директива #define

Директива предназначена для выполнения функции найти и заменить и имеет следующий формат:

#define argument1 argument 2

где argument1 – идентификатор не содержащий пробелов, аrgument2 может содержать любые символы. Директива заменяет все вхождения argument1 в тексте программы на аrgument2.

Так как директива препроцессора позволяет определять и изменять константы, заменяемые в ней аргументы называют предопределенными константами. Определить можно константу любого типа, включая строковый.

Операторы языка С(С++)

Понятие пустого и составного операторов

Составной оператор – это несколько операторов объединенных в блок с помощью фигурных скобок “{}”, или разделенных запятой. Такой блок можно рассматривать как один оператор, например:

#include<stdio.h>

 

 

void

main ()

 

 

{

 

 

 

 

{

// первый вариант составного оператора

 

int i=1, j=2, k;

 

 

 

k=i+j;

printf(“\n

k=i+j =

%d”, k);

 

k*=2;

printf(“\n

k= %d”,

k);

} // второй вариант составного оператора int i=0, j, k;

k=i+=j, j=4;

}

Пустой оператор – состоит только из знака “;”, например:

#include<stdio.h>

 

void main ()

 

 

{ int i= 2;

 

 

i*=3; ;

//

обычный и пустой операторы

;

//

пустой оператор

; ;

//

двойной пустой оператор

};

//

конец составного оператора и пустой оператор

Оператор условного перехода

Вязыке С(С++) существует группа операторов позволяющая организовать ветвление в программе. В С(С++) имеются три оператора, которые могут нарушить простой линейный характер выполнения программы.

Кним относятся: if (если) else (иначе) (ветвления), switch (переключатель) и goto (безусловного перехода).

Оператор ветвления предназначен для выбора в программе из нескольких возможных вариантов единственного варианта продолжения вычислительного процесса. Выбор выполняется исходя из результатов анализа значения некоторого выражения.

Оператор if имеет следующую общую форму записи: if (проверка условия) {группа операторов 1 }

[else {группа операторов 2 }]

При выполнении оператора if сначала выполняется проверка условия. Если результат - истина (любое отличное от нуля значение), то выполняется группа операторов 1.

Если результат анализа условия - ложь (равен 0 ), то выполняется группа операторов 2. Если слово else отсутствует, то управление передается на следующий после if оператор.

Вкачестве условия может использоваться арифметическое, логическое выражение, выражение сравнения, целое число, переменная целого типа, вызов функции с соответствующим типом возвращаемого значения.

Ниже приведен пример функции, использующей оператор if . . . else: void main(void)

#include <stdio.h> { short i;

printf("введите число i \n i= "); scanf("%d",&i); printf("введенное число ");

if (i>10) printf("больше 10 "); else printf("меньше 10 ");

}

Если необходимо осуществить выбор из более чем двух условий, то можно конструкцию if ... else расширить конструкцией else if. Это позволяет ввести в анализ дополнительное условие, что приведет к увеличению ветвления в программе.

Одним из условий правильности работы программы, использующей конструкции вида if ...; else ...; if ...; else ...; ..., является соблюдение правил:

-каждый оператор else соответствует ближайшему оператору if, если только ближайший if не входит в группу операторов, выполняющихся при условии верхнего (предыдущего if).

-условия проверяются в том порядке, в котором они перечислены в программе;

-если одно из условий истинно, то выполняется оператор соответствующий этому условию, а проверка оставшихся условий не производится;

-если ни одно из проверенных условий не дало истинного результата, то выполняются операторы, относящиеся к последнему else;

-последний else является необязательным, следовательно, он и относящийся к нему оператор может отсутствовать.

. . .

. . .

if (i==j){ n++;

if (i==j){ n++;

k*=j;}

k*=j;

if (n>10 && k<n)

if (n>10 && k<n)

printf(”n=%d”,n);

printf(”n=%d”,n);

else n%=2;

} else n%=2;

Если анализируется

более одного логического условия, то они

заключаются в () и разделяются логическими операциями || (или) и && (и). Понятия: истина и ложь. В С(С++) каждое выражение, в том числе и

условное, имеет значение. При этом каждое условное значение принимает либо истинное, либо ложное значение.

void main(void)

 

{ int true,false;

 

true=(4>2);

/* истина */

false=(3>5);

/* ложь*/

printf(”true=%d false=%d”,true,false);

}

Результатом работы функции является: true = 1 false = 0

Следовательно, значение ”истина” - это 1, а "ложь" - 0. Более того, как следует из приводимого ниже примера, только значение 0 соответствует ложному высказыванию, при остальных значениях выражение в () принимает истинное значение.

#include<stdio.h>

main()

{ if (1) printf("истина1"); else printf("ложь1");

if (0) printf("истина 0"); else printf("ложь 0");

if (-2) printf("истина 2"); else printf("ложь 2");

}

Это свойство может быть использовано для сокращения логических условий. Например, выражения if(k!=0) и if(k) эквивалентны, так как оба принимают значение "ложь" только в случае k=0.

Необходимо различать следующие высказывания: if(k=3) и if(k==3)

Первое из них имеет всегда истинное значение, так как в результате его выполнения переменная k принимает значение 3, и, следовательно, выражение в скобках не равно 0 (истинно) всегда. Во втором случае выражение истинно только в случае, когда k примет значение 3.

Переключатель switch. Использование оператора if позволяет выбрать один из двух путей. В отличие от него оператор switch используется для выбора одного из многих путей. Общая структура оператора switch имеет следующий вид:

switch (выражение)

{ case константа 1: вариант 1; break;

. . . . .

case константа n: вариант n; break; [default: вариант n+1; break;]

}

В операторе switch производится проверка на совпадение вычисленного значения выражения с одним из значений, входящих во множество констант. Константа представляет собой целочисленную константу или константное выражение (символьные константы автоматически преобразуются в целочисленные). В операторе switch не должно быть одинаковых констант. В процессе выполнения оператора switch выражение сравнивается с каждой из констант. При совпадении выполняется соответствующий константе вариант (один или более операторов), иначе выполняется вариант, помеченный ключевым словом default, а при его отсутствии операторы, следующие за ”}”. Оператор break, приводит к немедленному выходу из switch (или далее из ниже рассматриваемых операторов цикла). Кроме break, для выхода из switch может быть использован также return.

#include <stdio.h> void main(void)

{ int i; char c;

while((i=getchar())!=EOF) /* EOF --> Ctrl + Z */

{switch (i)

{case 97: c='a'; /* из-за отсутствия оператора break выполняется */

/* следующая ветвь и c принимает значение 'b'*/ case 98: c='b'; break;