|
Программирование >> Элементы языков с и с++
В блоке можно объявлять переменные, но следует помнить, что они будут локальными, т. е. неизвестными за пределами блока. Конструкция 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |