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

1 ... 43 44 45 [ 46 ] 47 48 49 ... 200


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

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



1 ... 43 44 45 [ 46 ] 47 48 49 ... 200

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