© Copyright
Email: abs@opentech.olvit.ru
---------------------------------------------------------------
- "" ,
.
,
.
, "x".
-----
/ x /
---------------
| |
| , |
| 12 |
---------------
.
.
x = 12 ;
" 12",
" 12",
" 12".
,
. .
x = x + 3;
.
, . :
1) " "
2) " 3"
3) " ",
.
: .
_ = _ ;
.
,
" ".
,
. , " "
! , .
:
x = x + 3 ;
x 12
.
x + 3
-----
/ x /
---------------
| 12 | |
--------|------
|
|
| ( 12) ""
|
V
x
12 + 3 ----> .
15.
x 12
( 12)
:
x = 15 ;
|
|
| ""
| ( , )
-----|
/ x / |
--------|------
| 12 V |
---------------
:
-----
/ x /
---------------
| 15 |
---------------
,
. "".
, Pascal Modula,
:= =
, = .
.
:
z = x * x + 2 * x;
:
z - .
x - - .
x * x " " ( ,
!)
x * 2 " "
+ .
.
, ,
, , :
= 1;
= 1;
"" "",
. .
,
.
, ( ..., -2, -1, 0, 1, 2, 3, ...),
:
int 1;
int 2;
:
int 1, 2;
int integer - "".
, .
,
.
/* */
int x, y; /* 0 */
/* , 2
*/
/* - . */
/* */
x = 3; /* 1 */
y = 4; /* 2 */
x = x + y; /* 3 */
y = y - 1; /* 4 */
x = y; /* 5 */
(, ) :
x y
/* 0 */
/* 1 */ 3
/* 2 */ 3 4
/* 3 */ 7 4
/* 4 */ 7 3
/* 5 */ 3 3
, ,
, .
x = y; x y .
, " "
. , x y
, .
----- -----
/ x / / y /
--------------- ---------------
| 3 *<--|--------<----|-- 3 |
--------------- 1) ---------------
2), 3) 4)
1) y 3 ( ).
2) x .
3) 3 x.
4) y 3.
:
printf("%d\n", x);
"".
:
x + y
x - y
x * y
x / y ( ; - )
x % y
5 / 2 2
5 % 2 1
:
x = x + 1; " 1" x++; ( ++x; )
x = x - 1; " 1" x--; ( --x; )
x = x + y; " y" x += y;
x = x * y; " y" x *= y;
x = x / y; " y" x /= y;
x++; x += 1;
,
, .
1; |
2; |
3; |
4; V
if() ;
......
:
.
, ,
.
, ,
.
,
{ ... } -
" ".
if() {
1;
2;
...
}
} ( , ).
:
|
|
|
----------------
---| |----
| ---------------- |
| |
V V
| |
V |
------------ |
| | |
------------ |
| |
------->-------<-------
|
|
V
|
, "":
if() __;
else __;
" , " ( )
|
|
|
----------------
---| |-----------
| ---------------- |
| |
V V
| |
V |
------------------------- -----------------------
| __ | | __ |
------------------------- -----------------------
| |
------->-------<--------------
|
|
V
|
1:
if(x > 10)
printf(" \n");
2:
int x, y, z;
if(x < y) z = 1;
else z = 2;
:
( , , )
x < y
x > y
x <= y
x >= y
x == y
x != y
1,
0, .
, :
if() ....
- .
... -2, -1, 1, 2, 3, ... - .
.
, :
if(x != 0) ... ; if(x) ... ;
if(x == 0) ... ; if(!x) ... ;
-------------------------------------------------------------------------
:
int x, y, z;
if(x == 1){ y = 2; z = x + y; }
else { y = 1; z = x - y; }
-------------------------------------------------------------------------
:
if(x == 1){
printf(" 1\n");
if(y == 2){
printf(" 2\n");
}
} else {
printf(" 1\n");
}
-------------------------------------------------------------------------
,
:
if(x == 1)
printf(" 1\n");
else if(x == 2)
printf(" 2\n");
else if(x == 3){
printf(" 3\n");
y = 1;
} else
printf(" \n");
-------------------------------------------------------------------------
- , ==,
=
= " ", " ".
while()
;
......
while(){
;
...
}
......
|
V
|
+------>--+
| |
| V
| ---------------------
| | |-------> ()
A --------------------- |
| | |
| V |
| ( ) |
| | |
| V |
| V
| | |
| | |
+-----<---+ |
|
+-------<---------------------+
|
V
:
int x;
x = 10;
while(x > 0){
printf("x=%d\n", x);
x = x - 1;
}
printf(".\n");
printf("x %d.\n", x); /* 0 */
"" , .
, -
- , .
.
< 10 ...;
...;
...;
:
if(1 && 2) ...; /* "" */
if(1 || 2) ...; /* "" */
if(! 1) ...; /* "" */
:
if(4 < x && x <= 12) ...;
if(4 < x <= 12) ...;
!
:
if(x < 3 || y > 4) ...;
if( ! (x < 3 || y > 4)) ...;
while.
,
" ", " N-".
" " " ".
int i;
i = a; /* */
while(i < b){
_;
i += c; /* */
}
......
int i;
for(i=a; i < b; i += c)
_;
_ i
a
a+c
a+c+c
...
i < b
for(i=1; i <= N; i++)
printf("i=%d\n", i);
i " ".
.
break
.
while(1){
1;
if(2)
break; ------->----+
|
2; |
} |
......<--------<---------+
for(i=0; 1; i++){
1;
if(2)
break; ------->----+
|
2; |
} |
......<--------<---------+
( ).
:
for(i=0; i < 20; i++){
printf("i=%d\n", i);
if(i == 7){
printf("break loop!\n");
break; /* */
}
printf("more\n");
}
printf("finished, i=%d\n", i); /* 7 */
, :
for(;;){ /* */
1;
if(2)
break; ------->----+
|
2; |
} |
......<--------<---------+
,
.
.
-
break ( - ) , .
while(1){
...
}
printf("");
.
printf("\n");
.
printf("1 2 ");
printf("3\n");
1 2 3
.
, \n,
.
printf("%d", x);
x.
%d
"
".
printf(" %d - -\n", x);
x ,
- -
( \n).
:
int x, y;
x = 12; y = 15;
printf(" %d, %d, .\n", x, y);
~~~~~~
.
" %d, %d\n" .
, %d.
_
_
~~~~
.
12_
%d
12, _
:
12, 15_
, \n.
, printf .
12, 15, .
_
,
:
printf(": %d\n", 12 + 3 * 5);
, :
int x, y, z;
x = 13;
y = 23;
z = 34;
printf("x=%d xx=%d\nzzz=%d\n", x, y - 1, z * 2 + 1);
,
:
x=13 xx=22
zzz=69
_
, ,
.
printf("x=%d\n y=%d\n", x, y);
x=13
y=23
_
y ,
\n !!!
.
,
,
( ).
,
.
- , -
.
- ,
.
.
:
int func(int x){
/* ,
return();
*/
return x+1;
}
-------------------------------------------------------------------------
int func(...
func
( , ).
int , .
-------------------------------------------------------------------------
...(int x)...
( ) .
-------------------------------------------------------------------------
...){
...
}
-
.
-------------------------------------------------------------------------
return ;
.
-------------------------------------------------------------------------
:
int y;
...
y = func(5); /* a */
...... /* b */
:
y = func(5);
1) " ",
- , -
.
2) func.
int func(int x){...
func(5).
, x 5.
( )
int x;
x = 5;
return x+1;
3) x+1 6.
return.
:
" " - func,
.
y = func(5);
func(5) ,
return;
y = 6;
4) .
-------------------------------------------------------------------------
int y, z, w;
y = func(5);
z = func(6);
w = func(7) + func(8) + 1;
y = 6;
z = 7;
w = 8 + 9 + 1;
"" func(),
x
.
.
main(),
main .
(
; ).
main() - .
-------------------------------------------------------------------------
:
#include <stdio.h> /* */
/* ( ) */
int a = 7;
int b; /* 0 */
/* */
f1(){....}
f2(){....}
/* () */
void main(){
...
}
-------------------------------------------------------------------------
:
#include <stdio.h>
int f1(int x, int y){
return (x + y*2);
}
int f2(int x){
int z;
z = x+7;
return 2*z;
}
void main(){
/* */
int a, b, c;
/* */
a = 5; b = 6;
c = f1(a, b+3);
b = f1(1, 2);
a = f2(c);
printf("A %d B %d C %d\n", a, b, c);
}
:
A 60 B 5 C 23
int i;
for(i=0; i < 4; i++){
if(i == 0) func0();
else if(i == 1) func1();
else if(i == 2) func2();
else if(i == 3) func3();
}
.
, , :
func0();
func1();
func2();
func3();
,
, , func(i).
i.
, :
int i;
for(i=0; i < 10; i++){
if(i==0) func0();
else if(i == 1) func1();
else if(i == 2) func2();
else funcN(i);
}
funcN(i) " ".
, :
int i;
func0();
func1();
func2();
for(i = 3; i < 10; i++)
funcN(i);
, 3.
- , :
int i;
for(i=0; i < 100; i++){
if((i % 2) == 0) even(); /* */
else odd(); /* */
}
i.
/* */
#include <stdio.h>
/* putchar('c') - c */
/* \n - */
/* nstars - */
/* */
void drawOneLine(int nstars){
int i; /* , */
for(i=0; i < nstars; i++) /* nstars */
putchar('*');
putchar('\n'); /* */
}
void main(){
/* */
int nline; /* */
/* () */
for(nline=1; nline <= 25; nline++)
drawOneLine(nline);
/* ? , */
}
/* */
/* , */
#include <stdio.h>
void main(){
/* */
int nline; /* */
int i; /* , */
/* () */
for(nline=1; nline <= 25; nline++){
/* ? , */
for(i=0; i < nline; i++)
putchar('*');
putchar('\n');
}
}
/* */
/* */
#include <stdio.h>
/* nstars - */
/* nspaces - */
void drawOneLine(int nspaces, int nstars){
int i; /* , */
/* - */
for(i=0; i < nspaces; i++)
putchar(' ');
for(i=0; i < nstars; i++)
putchar('*');
putchar('\n');
}
/*
n ( )
...* 1
..*** 2
.***** 3
******* 4
: LINES
n- : n*2 - 1
( ): LINES - n
...
drawOneLine __,
. ,
-
,
.
, ,
.
*/
void main(){
/* */
int LINES = 25; /* .
*/
int nline; /* */
/* () */
for(nline=1; nline <= LINES; nline++)
drawOneLine(LINES - nline, /* --> nspaces */
nline*2 - 1 /* --> nstars */
);
}
/* */
/* */
#include <stdio.h>
void drawOneLine(int nspaces, int nstars){
int i; /* , */
/* - */
for(i=0; i < nspaces; i++)
putchar(' ');
for(i=0; i < nstars; i++)
putchar('*');
putchar('\n');
}
void main(){
/* */
int LINES = 25; /* . */
int nline; /* */
/* 1.
- .
for(nline=1; nline <= LINES; nline++)
for(nline=0; nline < LINES; nline++)
25 , -
nline 1 .
.
n ( )
...* 0
..*** 1
.***** 2
******* 3
: LINES
n- : n*2 + 1
( ): LINES - n - 1
*/
/* () */
for(nline=0; nline < LINES; nline++)
drawOneLine(LINES - nline - 1, nline*2 + 1);
}
/*
char
( character).
'a' 'b' '+'.
:
char letter;
letter = 'a';
putchar(letter);
letter = 'b';
putchar(letter);
letter = '\n';
putchar(letter);
'\n' " " -
, new line.
, - .
.
\
'\\'
putchar('\');
printf ("\"); .
: putchar('\\'); printf("\\");
, \ ,
,
.
*/
/*
n, n 0,
(x % n) == 0
, /,
x%2.
x n
0 1 2 ... n-1.
2
0 x
1 x
*/
/* :
*--------------------------------------------------------*
: ,
drawOneLine - symbol -
.
.
*/
#include <stdio.h>
void drawOneLine(int nspaces, int nsymbols, char symbol){
int i; /* */
for(i=0; i < nspaces; i++)
putchar(' ');
for(i=0; i < nsymbols; i++)
putchar(symbol);
putchar('\n');
}
/* ,
"", .
*/
int LINES = 25; /* . */
void main(){
/* */
int nline; /* */
/* () */
for(nline=0; nline < LINES; nline++){
if((nline % 2) == 0) /* ? */
drawOneLine(LINES - nline - 1, nline*2 + 1, '+');
else drawOneLine(LINES - nline - 1, nline*2 + 1, '*');
}
}
/* , .
*/
#include <stdio.h>
/* -
.
*/
int LINES = 25; /* . */
/* , -
. drawLineNumber.
drawOneLine() !
- - .
if(x) .....;
( ):
( int).
, x != 0,
, x == 0.
- .
*/
void drawOneLine(int nspaces,
int nsymbols,
char symbol,
/* */
int drawLineNumber,
int linenum
){
int i; /* */
if(drawLineNumber)
printf("%d\t", linenum); /* */
/*
if(drawLineNumber != 0)
.
*/
/* \t - .
( )
8 .
:
| | | | | | | | | ...
.
| | | | | | | | | ...
^
| | | | | | | | | ...
^
*/
for(i=0; i < nspaces; i++)
putchar(' ');
for(i=0; i < nsymbols; i++)
putchar(symbol);
putchar('\n');
}
void main(){
/* */
int nline; /* */
/* () */
for(nline=0; nline < LINES; nline++){
if((nline % 2) == 0) /* ? */
drawOneLine(LINES - nline - 1, nline*2 + 1, '+', 1, nline);
else drawOneLine(LINES - nline - 1, nline*2 + 1, '*', 9, nline);
}
/* 1 9 ?
* , 0.
* 3, 333, 666, -13445,
*
* : , 0 ?
*/
}
/* ,
:
*+*+*+*.....*+*
.
*/
#include <stdio.h>
int LINES = 25; /* . */
void drawOneLine(int nspaces, int nsymbols){
int i;
for(i=0; i < nspaces; i++)
putchar(' ');
/*
.
*/
for(i=0; i < nsymbols; i++){
if((i % 2) == 0)
putchar('*');
else putchar('+');
}
putchar('\n');
}
void main(){
int nline; /* */
for(nline=0; nline < LINES; nline++) {
drawOneLine(LINES - nline - 1, nline*2 + 1);
}
}
/* :
*
***
*****
***
*
*/
#include <stdio.h>
int LINES = 10; /* . */
void drawOneLine(int nspaces, int nsymbols){
int i;
for(i=0; i < nspaces; i++)
putchar(' ');
for(i=0; i < nsymbols; i++)
putchar('+');
putchar('\n');
}
void main(){
int nline; /* */
for(nline=0; nline < LINES; nline++)
drawOneLine(LINES - nline - 1, nline*2 + 1);
/* .
.
.
:
LINES-2 0
*/
for(nline=LINES-2; nline >= 0; nline--)
drawOneLine(LINES - nline - 1, nline*2 + 1);
}
/* , . */
#include <stdio.h>
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);
putchar('\n');
}
void main(){
int LINES = 21;
int MIDDLELINE = LINES/2 + 1; /* */
int nline;
for(nline=0; nline < MIDDLELINE; nline++)
draw(MIDDLELINE - nline -1, nline*2+1, 'A');
/* for()
.
nline ,
, ,
MIDDLELINE.
*/
for( ; nline < LINES; nline++)
draw(nline - MIDDLELINE + 1, (LINES - 1 - nline) * 2 + 1, 'V');
}
- ,
.
.
N ,
- var.
-
var[0]
var[1]
...
var[N-1]
.
--------
/ var /
/ /
------------------------------------------- ------------------
| | | | | |
| | | | .... ... | |
| | | | | |
------------------------------------------- ------------------
/ var[0] / / var[1] / / var[2] / / var[N-1] /
--------- --------- --------- -----------
:
int var[N];
N - , .
N int
var[0] ... var[N-1];
n- ( 0 <= n < N)
var[n]
n - ( ,
), " ".
[] " ".
- N .
var - (N )
n - (), 0..N-1
var[n] - . .
n - - "" .
:
int var[5]; /* 1 */
var[0] = 2; /* 2 */
var[1] = 3 + var[0]; /* 3 */
var[2] = var[0] * var[1]; /* 4 */
var[3] = (var[0] + 4) * var[1]; /* 5 */
printf("var %d\n", var[3]);
:
var[0] var[1] var[2] var[3] var[4]
------------------------------------------------
/* 1 */
/* 2 */ 2
/* 3 */ 2 5
/* 4 */ 2 5 10
/* 5 */ 2 5 10 30
, .
- , ,
var0, var1, var2, ...
:
var[0], var[1], var[2], ...
- .
-
1)
2) - ,
- , .
---------------------------------------------------------------------
,
,
(, ).
printf("var4 %d\n", var[4]);
.
( ).
,
.
, .
---------------------------------------------------------------------
, .
int a[5];
int b[5];
a = b; /* */
() :
a = 0; /* */
, , .
:
int i;
for(i=0; i < 5; i++) /* i a[i] = 0; */
a[i] = 0;
---------------------------------------------------------------------
=======================
( )
, ( ) .
int i;
for(i=0; i < 5; i++)
a[i] = b[i];
.
.
:
int index, array[5];
for(index=0; index < 5; index++)
array[index] = index * 2 + 1;
int index, array[5];
index = 0;
while(index < 5){
array[index] = index * 2 + 1;
index++;
}
/* : { 1, 3, 5, 7, 9 } */
-
"/" .
-
, .
.
:
;
:
int a[N], i;
for(i=0; i < N; i++)
...a[i]...
---------------------------------------------------------------------
:
int a[5];
a[0] = 17;
a[0] += 4;
a[0]++;
---------------------------------------------------------------------
: .
:
f[1] = 1
f[2] = 1
f[n+2] = f[n+1] + f[n]
:
------------------
#include <stdio.h> /* */
#define N 20 /* */
void main(){
int fibs[N], index;
fibs[0] = 1; /* !!! */
fibs[1] = 1;
/* , */
for(index=2; index < N; index++)
fibs[index] = fibs[index-1] + fibs[index-2];
/* */
for(index = N-1; index >= 0; index--)
printf("%d- %d\n",
index+1, fibs[index]);
}
#define
N 20,
const int N = 20;
,
, #define - .
- char,
\0
char string[20];
string[0] = '';
string[1] = '';
string[2] = '';
string[3] = '';
string[4] = '';
string[5] = '';
string[6] = '\0';
printf("%s\n", string);
%s - .
.
char string[20];
string[0] = '';
string[1] = '';
string[2] = '';
string[3] = '';
string[4] = '';
string[5] = '';
string[6] = '\n'; /* - */
string[7] = '\0';
printf("%s", string);
printf(string);
""
char string[20] = "\n";
string[8] string[19]
.
" "?
=================================================
- .
,
( ).
, - (
). :
(1) .
( ).
char str[32]; /* */
int slen; /* slen */
...
func(str, &slen); /* */
...
,
: . .
(2) str[0],
- str[1] ... .
, str[0] 0 255,
- .
(3) , - .
func(str); /* - */
,
, :
int strlen(char s[]){ /* */
int counter = 0; /* */
while(s[counter] != '\0') /* */
counter++; /* */
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 ()
============================
, .
/* 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 !
/* */
#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');
}
}
/* :
...
, , , , ...
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'); */
}
/*
, .
.
*/
#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();
}
}
}
/* : 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.
*/
=========
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)
(), ,
pointer".
.
*pointer
,
.
________
/pointer/
_/_______/_
| |
| &var2 |
| |
|_______|_|
|
| 123
|
V
________
/ var2 /
_/_______/_
| |
| 123 |
| |
|_________|
pointer = &var2;
*pointer = 123;
*(&var2) = 123;
var2 = 123;
* & .
--------------------------------------------------------------------
:
*pointer = *pointer + 66;
*pointer += 66;
--------------------------------------------------------------------
(@). ?
/* #1 */
f(),
y (" y").
/* #2 */
ptr,
-
y.
/* #3 */
*ptr = 7;
*(&y) = 7; *(&main::y)=7;
y = 7; main::y=7;
.
, "y"
f() !
--------------------------------------------------------------------
: .
void main(){
int x, y;
int temporary; /* */
x=1; y=2;
temporary=x; x=y; y=temporary;
printf("x=%d y=%d\n", x, y); /* x=2 y=1 */
}
-----------------------------------------------------------------------
:
void swap(int *a, int *b){
int tmp;
tmp = *a; *a = *b; *b = tmp;
}
void main(){
int x, y;
x = 1; y = 2;
swap(&x, &y);
printf("x=%d y=%d\n", x, y);
}
-------------------------------------------------------------------------
:
int x;
int *ptr1, *ptr2;
ptr1 = &x; ptr2 = &x;
*ptr1 = 77;
printf("%d\n", *ptr2); /* 77 */
.
-------------------------------------------------------------------------
:
int x;
int *ptr1; /* */
x = *ptr1;
ptr1 , .
" " ( ).
.
: , .
.
"a"
int a[5];
.
()
a[0] a[1] ... a[4].
a &a[0]
a
|
|
|
V
a[0] a[1] a[2] a[3] a[4]
_________________________________________
| | | | | |
| | | | | |
| | | | | |
-----------------------------------------
int a[5];
/* , */
void f(int *a){ /* f(int a[]), */
printf("%d\n", a[1]);
a[2] = 7;
}
main (){
a[1] = 777;
f(a); /* - */
printf("%d\n", a[2]);
}
f(a); .
:
_1:
( ),
0- .
_2:
.
, *pointer,
: pointer[n].
.
int a[5]; /* */
int *ptr; /* */
ptr = a; /* , ptr = &a[0]; */
ptr[0] = 3; /* a[0] = 3; */
ptr[1] = 5; /* a[1] = 5; */
.
ptr = &a[2];
a[0] a[1] a[2] a[3] a[4]
_________________________________________
| | | | | |
a: | | | | | |
| | | | | |
----------------------------------------------
| | | | ...
ptr: | | | |
-----------------------------
-2 -1 ptr[0] ptr[1] ptr[2]
"" a[] ptr[].
ptr[0] a[2]
ptr[1] a[3]
ptr[2] a[4]
ptr[3] a[],
, !
ptr[-1] a[1]
ptr[-2] a[0]
ptr[-3] a[],
: .
, a[]
*a , a[0].
.
/* :
char.
A B C D ---> D C B A
.
*/
/* ( ) */
#include <stdio.h>
/* - . */
/* .
, - char,
'\0'.
\0 .
*/
int strlen(char s[]){ /* */
int counter = 0; /* */
while(s[counter] != '\0') /* */
counter++; /* */
return counter; /* , '\0' */
}
/* .
putchar(c).
, '\0' - .
,
, .
.
*/
int putstr(char s[]){
int i = 0; /* */
while(s[i] != '\0'){
putchar(s[i]);
i++;
}
putchar('\n');
return i;
}
/* .
:
1 .
: A B C D E F
<----------
: B C D E F F
-
.
n - .
:
: A B C D E F n=6
i=1 B B C D E F
i=2 B C C D E F
i=3 B C D D E F
i=4 B C D E E F
i=5 B C D E F F
i=6 ==> .
*/
void shiftLeft(char s[], int n){
int i;
for(i=1; i < n; i++)
s[i-1] = s[i];
}
/* .
:
- 1, ,
1 0 .
- > 1,
a) .
A B C D E F
|
|
V
tmp
b)
B C D E F F
c) .
tmp
|
V
B C D E F A
d) n-1.
{B C D E F}A
:
F E D C B A
.
s[] - ,
n - .
*/
void reverse(char s[], int n){
char tmp;
if(n <= 1) /* */
return;
tmp = s[0]; /* */
shiftLeft(s, n); /* */
s[n-1] = tmp; /* */
reverse(s, n-1); /* */
}
/* . .
, ,
length.
*/
void reverse1(char s[], int n){
char tmp;
int length;
for(length=n; length > 1; --length){
tmp = s[0];
shiftLeft(s, length);
s[length-1] = tmp;
}
}
char testString[] = "abcdefghijklmnopqrstuvwxyz";
/* , .
"..."
'\0' .
27.
*/
void main(){
int len;
len = strlen(testString);
/* : 26 ('\0' ) */
printf(" : \"%s\", %d\n",
testString, len);
/* :
- ( char) %s
- "..." "
\"
putchar ' putchar('\'');
*/
/* */
reverse(testString, len);
putstr(" :");
putstr(testString);
/* - */
reverse1(testString, len);
putstr(" :");
putstr(testString);
}
/* :
.
A B C D E F G H I J
J B C D E F G H I A
| |
J B C D E F G H I A
J I C D E F G H B A
| |
J I C D E F G H B A
J I H D E F G C B A
| |
----> <-----
J I H D E F G C B A
J I H G E F D C B A
| |
J I H G E F D C B A
| |
J I H G F E D C B A
.
*/
#include <stdio.h>
/* char */
void swap(char *s1, char *s2){
char c;
c = *s1; *s1 = *s2; *s2 = c;
}
void reverse(char s[], int n){
int first, last;
first = 0; /* */
last = n-1; /* */
while(first < last){ /* first last */
swap(&s[first], &s[last]);
first++; /* */
last--; /* */
}
}
char testString[] = "abcdefghijklmnopqrstuvwxyz.";
void main(){
int len;
len = strlen(testString); /* */
reverse(testString, len);
printf(" : %s\n", testString);
}
/* :
,
.
*/
#include <stdio.h>
char testString[] = "abcdefghijklmnopqrstuvwxyz.";
/* sizeof()/sizeof([0])
, .
( )
, .
*/
char tempString[ sizeof(testString) / sizeof(testString[0]) ];
void reverse(char s[], int n){
int i;
/* , tempString[] */
for(i=0; i < n; i++)
tempString[n-1-i] = s[i];
tempString[n] = '\0'; /* */
/* */
for(i=0; i < n; i++)
s[i] = tempString[i];
s[n] = '\0'; /* */
}
void main(){
int len;
len = strlen(testString); /* */
reverse(testString, len);
printf(" : %s\n", testString);
}
/* */
#include <stdio.h>
int arr[] = {1, 5, 10, 15, 20, 25, 30};
int arrLen = sizeof(arr) / sizeof(arr[0]); /* */
/* */
void printit(int row[], int n){
int i;
for(i=0; i < n; i++){
printf("%d", row[i]);
if(i == n-1) putchar('\n');
else putchar(' ');
}
}
/* . */
void printShift(int n){
n = arrLen - n;
while(n > 0){
printf(" ");
n--;
}
}
/* */
void shiftleft(int row[], int n){
int i;
for(i=1; i < n; i++)
row[i-1] = row[i];
}
/* */
void reverse(int row[], int n){
int pocket;
printShift(n); /* */
printf("CALLED reverse(row, %d)\n", n); /* */
if(n <= 1){
printShift(n); /* */
printf("return from reverse(row, %d);\n", n); /* */
return;
}
pocket = row[0];
shiftleft(row, n);
row[n-1] = pocket;
printShift(n); /* */
printit(arr, arrLen); /* */
reverse(row, n-1);
printShift(n); /* */
printf("all done; return from reverse(row, %d);\n", n); /* */
}
void main(){
reverse(arr, arrLen);
printit(arr, arrLen);
}
/* :
columns .
:
0 4 8
1 5 9
2 6 10
3 7
*/
/* n .
n < columns, (n=2, columns=4)
0 1
if(n < columns) columns = n;
, columns lines
columns*lines . :
columns*lines >= n
.
,
lines >= n/columns
lines = (n + (columns - 1)) / columns;
.
(y) (x).
index(x, y) = (x * lines + y);
index >= n,
*/
#include <stdio.h>
int array[100];
void printArray(int a[], int n, int columns){
int lines; /* */
int x, y; /* , - */
int index; /* */
if(n < columns) columns = n;
lines = (n + (columns-1)) / columns;
/* : , - */
for(y=0; y < lines; y++){
for(x=0; x < columns; x++){
index = x * lines + y;
if(index >= n) /* */
break; /* */
/* break
( ) */
/* */
if(x != 0) putchar('\t');
printf("%02d|%d", index, a[index]);
/* %02d
,
,
.
*/
}
putchar('\n'); /* */
}
}
void main(){
int i, cols;
/* */
for(i=0; i < 100; i++)
array[i] = i + 1;
for(cols=4; cols <= 13; cols++){
printf("\t\t* * * %d * * *\n", cols);
printArray(array, 77, cols);
putchar('\n');
}
}
#include <stdio.h>
main(){
int x, y;
int COLUMNS = 11;
int LINES = 10;
int value;
/* */
for(y=0; y < LINES; y++){
/* */
for(x=0; x < COLUMNS; x++){
/* */
value = LINES * x + y;
/* ,
*/
if(x > 0) putchar('\t');
/* ... */
printf("%d", value);
}
putchar('\n'); /* */
}
}
/*
elem(x, y) = LINES * x + y;
elem(0, y+1) - elem(COLUMNS-1, y) = 1 + LINES - COLUMNS*LINES;
elem(x+1, y) - elem(x, y) = LINES;
*/
#include <stdio.h>
int A = 150; /* */
int COLUMNS = 7; /* */
int LINES; /* */
int value; /* */
int OFFSET_NEXT_COLUMN;
int OFFSET_NEXT_LINE;
/* */
void line(){
int col; /* */
for(col=0; col < COLUMNS; col++){
if(value >= A) /* */
printf("* ");
else printf("%03d ", value);
/* */
value += OFFSET_NEXT_COLUMN; /* 1 */
}
/* */
putchar('\n');
/* .
, value OFFSET_NEXT_COLUMN 1,
OFFSET_NEXT_COLUMN + OFFSET_NEXT_LINE
1 - LINES*COLUMNS + LINES,
.
*/
value += OFFSET_NEXT_LINE; /* 2 */
}
int main(){
int nline; /* */
LINES = (A + (COLUMNS - 1)) / COLUMNS;
OFFSET_NEXT_COLUMN = LINES;
OFFSET_NEXT_LINE = 1 - LINES*COLUMNS;
for(nline=0; nline < LINES; nline++)
line();
/* 0 main() " " */
return 0;
}
/* */
/*
.
:
int array[LINES][COLUMNS];
:
array[y][x]
0 <= y <= LINES - 1
0 <= x <= COLUMNS - 1
+-------------+-------------+-------------+------> x
| array[0][0] | array[0][1] | array[0][2] | ...
+-------------+-------------+-------------+
| array[1][0] | array[1][1] | array[1][2] | ...
+-------------+-------------+-------------+
| array[2][0] | array[2][1] | array[2][2] | ...
+-------------+-------------+-------------+
| ... ... ...
V
y
, ,
.
*/
/* , ,
,
.
,
. .
*/
#define LINES 31 /* */
#define COLUMNS 79 /* */
char field[LINES][COLUMNS];
/* ,
.
, .
*/
void line(int x1, int y1, int x2, int y2, char sym){
int dx, dy, i1, i2, i, kx, ky;
int d; /* "" */
int x, y;
int flag;
dy = y2 - y1;
dx = x2 - x1;
if (dx == 0 && dy == 0){
field[y1][x1] = sym; /* */
return;
}
kx = 1; /* x */
ky = 1; /* y */
/* */
if( dx < 0 ){ dx = -dx; kx = -1; } /* Y */
else if(dx == 0) kx = 0; /* X */
if(dy < 0) { dy = -dy; ky = -1; }
if(dx < dy){ flag = 0; d = dx; dx = dy; dy = d; }
else flag = 1;
i1 = dy + dy; d = i1 - dx; i2 = d - dx;
x = x1; y = y1;
for(i=0; i < dx; i++){
field[y][x] = sym; /* */
if(flag) x += kx; /* . */
else y += ky;
if( d < 0 ) /* */
d += i1;
else{ /* */
d += i2;
if(flag) y += ky; /* */
else x += kx;
}
}
field[y][x] = sym; /* */
}
int main(){
int x, y;
/* */
for(y=0; y < LINES; y++)
for(x=0; x < COLUMNS; x++)
field[y][x] = ' ';
/* */
line(0,0, 0, LINES-1, '*');
line(0,0, COLUMNS-1, 0, '*');
line(COLUMNS-1, 0, COLUMNS-1, LINES-1, '*');
line(0, LINES-1, COLUMNS-1, LINES-1, '*');
line(0,0, COLUMNS-1, LINES-1, '\\');
line(COLUMNS-1,0, 0,LINES-1, '/');
/* */
for(y=0; y < LINES; y++){
for(x=0; x < COLUMNS; x++)
putchar(field[y][x]);
putchar('\n');
}
return 0;
}
Last-modified: Fri, 05 Nov 2004 22:22:09 GMT