|
Программирование >> Элементы языков с и с++
linclude <stdlib.h> for atoiO linclude <string.h> linclude <inalloc.h> for maiioc() Idefine eof -1 Idefine maxline 1000 -------Ввод строки с клавиатуры int getiine (char s [ ], int lim) 1 int c,i; for(i=0; i<lim-l && (c=getchar{)) != eof && с != \n; i++) s[i]=c; s[i]=\0; i++; для учета количества return(i); ----------------------------------------- struct Jcey I char * keyword; int keycount; )tab[] = ( break ,0, case ,0, char ,0, continue ,0, end ,0 ),*bbb; struct key *BinaryInStruc(char *word,struct key tab[],int n) /Ищет в массиве структур слово, находящееся в word п - размерность массива, которая должна быть задана не больше, чем количество инициализированных элементов массива. int tmain() { char s[maxline]; int c; Возвращает указатель на структуру типа key, в которой находится слово, заданное в word, либо возвращает NULL (сигнал того, что заданное слово в массиве структур не обнаружено)*/ int cond; struct key *low =&tab[0]; /*здесь low и high - это указатели на первый и последний элементы таблицы*/ struct key *high=&tab[n-l]; struct key *mid; /*здесь будет указатель на средний элемент таблицы*/ while(low <= high) /*указатели можно сравнивать*/ { mid=low + (high - low)/2; /*разность меяэду указателями - это число элементов массива, которое можно делить, а поскольку операция деления / даст целое число, то его можно прибавить к указателю low*/ if((cond=strcmp(word,mid->keyword)) < 0) { high=mid - 1; /*от указателя можно вычесть целое число, в результате получим указатель на предыдущий элемент*/ continue; if(cond > 0) { low=mid + 1; continue; retum(itiid); /*found (возврат указателя на найденный элемент таблицы, т. е. на структуру)*/ ) while return(NULL); not found ------------------------------- printf( Enter your new string > ); getiine(s, maxline); bbb =BinaryInStruc(s,tab,5); bbb объявлен как указатель на структуру типа key if (bbb != NULL) printf( Found string = %s\n ,bbb->keyword); else printf( not found\n ); getch(); 1 while( (c=getchar0) != eof) ; конец оператора dc.while требовалось, чтобы тело while выполнилось хотя бы один раз 1 tmainO Пояснения к этой программе даны в ее тексте. Результат работы совпадает с результатом работы предыдущей программы и показан на рис. 7.8. Программы упрощенного расчета заработной платы одному работнику В этой программе создана функция расчета, которой передается в качестве параметра указатель на структуру (листинг 7.9) (результат расчета показан на рис. 7.9). сл C:\WINDOWS\systeni32Wmd.exe nter iiour neu string >qwe ot found 1 nter siour new string >case ound string = case Enter iiour neij string >end ound string - end 1 nter iiour neu string >Z ot found Z [Для продолжения нажмите лпбую клавишу
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |