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

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


-----------

int tmain 0

II-------Ввод строки с клавиатуры----------

int getiine (char s [ ], int lim) {

int c,i;

for(i=0; i<lim-l && (c=getchar()) != eof && с != \n; i++)

s[i]=c; s[i]=\0;

i++; для учета количества

return(i);

-----------------------------------------

int binary (int x,int v[], int n)

/*ищет Б массиве v[n] элемент со значением х п - размерность массива*/

int low, high,mid;

low=0;

liigh=n-l;

while (low <= high) (

inid=(low+high) /2; if (X < v[mid]) high=mid - 1;

else if(x > v[mid]) ✓

low=inid +1; else

return(mid); found

) while return(-1); not found



int V[maxline] = {0,1,2, 3,4,5, б, 7,8,9}; int c,i,x; char s[maxline]; do {

printf ( Enter your new <x> > ); .

getline(s,maxline); x=atoi(s); i=binary(x,V,10); if{i != -1)

printf( entrance found \n ); else

printf ( entrance not foundW);

printf( Continue-anykey, exit-Ctrl+z\n );

while({c=getchar()) != eof) ;

/*это - конец оператора do...while. Нам требовалось, чтобы тело while выполнилось хотя бы один раз */

} tmain()

Рассмотрим работу функции binary ().

В переменных low, high, mid размещаются, соответственно, текущие значения: нижней границы отрезка, верхней границы отрезка и его середины.

Если значение числа х находится в левой половине поделенного отрезка, то изменяется отрезок поиска: переменная low остается без изменения, а переменная high сдвигается на середину (поэтому этой переменной присваивается значение середины, в результате чего получается отрезок, являющийся левой половиной предьщущего отрезка).

Если значение числа х находится в правой половине поделенного отрезка, то изменяется отрезок поиска: переменная high остается без изменения, а переменная low сдвигается на середину, в результате чего получается правый отрезок.

Если значение х совпадает со значением v[середина отрезка], то функция возвращает переменную mid и процесс поиска прекращается.



Г Если цикл поиска закончился, это сигнал о том, что просмотрены все элемен-I ты, и совпадения не найдено. В этом случае будет возвращено отрицательное I число.

Рассмотрим работу основной программы.

Выражение int v[maxline] = {0, i, 2, з, 4, 5, б, 7,8, 9}; - ЭТО инициализация (определение элементов) массива. Для простоты проверки работы функции поиска мы задали значения элементов, совпадающими с номерами своих элементов. Далее с помощью функции getiine о в строку вводится значение X и переводится с помощью функции atoi () в целое число. Затем происходит обращение к функции binary () и проверяется результат ее работы: равно ли возвращенное ею значение -1.

Все эти операторы помещены в блок - тело оператора do...whiie и выполняются в цикле, пока не будет нажата комбинация клавиш <Ctrl>+<z>. Такая структура дает возможность вводить разные значения переменной х. Результат работы программы приведен на рис. 6.2.

C:\WINDOWS\system32\cnid.exe

Enter your new <x> >1в entrance not found Continue-anykey, exit-Ctrl*z

tnter your neij <x> >5 entrance found Continue-anykey, exit-Ctrl*2

iUa продолжения нажмите любую клавишу

Рис. 6.2. Результат работы программы листинга 6.4

Переключатель switch

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

Поясним работу оператора на примере программы подсчета количества варечающихся символов а, ь, с, d во введенной с клавиатуры строке. Текст программы представлен в листинге 6.5, результат ее работы - на рис. 6.3.



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

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