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