|
Программирование >> Арифметические и логические операции
ма закрывающаяся скобка. Внутри блока каждый оператор должен ограничиваться (;). Составной оператор может использоваться везде, где синтаксис языка допускает применение обычного оператора. Пустой оператор Пустой оператор представляется символом (;), перед которым нет выражения. Пустой оператор используют там, где синтаксис языка требует присутствия в данном месте программы оператора, однако по логике программы оператор должен отсутствовать. Необходимость в использовании пустого оператора часто возникает, когда действия, которые могут быть выполнены в теле цикла, целиком помещаются в заголовке цикла. Операторы ветвления К операторам ветвления относятся if, if else, ?, switch и go to. Общий вид операторов ветвления следующий: if (логическое выражение) оператор; if (логическое выражение) оператор 1; else оператор 2; <логическое выражение> ? <выражение 1> : <выражение 2>; Если значение логического выражения истинно, то вычисляется выражение 1, в противном случае вычисляется выражение 2. switch (выражение целого типа) case значение 1: последовательность операторов 1; break; case значение 2: последовательность операторов 2; break; case значение n: последовательность операторов n; break; default: последовательность операторов n+1; Ветку default можно не описывать. Она выполняется, если ни одно из вышестоящих выражений не удовлетворено. Оператор цикла В Турбо С++ имеются следующие конструкции, позволяющие программировать циклы: while, do while и for. Их структуру можно описать следующим образом: while( логическое выражение) оператор; Цикл с проверкой условия наверху оператор; while (логическое выражение); Цикл с проверкой условия внизу for (инициализация, проверка, новое значение) оператор; Глава 11. Приемы объявления и обращения к массивам, использование функций и директивы define при работе с массивами Массивы - это набор объектов одинакового типа, доступ к которым осуществляется прямо по индексу в массиве. Обращение к массивам в Турбо С++ осуществляется и с помощью указателей. Массивы можно описывать следующим образом: тип данных имя массива [размер массива]; Используя имя массива и индекс, можно адресоваться к элементам массива: имя массива [значение индекса] Значения индекса должны лежать в диапазоне от нуля до величины, на единицу меньшей, чем размер массива, указанный при его описании. Вот несколько примеров описания массивов: char name [ 20 ]; int grades [ 125 ]; float income [ 30 ]; double measurements [ 1500 ]; Первый из массивов (name) содержит 20 символов. Обращением к элементам массива может быть name [0], name [1], name [19]. Второй массив (grades) содержит 125 целых чисел. Обращением к элементам массива может быть grades [0], grades [1], grades [124]. Третий массив (incom) содержит 30 вещественных чисел. Обращением к элементам массива может быть income [0], incom [1], income [29]. Четвертый массив (measurements) содержит 1500 вещественных чисел с двойной точностью. Обращением к элементам массива может быть measurements [0], measurements [1], measurements [1499]. Вот программа, иллюстрирующая использование массивов (Файл array.с): #include <stdio.h> #define size 1000 int data [size]; main ( ) extern float average (int a[], int s ); int i; for ( i=0; i<size ; data [ i ]= i; printf ( \nСреднее значение массива data =°/of\n ,average (data,size)); float average (int a[ ] ,int s ) float sum=0.0; int i; for ( i=0; i<s ; i ++) sum+=a[ i ]; return sum/s; В программе заводится массив на 1000 целых чисел. При помощи функции average подсчитывается сумма элементов этого массива. Первым формальным параметром функции average является массив. В качестве второго параметра функции передается число суммируемых значений в массиве a. Обратите внимание на использование константы size (размер). Если изменяется размерность массива, задаваемая этой константой, то это не приводит к необходимости менять что-либо в самом коде программы. Часть 3. От теории к практике Глава 1. Правило право-лево Существенный принцип анализа сложных синтаксических конструкций языка, вроде указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие значение int чётко формализован в виде правила право-лево . Всё предельно просто. Имеем: ♦ () - функция, возвращающая... массив из... указатель на... Первым делом находим имя, от которого и будем плясать. Следующий шаг - шаг вправо. Что там у нас справа? Если (), то говорим, что Имя есть функция, возвращающая... . (Если между скобок что-то есть, то Имя есть функция, принимающая то, что между скобок, и возвращающая... ). Если там [], то Имя есть массив из... . И подобным вот образом мы идём вправо до тех пор, пока не дойдём до конца объявления или правой ) скобки. Тут тормозим... ...и начинаем танцевать влево. Что у нас слева? Если это что-то не из приведенного выше (то есть не (), [], *), то попросту добавляем к уже существующей расшифровке. Если же там что-то из этих трёх символов, то добавляем то, что написано выше. И так танцуем до тех пор, пока не дотанцуем до конца (точнее - начала объявления) или левой ( скобки. Если дошли до начала, то всё готово. А если дошли до ( , то по уже означенной итеративности переходим к шагу Пляски вправо и продолжаем. Пример: int (*(*(*fptr)())[3])(); Находим имя и записываем fptr есть... . Шаг вправо, но там ) , потому идём влево: int (*(*(*fun)())[3])(); и получаем fptr есть указатель на... . Продолжаем ехать влево, но тут ( . Идём вправо: int (*(*(*fun)())[3])(); получаем fptr есть указатель на функцию, возвращающую... Снова ) , опять влево. Получаем: int (*(*(*fun)())[3])(); fptr есть указатель на функцию, возвращающую указатель на... Слева опять ( , идём вправо. Получаем: int (*(*(*fun)())[3])(); fptr есть указатель на функцию, возвращающую указатель на массив из трёх... И снова справа ) , отправляемся влево. Получаем: int (*(*(*fun)())[3])(); fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на... Снова разворот вправо по причине ( . Получаем: int (*(*(*fun)())[3])(); fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие... Тут конец описания, поехали влево и получили окончательную расшифровку: int (*(*(*fun)())[3])(); fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие int . Именно то, чего мы хотели. Глава 2. STLport STLport - это свободно распространяемая реализация стандартной библиотеки шаблонов для множества различных компиляторов и операционных систем. Помимо всего прочего, STLport доступен не только для современных компиляторов, более или менее удовлетворяющих стандарту языка, но и для некоторых старых компиляторов, в частности Borland C++ 5.02 или MS Visual C++ 4.0. Четвертая версия STLport отличается от предыдущей главным образом тем, что теперь в нее входит полная поддержка потоков (ранее приходилось использовать потоки из библиотеки, поставляемой с кон-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |