nter++; /* */ return counter; /* , '\0' */ } . , . strlen(s) ( , ). --------------------------------------------------------------------- ================================= , - , : int array[5] = { 12, 23, 34, 45, 56 }; char string[7] = { '', '', '', '', '', '', '\0' }; , , ( int) '\0' char. int array[5] = { 12, 23, 34 }; , - . int a[5] = { 177, 255, 133 }; a[] : n a[n] -------------------------------------------- -1 (: " ") 0 177 1 255 2 133 3 0 4 0 5 ()  * 13_FUNCS.txt *  ============================ , . /* func(). */ /* func - . . */ int func(int a, int b, int c){ int x, y; ... x = a + 7; ... b = b + 4; ... return(_); } a, b, c - () x, y - - - , main() main(){ int zz, var; ... var = 17; zz = func(33, 77, var + 3) + 44; ... } zz = func(33, 77, var + 3) + 44; 1) func() (a) . (b) a, b, c, x, y; (c) - , . ( ) (): func(1, 2, 3) 1-, 2- 3- () : int func(a, b, c){ /* a = 1, b = 2, c = 3 */ : a = 33; : b = 77; : c = var + 3; , , c = 20; x y , ( , - ). 2) , , { ... } . : x = a + 7; , - , . b = b + 4; . ( ). 3) . ... return(_); } , ... return(a + 2 * x); } , : zz = func(33, 77, var + 3) + 44; (1) func(.....) zz = XXXXXXX + 44; (2) "_" return, . 128. (3) func(.....) zz = 128 + 44; (4) : a - b - c - x - y - ( ) . (5) , . (6) : zz = 128 + 44; zz = 172; /* */ ------------------------------------------------------------------------- int func1(int x){ printf("func1: x=%d\n", x); /* 1 */ x = 77; printf("func1: x=%d\n", x); /* 2 */ return x; } void main(){ int var, y; var = 111; y = func1(var); /* @ */ printf("main: var=%d\n", var); /* 3 */ } @ func1() var, 111. , x 111 x = 111; printf() 111. x 77. x, var !!! ( ) var x, var - ( - ). printf() 77. var 111, printf, 111. ------------------------------------------------------------------------- ============================= int func1(int x){ /* f.1 */ printf("func1: x=%d\n", x); /* f.2 */ x = 77; /* f.3 */ printf("func1: x=%d\n", x); /* f.4 */ return x; /* f.5 */ } void main(){ int x, y; /* 1 */ x = 111; /* 2 */ y = func1(x); /* 3 */ printf("main: x=%d y=%d\n", x, y); /* 4 */ } main(), func1() . ? , . func1() x, () (). , : main::x func1::x ( ++, ). : |/* 1 */ main::x main::y ; |/* 2 */ main::x = 111; |/* 3 */ func1(111); | +-------+ . |/* f.1 */ func1::x 111; . |/* f.2 */ 111 func1::x; . | . |/* f.3 */ func1::x = 77; ( main::x, , . | func1. . | main::x - . | "" . | . . | ). . | . |/* f.4 */ 77 func1::x; . |/* f.5 */ func1::x , 77. . | func1::x . . | . | main(), . | x main::x . | func1::x +-------+ | |/* 3 */ y = 77; |/* 4 */ main::x main::y, | 111 77. main() func1() , , . - , . - x, i. ------------------------------------------------------------------------- , . int func1(int arg){ /* - func1::arg */ int x; /* func1::x */ x = arg; printf("func1: x=%d\n", x); x = 77; printf("func1: x=%d\n", x); return x; } void main(){ int x, y; /* main::x main::y */ x = 111; y = func1(x); printf("main: x=%d y=%d\n", x, y); } x. , : , _(..., ..., ....) 1 2 3 . : int f(int 1, int 2, int 3){ int 1, 2; ... /* */ } : .... f(1, 2, 3) ... ( ): 1 = 1; 2 = 2; 3 = 3; 1 = ; 2 = ; ... /* */ ------------------------------------------------------------------------- ===================== , , , ( , , ). . - . int x = 12; /* ::x - */ int globvar; /* ::globvar */ int f1(){ int x; /* f1::x */ x = 77; printf("x=%d\n", x); /* 4 */ return x; } int f2(){ printf("x=%d\n", x); /* 5 */ return 0; } void main(){ int x, y; /* main::x */ x = 111; /* 1 */ printf("x=%d\n", x); /* 2 */ printf("glob=%d\n", globvar); /* 3 */ y = f1(); y = f2(); } : - - . . - - "x". ? /* 1 */ main::x = 111; x, . x 12. /* 2 */ main::x, 111. main ::x x. main x, ++ ::x globvar . /* 3 */ ::globvar. , 0. , , 0. , . /* 4 */ f1() f1::x main::x ::x 77, ::x main::x x = 77. f1::x /* 5 */ f2() . x. - ::x main::x ? : ::x 12. , . . ( "?" ) , funca(){ int vara; ... ...funcb();... /* */ ... } funcb() vara. funcb(){ int z; z = vara + 1; /* , vara funcb() */ } , , funcb() funcc(), funcc() vara . . - , , . , , . . (a). (a) . ~~~~~~~~~~ : (5) . , , . ------------------------------------------------------------------------- ========= , . void (""). . void func(){ printf("!\n"); return; /* */ } " ", ( ) . int glob; void func(int a){ glob += a; } return , } : main(){ int z; z = func(7); /* , ??? */ } : main(){ func(7); } .  ? ! int res1, res2; ... res1 = func(12 * x * x + 177, 865, 'x'); res2 = func(432 * y + x, 123 * y - 12, 'z'); , , ; , ? , , (). , . : , "" . - , . - . ------------------------------------------------------------------------- return , . . int f(int x){ int y; y = x + 4; if(y > 10) return (x - 1); y *= 2; return (x + y); }  .  , . int factorial(int arg){ if(arg == 1) return 1; /* a */ else return arg * factorial(arg - 1); /* b */ } factorial(n) n * (n-1) * ... * 3 * 2 * 1 " n". arg ( ) . factorial::arg : factorial::arg[_] . factorial(4) +----------------------------------------+ | | factorial::arg[ 0__ ] 4 | | | factorial::arg[ 1__ ] 3 | | | factorial::arg[ 2__ ] 2 | | | factorial::arg[ 3__ ] 1 | V --------+ +--------- : +----------------------------------------+ A | /* b */ return 4 * 6 = 24 | | | /* b */ return 3 * 2 = 6 | | | /* b */ return 2 * 1 = 2 | | | /* a */ return 1; | | --------+ +--------- (stack). --------+ +------------ | | +---------------+ a | --------+ | +------------ | V | +---------------+ | a | <--- +---------------+ b --------+ +------------ | | +---------------+ | b | <--- +---------------+ | a | +---------------+ c --------+ +------------ | | +---------------+ | c | <--- +---------------+ | b | +---------------+ | a | +---------------+ , " " : c, b, a. () , . factorial::arg ( - arg) - , . , , () . - . , : int stack[10]; int in_stack = 0; /* */ /* */ void push(int x){ stack[in_stack] = x; in_stack++; } /* */ int pop(){ if(in_stack == 0){ printf(" , .\n"); return (-1); } in_stack--; return stack[in_stack]; } , ( ) , . , . void main(){ push(1); push(2); push(3); while(in_stack > 0){ printf("top=%d\n", pop()); } }   " ", . return . : int x = 7; /* */ int v = 333; /* */ int factorial(int n){ int w; /* , */ w = n; if(n == 1) return 1; /* #a */ else return n * factorial(n-1); /* #b */ } void func(){ int x; /* func::x */ x = 777; /* #c */ printf(" func()\n"); } void main(){ int y = 12; /* main::y */ int z; /* A */ z = factorial(3); /* B */ printf("z=%d\n", z); func(); /* C */ } ------------------------------------------------------------------------- main(). /* A */ | | V V --------+ +-------- |=======================| | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- , a) ( ) . b) . "" : main::z, main::y, ::x, ::v ------------------------------------------------------------------------- /* B */ factorial(3). --------+ +-------- |=======================| | w = | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- : factorial(3)::w, factorial(3)::n, ::x, ::v : main::z, main::y " ..." , , . ------------------------------------------------------------------------- factorial(3) /* #b */ return 3 * factorial(2). factorial(2). --------+ +-------- |=======================| | w = | | n = 2 | |factorial(2) | |=======================| | +-|---> return 3 * factorial(2); | w = 3 | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- ------------------------------------------------------------------------- factorial(2) /* #b */ return 2 * factorial(1). factorial(1). --------+ +-------- |=======================| | w = | | n = 1 | |factorial(1) | |=======================| | +-|---> return 2 * factorial(1); | w = 2 | | n = 2 | |factorial(2) | |=======================| | +-|---> return 3 * factorial(2); | w = 3 | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- ------------------------------------------------------------------------- factorial(1) /* #a */ return 1. return , " " , . , factorial(m) . : return, return. . --------+ +-------- |=======================| | +-|---> return 1; | w = 1 | | n = 1 | |factorial(1) | |=======================| | +-|---> return 2 * factorial(1); | w = 2 | | n = 2 | |factorial(2) | |=======================| | +-|---> return 3 * factorial(2); | w = 3 | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- ------------------------------------------------------------------------- return; --------+ +-------- |=======================| | +-|---> return 2 * 1; | w = 2 | | n = 2 | |factorial(2) | |=======================| | +-|---> return 3 * factorial(2); | w = 3 | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- --------+ +-------- |=======================| | +-|---> return 3 * 2; | w = 3 | | n = 3 | |factorial(3) | |=======================| | +-|---> z = factorial(3); | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- --------+ +-------- |=======================| | +-|---> z = 6; | z = | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- --------+ +-------- |=======================| | z = 6 | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- ------------------------------------------------------------------------- , /* C */ func(). /* #c */ . --------+ +-------- |=======================| | x = 777; | |func(); | |=======================| | +-|---> func(); | z = 6 | | y = 12 | +------+---------+ |main() | |x = 7 | v = 333 | +-----------------------+-----------+------+---------+----- - ? : func::x = 777 ::v = 333 . ::x . main::y, main::z , ------------------------------------------------------------------------- . , ( ). - . int fibonacci(int n){ if(n==1 || n==2) return 1; /* else */ return fibonacci(n-1) + fibonacci(n-2); } void main(){ printf("20 %d\n", fibonacci(20)); } , . - . - , fibonacci(1) ? int called = 0; int fibonacci(int n){ if(n==1){ called++; return 1; } else if(n==2) return 1; return fibonacci(n-1) + fibonacci(n-2); } void main(){ printf("20 %d\n", fibonacci(20)); printf("fibonacci(1) %d \n", called); } ... 2584 ! 14.c /* */ #include <stdio.h> const int LINES = 15; void draw(int nspaces, int nstars, char symbol){ int i; for(i=0; i < nspaces; i++) putchar(' '); for(i=0; i < nstars; i++) putchar(symbol); } void main(){ int nline, nsym; char symbols[3]; /* */ symbols[0] = '\\'; symbols[1] = 'o'; symbols[2] = '*'; for(nline=0; nline < LINES; nline++){ for(nsym = 0; nsym < 3; nsym++) draw(nline, nline, symbols[nsym]); /* */ putchar('\n'); } } 15.c /* : ... , , , , ... 6 . */ #include <stdio.h> /* */ /* . - . */ int TOMCATS = 3; /* */ int CATS = 2; /* */ int ANIMALS_PER_LINE = 6; /* */ int LINES = 25; /* */ /* - . , ... - . - main(). */ int ANIMALS; /* */ int nth_in_line = 0; /* */ /* , * . , * . - . */ /* , , (). */ void checkIfWeHaveToBreakLine(){ nth_in_line++; /* ( ) */ if(nth_in_line == ANIMALS_PER_LINE){ /* ... */ putchar('\n'); /* */ nth_in_line = 0; /* */ } else { putchar('\t'); /* */ } } void main(){ int nanimal; /* */ int i; /* */ ANIMALS = ANIMALS_PER_LINE * LINES; nanimal = 0; while(nanimal < ANIMALS){ for(i=0; i < TOMCATS; i++){ /* printf() . ( putchar(). */ printf(""); nanimal++; /* */ /* - ? */ checkIfWeHaveToBreakLine(); } for(i=0; i < CATS; i++){ printf(""); nanimal++; /* */ /* - ? */ checkIfWeHaveToBreakLine(); } } /* putchar('\n'); */ } 16.c /* , . . */ #include <stdio.h> /* */ int TOMCATS = 3; /* */ int CATS = 2; /* */ int ANIMALS_PER_LINE = 6; /* */ int LINES = 5; /* */ int ANIMALS; /* */ int nth_in_line = 0; /* */ void checkIfWeHaveToBreakLine(){ nth_in_line++; if(nth_in_line == ANIMALS_PER_LINE){ putchar('\n'); nth_in_line = 0; } else printf("\t\t"); /* @ */ /* {...} */ } void main(){ int nanimal; int i; ANIMALS = ANIMALS_PER_LINE * LINES; nanimal = 0; while(nanimal < ANIMALS){ for(i=0; i < TOMCATS; i++){ /* %d int . ( - ). (). -- checkIfWeHaveToBreakLine() @. - putchar('a'); - printf("abcdef"); - . - . */ printf("%d", nanimal); nanimal++; checkIfWeHaveToBreakLine(); } for(i=0; i < CATS; i++){ printf("%d", nanimal); nanimal++; checkIfWeHaveToBreakLine(); } } } 17.c /* : 1 100. : - . , ( ). , - int. - char. - double. ( float, ). . q = x; q[0] := x; q[n+1] := 1/2 * ( q[n] + x/q[n] ); , q[n] . , . , , q. */ #include <stdio.h> /* - const. . , . , - epsilon = ... ; . */ const double epsilon = 0.0000001; /* */ /* */ double doubleabs(double x){ if(x < 0) return -x; else return x; } /* */ double sqrt(double x){ double sq = x; /* : double sq; sq = x; " ". */ while(doubleabs(sq*sq - x) >= epsilon){ sq = 0.5 * (sq + x/sq); } return sq; } void main() { int n; for(n=1; n <= 100; n++) printf("sqrt(%d)=%lf\n", n, sqrt((double) n) ); } /* printf() . ------ -------- %d -- n %lf -- sqrt((double) n) %d int. %c char. %lf ( %g) double. " sqrt(xxx)" ? : - sqrt() , xxx; - ; - %lf, . , , . , x = 12 + 34; 12 34 , printf("%d\n", 12); 12, . , double z; z = sqrt(12) + sqrt(23); , , ( , ). z = sqrt( sqrt(81)); ( 81 --> 3) , (double) n ? sqrt() double. int n; -, 12 12.0 -. , . (double) x " double". , . , , int double int double, double. int var1; double var2, var3; var1 = 2; var2 = 2.0; var3 = var1 + var2; var3 = (double) var1 + var2; var3 4.0 , char - 0...255. 0 255. */  * 18_POINTERS.txt *  ========= void f(int x){ x = 7; } main(){ int y = 17; f(y); printf("y=%d\n", y); /* : y=17 */ } x y, x=7; . , ? : - y ( - ), - y=f(y); ( ? return, , ). : . -------------------------------------------------- (@) void f(int *ptr){ /* #2 */ *ptr = 7; /* #3 */ } main (){ int y=17; f(&y); /* #1 */ printf("y=%d\n", y); /* : y=7 */ } , ? ---------------------------------------------------------------------- : &y " y" " y" *ptr " ptr" ( - ) int *ptr; ptr, , int-. , . int var1, var2, z; /* */ int *pointer; /* */ var1 = 12; var2 = 43; pointer = &var1; ; . ________ /pointer/ _/_______/_ | | , | | ( ) | | | &var1 | | | |_______|_| | |&var1 - var1 - | ", var1". V &var1 ________ / var1 / _/_______/_ | | | | | 12 | |_________| , - ", -". ( ) - . , int, , , int * char, - char * ( ) , . int x; int arr[5]; &x "x" & arr[3] "arr[3]" &(2+2) "", , .   . , : *pointer -------------------------------------------------------------------- =================================== *pointer " ( ), , pointer". - 12. *pointer " ". printf("%d\n", *pointer); 12; z = *pointer; /* z = 12; */ z = *pointer + 66; /* z = 12 + 66; */ ( , " ") pointer = &var2; ________ /pointer/ _/_______/_ | | | &var2 | | | |_______|_| | |&var2 | V ________ / var2 / _/_______/_ | | | 43 | | | |_________| z = *pointer; z = 43; -------------------------------------------------------------------- , z = *pointer; z = *(&var2); z = var2; * & .  ... *pointer = 123; " (.. 123) (),