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

1 ... 22 23 24 [ 25 ] 26 27 28 ... 200


b=i;

getch();

В функцию getlineO вставлены лишние операторы (static int j и j=i), чтобы продемонстрировать действие атрибута static.

Они не меняют функциональности getlineO. Поставьте точку останова Отладчика на оператор j=i и в цикле работы getlineO убедитесь, что переменная j сохраняет свое значение в других циклах запуска getline ().

Результат показан на рис. 4.5 и 4.6.

117(Debugging) VisuulC** 2008 Express Edftfon

Ffc Edit View Project BuJd Debug Tools Window Help Process: [3648] 17.exe - Thread: [3652] Wain Thread TIVl. ..

9 X 17.CPP

? (GlobalScope)

5Mf lint getline (char si], inc ll n[

si M

vgetline(char[] s, inc lim)

3

int c,i; static inc 3;

foe (1=0; i<litn-l ss (c=getchai; 0 ) i s[i]=c;

Il s[i] = \0-;

(г для учета количества

э-i; return (1) ;

l )

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

locals IIHI

Name

t / s V lim

eof ss с != \ri ; i++)

Value

100 S 10 5

, Ц X

!Type . > char* rt

mt int int

C Ц X

Lan.

После 1-го входа в getline ()

Рис. 4.5. Значение переменной j при первом вхождении в функцию



Mli (Debugging) - Vixuat C** 2008 Express tditicm

File Edit View Project Build Debug Tools Window Help

; J J 1 f. iW iW Z C2 Ji 4

- > .. S-- - - -

Process: [3936] 17.exe

Ц X 17.CPP

Глава 4 к .

si!....л

Thread: [3940] Main Thread

i, i (Global Scope)

vgetline(char[]s, intlim)

- .13 Г

static int j;

foe (1=0; Klini-1 £S (c=getchar ()) != eof ss с s[i] =c; s[l] = \0;

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

j-i; return (i) ; - )

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

В int tmain() j

I /для Евода используеи объявление chat si*/

\n; 1++)


X C Д X

Type ({ iLan. Л - char * ! О C+H fcit C+H

mt С

inl С

После 2-го входа в getiine () j сохранился

Рис. 4.6. Значение переменной j при втором вхождении в функцию

Для ввода можно использовать объявление char *s (об этой записи мы поговорим в следующих главах). В этом случае перед обращением к функции ввода надо динамически выделить память функцией s= (char*)mallcc (maxline), a в конце программы выполнить оператор free (s).

Рекурсивные функции

Рекурсивные функции - такие функции, которые могут вызывать сами себя. При этом каждый раз под каждый вызов создается соверщенно новый набор локальных переменных, отличный от набора вызывающей (т. е. этой же) функции. Рекурсия применяется при обработке так называемых рекуррент-



Листинг 4.8

int fact (int i) 1

if(i==0)

return(i); else

i=i * fact(i-l); return(i);

ных (основанных на рекурсии) формул. Одной из таких формул является, например, формула вычисления факториала числа: !=( -!)! * п, где 0!=1. Чтобы вычислить факториал на шаге п, надо воспользоваться факториалом, вычисленном на шаге п-\. Рекурсивная функция, реализующая алгоритм для вычисления факториала, показана в листинге 4.8.



1 ... 22 23 24 [ 25 ] 26 27 28 ... 200

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