Программирование >>  Элементы языков с и с++ 

1 ... 30 31 32 [ 33 ] 34 35 36 ... 200


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

Конструкция if-else

Эта конструкция используется при необходимости сделать выбор. Синтаксис этой конструкции таков:

if(выражение) блок else блок

Работает эта конструкция так:

1. Вычисляется выражение в скобках оператора if.

2. Если значение выражения истинно, то выполняется тело if (блок операторов).

3. Если значение выражения ложно, то выполняется тело else (блок операторов).

Часть else является необязательной; если указанное в if выражение ложно, то управление передается на выполнение следующего за if оператора, т.е. тело if не выполняется. Как ни покажется странным замечание, но его приходится делать: if и его тело - это одно целое! Их нельзя разрывать. Это же касается и операторов while, for.

Часть else самостоятельно не применяется.

Конструкция eise-if

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

if(выражение) блок

else if(выражение) блок

else if(выражение) блок

else if(выражение)

блок

else

блок



Работает эта конструкция так:

1. Последовательно вычисляется выражение в каждой строке.

2. Если выражение истинно, то выполняется тело (т. е. блок операторов) и происходит выход из конструкции на выполнение следующего за ней оператора.

3. Если выражение ложно, то начинает вычисляться выражение в следующей строке и т. д..

Последняя часть конструкции (else блок) не обязательна.

Приведем пример функции поиска заданного элемента в упорядоченном по возрастанию элементов числовом массиве.

Пусть даны массив vtn] и число х. Надо определить, принадлежит ли х массиву. Так как элементы массива предполагаются упорядоченными по возрастанию их значений, то поиск проведем, применяя метод половинного деления (иначе называемый двоичным поиском).

Суть метода такова:

1. Рассматривается отрезок, на котором расположены все элементы числового массива.

Если массив v[n] имеет размерность п, то отрезок, на котором расположены номера его элементов, это [о, п-1], потому что номер первого элемента массива будет о, а последнего - (n-i).

2. Этот отрезок делится пополам.

3. Средняя точка отрезка вычисляется как j = (О + (n-i))/2.

4. В этой средней точке вычисляется значение v[j] и проверяется: значение X больше, меньше или равно v [ j ]:

если X < V [ j ], значит, х находится слева от середины отрезка;

если X > v[j ], то X находится справа от середины отрезка;

если X = v[j ], значит, X принадлежит массиву.

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

Когда же следует остановиться? Один вариант останова мы уже видели: когда значение X совпадет с одной из середин отрезка. А второй - когда отре-



зок сожмется так, что его нижняя граница (левый край) совпадет с верхней (правый край). Это произойдет обязательно, потому что мы станем делить отрезок пополам и в качестве результата брать целую часть от деления, поскольку, как мы видели, ее надо использовать в качестве индекса массива. А индекс массива это величина обязательно целая, т. к. это порядковый номер элемента массива.

Например, массив из трех элементов будет иметь отрезок [0,2]. Делим пополам и получаем (0+2) /2=1 (т. е. имеем два отрезка [0,1] и [1,2]).

Если станем искать в [0,1], то придется находить его середину: (О+1)/2=0 (мы помним, что операция / при работе с целыми операндами дробную часть результата отбрасывает и оставляет только целую часть, что нам и требуется для нахождения индекса массива). Видим, что левый конец отрезка (о) совпал с правым (о), т. к. правый конец нового отрезка получился равным нулю. Вот в этот момент деление пополам надо прекратить и завершить программу.

Если в нашем случае получится так, что отрезок сжался в точку, а число х не сравнялось ни с одним элементом массива v[], то надо вывести об этом событии информацию: например, -1. Если обнаружено, что х содержится в массиве v [ ], то надо вывести номер элемента v [ ], на котором и произошло совпадение.


( Примечание

Значение индекса массива, на котором произошло совпадение, положительно. Если же совпадения не обнаружено, то значение индекса - отрицательно.

Это все необходимо для того, чтобы при обращении к функции поиска вхождения проверить результат поиска: входит ли число х в массив v[] или не входит. Текст программы представлен в листинге 6.4.

20.СРР : Defines the entry point for the console application, ttinclude stdafx.h

ttinclude <stdio.h> for getchar(),...

ttinclude <conio.h>

ttinclude <stdlib.h> for atoi()

ttdefine eof -1 Ctrl+z

ttdefine maxline 100



1 ... 30 31 32 [ 33 ] 34 35 36 ... 200

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