Программирование >>  Арифметические и логические операции 

1 ... 14 15 16 [ 17 ] 18 19 20 ... 53


ма закрывающаяся скобка. Внутри блока каждый оператор должен ограничиваться (;).

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

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

Пустой оператор представляется символом (;), перед которым нет выражения. Пустой оператор используют там, где синтаксис языка требует присутствия в данном месте программы оператора, однако по логике программы оператор должен отсутствовать.

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

Операторы ветвления

К операторам ветвления относятся 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 отличается от предыдущей главным образом тем, что теперь в нее входит полная поддержка потоков (ранее приходилось использовать потоки из библиотеки, поставляемой с кон-



1 ... 14 15 16 [ 17 ] 18 19 20 ... 53

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика