Вы находитесь на странице: 1из 44

( )

2010 .

. . ..


.
.

- 220100.
004.451.9
. / . . ; . .. . ., 2010, 44 .
. 23. .: 4 .

1.
2.
3.
4.
5. -
6.
7.
8.
9. , , ,
10.
11.
12.
13.
14.
15.
16.
17. time
18.
19.
20.
21.
22.
23.
24.

4
4
7
8
10
14
14
16
17
18
20
23
24
28
29
30
31
31
32
33
37
39
40
42
43

1.
1972 .
,
, ,
.

, C++ C#.
(
),

. , , ,
.
, .
-
C++ . ,
, C++,
.cpp .c.

2.
, ,
. ,
. , ,
.
.
, .

#include.
,
, .
( ),
.

. ,
/* */.
. C++
, //.
.
,
.

, .
.
.
, ,
() .
, .
.
: , , .
,
, .
long, l L .
,
, .
, E e.
- , ,
.
, ,
. .
0 ( ).
.

ESC-.
\n \t
( 8 ).
,
.
: * , / , %
.
: + ,
.
: < , <= , > ,
>= , = = , != .
: ! , && , || .
: + + ( 1),
( 1), = , + =
, = , * =
.
: & () ; *
, .
, , .
.
.
, .
.

:
break ;
continue ;
do
;
for ;
goto ;
if
;
return ;
switch ;
while .
- ().
.
.
,
.
( ,
). .
.
,
.
main,
..
.
.
.
,
,
, .
, , .
:
char ( 128127),
int ( ),
short (3276832767),
long (21474836482147483647),
unsigned char (0255),
unsigned ( ),
unsigned short (065535),
unsigned long (04294967295),
float ,
double .
void, ,
.
.
:

int x;
float f;
int list[20];
char *cp;

//
//
// 20
//

, ,
.

.
.
,
. ,

.
:
int i=0;
float x=5.0, y=10.0;
int A[5]={1,2,3,4,5};
char text[]=;

i,
0. x 5,
y 10. 5 ,
1 5.
text, .

3.
if :
if () 1 else 2

if , :
, 1, 2. else
.
for :
for (; ; )

for , .
. ,
, ,
.
while :
while ()

while , . ,
.
do :
do while ();

do , .
, .

break .
continue .

4.

. :
#include <stdio.h>
int main()
{
printf("!\n");
}

,
-. stdio.h
-,
.

main. main .
,
, .
,
. ,
. ,
.
printf
"!\n". printf
, (
). %, ,
. \n ,

(printf ).
,
main.
% printf
. ,

.
, %. , %d ,
, %f
.
,
, 0 9:
#include <stdio.h>
void main(void)
{
8

int i;
for(i=0; i<=9; i++) printf(%d\n, i);
}

main int,

.
main void.
,
void,
( ).
,
. ,
1.
, ,
+=; ,
, *=.
, 1 99
1 7, :
#include <stdio.h>
void main(void)
{
int i, s, p;
// 1 99
s = 0;
for(i=1; i<100; i++) s += i;
printf( 1 99 %d.\n, s);
// 1 7
p = 1;
for(i=1; i<=7; i++) p *= i;
printf( 1 7 %d.\n, p);
}

, while :
#include <stdio.h>
void main(void)
{
int i;
char s[]=;
i=0;
while(s[i] != 0) i++;
printf( %d .\n, i);
}

while ,
0, ( ,
).
i .
, .
9

F
5 , ,
:
#include <stdio.h>
void main(void)
{
int i, k;
float F[5] = {1, 12.6, -7.3E3, 124.5, -15};
float b;
k = 0;
//
b = F[0]; //
// ,
for(i=1; i<5; i++)
{
if(F[i]>b) //
{
// :
k = i;
//
b = F[i]; //
}
}
printf(" : %d, : %f\n",k,b);
}

5. -
, ,
.
.

( ,
#include).
, ,
-, stdio.h. ,
, :
#include <stdio.h>

- ,
-. ,
.
gets stdin
buffer:
char *gets(char *buffer);


\n. gets ,
.
10

( NULL
).
0.
puts string
stdout, \n.
:
int puts (char *string);

puts .
,
( EOF ).
,
,
. - ,
,
.
,
:
#include <stdio.h>
void main(void)
{
char line[80];//,
gets(line);
//
puts(line);
//
}

,
.
getchar ,
int. :
int getchar(void);

, .
getchar ,
, - .

:
.
,
1 100 20 :
#include <stdio.h>
void main(void)
{
int i;
for(i=1; i<=100; i++)
{
printf(%d\n,i);
if(i%20==0)
{
11

printf( .\n);
getchar(); //
}
}
}

,
20. ,
,
.
printf ( ) scanf ( )
.
:
int printf(const char *format, ...);
int scanf(const char *format, ...);

printf ( EOF
). scanf ,
.
printf scanf
() , ,
.
: .
%
. : d , o
, x , u , c
, s , e ( ), f
. printf
% :
- , ,
- -,
- , ,
- l long.
printf scanf .
, , printf
, scanf
,
.
, scanf,
, &. ,
,
.
, N
1 N:
#include <stdio.h>
void main(void)
{

12

int i, N;
printf( N: );
scanf(%d, &N);
printf( :\n);
for(i=1; i<=N; i++) printf(%2d %4d\n, i, i*i);
}

, ,
.
, .
printf .
i.
, while
:
#include <stdio.h>
void main(void)
{
int i;
char s[100];
printf( :\n);
gets(s);
i=0;
while(s[i] != 0) i++;
printf( %d .\n);
}

gets, scanf
.
:
#include <stdio.h>
main()
{
double r, pi=3.1415926535;
printf(" : ");
scanf("%lf", &r);
printf(" : %f\n", pi*r*r);
}


.
double
( l) .
long double ,
.

13

6.
math.h.
, ,
:
#include <math.h>

:
double cos(double x)
;
double fabs(double x) ;
double exp(double x)
;
double log(double x)
;
double log10(double x) ;
double sin(double x)
;
double sqrt(double x) ;
double tan(double x)
.
,
: double
double.
, x,
ex :
#include <stdio.h>
#include <math.h>
main()
{
double x, y;
printf(" x: ");
scanf("%lf", &x);
y = exp(x);
printf("exp(x)=%f\n", y);
}

7.
char, .
, ,
.
, (
):
int Len(char *string)
{
int j=0;
while(string[j] != 0) j++;
return j;
}

14

,
.
. ,
strlen, Len
.

, ,
,
string.

, ,

0).
1.
,
.

. 1.
k ,
, k
, .
,
:
, ('\0').
(
), ,
.
2.

. 2.

15

,
. :

.

8.
,

.

. string.h,
#include ..
, .
strcat .
:
char *strcat(char *dest, const char *src);

src dest
.
strchr .
:
char *strchr(const char *s, int c);

s.
s; c s, strchr
NULL.
strcmp .
:
int strcmp(const char *s1, const char *s2);

strcmp s1 s2,
, ,
.
, s1 s2, , s1 s2,
, s1 s2
strcpy .
:
char *strcpy(char *dest, const char *src);

src dest dest.


strlen .
:
size_t strlen(const char *s);

s (
).
strstr .
:
char *strstr(const char *s1, const char *s2);
16

s2 s1.
s1, s2. s2
s1, NULL.

9. , , ,
Q , n :

Q q1 , q2 ,..., qn .
Q .
,
, ,
..
,
Q, n
. , ,
.
n (n ) n
, :
n

n! 1 2 ... (n 1) n i .
i 1

: , 0! = 1.
, n,
n! :
#include <stdio.h>
void main()
{
int i, n, nf;
printf(" n: ");
scanf("%d",&n);
//
nf=1;
for(i=1;i<=n;i++) nf*=i;
printf("n! = %d\n",nf);
}

,
1 .
nf.
, m ,
n Q, n

17

m. n
m Anm :

Anm

n!
(n m)! .

, m
, n Q,
n m.
n m C nm :

C nm

n!
m!(n m)! .

10.

. ,
:

x3 x5 x7
sin x x

... ;
3! 5! 7!
x2 x4 x6
cos x 1

... ;
2! 4! 6!
e

x2 x3 x4
1 x

... .
2! 3! 4!

, .
,
(
,
).
:
#include <stdio.h>
void main()
{
double x, sinx, xx, px, dx, sgn, n, nf;
// x
printf(" x: ");
scanf("%lf",&x);
18

// x
xx=x*x;
// ,
//
px=x;
sgn=1;
n=1;
nf=1;
dx=x;
//
sinx=x;
//
while(dx>0.0001 || dx<-0.0001)
{
//
sgn=-sgn;
// x
px*=xx;
//
n++;
nf*=n;
n++;
nf*=n;
//
dx=sgn*px/nf;
//
sinx+=dx;
}
//
printf("sin(x) = %f\n", sinx);
}


, ,
0,0001,
.
:

x;

x2;

n n ;

px xn;

nf n!;

sgn
( 1 1).

dx ;

sinx .
n! xn
, .
19

11.
, mn (. 3),
m n ( mn).

a11 a12
a
21 a22
... ...

am1 am 2

... a1n
... a21
... ...

... amn

. 3. mn
aij (i = 1, , m; j = 1, , n) ; i
, j .
.
:
,
. , A 35, ,
:
int A[3][5];


. :
, ..
,
. nn, n
.
A B ,
aij = bij i = 1, , m j = 1, , n (..
, ).

, .
A B,
bij = aij.
A B, ,
S, sij = aij + bij.
, A B C,
A B.

for: , .
for.
20

,
, ,
, , .
, C,
A B:
#include <stdio.h>
void main()
{
int i, j, k, C[3][3];
int A[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int B[3][3]={{11,12,13},{14,15,16},{17,18,19}};
//
for(i=0;i<3;i++) for(j=0;j<3;j++) C[i][j]=A[i][j]+B[i][j];
//
for(i=0;i<3;i++)
printf("%d\t%d\t%d\n",C[i][0],C[i][1],C[i][2]);
}

A B, 33,
.
C .
, (
). , ,
(
),
.
A mn nk,
A B C mk,

n

cij air brj


r 1

.. , i- j- C
i- A j- B.
,
: C, C
.
C, , .
a11, a22, , ann n
. , a11, a22, , ann
.
, aij = 0 i j,
(. 4).

21

a11 0
0 a
22

... ...

0
0

0
0
... ...

... a mn
...
...

. 4.
, 1,
, E (. 5).

1
0

...

0 ... 0
1 ... 0
... ... ...

0 ... 1

. 5.
A mn. AT, A
(aTji = aij), nm
(. 6).

1 2 3
A

4 5 6
1 4
AT 2 5
3 6
. 6.
A , AT = A.
. 7.

22

1 2 3
2 4 5

3 5 6
. 7.
, A 32,
AT :
#include <stdio.h>
void main()
{
int i, j, k, A[3][2], AT[2][3];
//
for(i=0;i<3;i++) scanf("%d %d", &A[i][0], &A[i][1]);
//
for(i=0;i<2;i++) for(j=0;j<3;j++) AT[i][j] = A[j][i];
//
for(i=0;i<2;i++)
printf("%d\t%d\t%d\n", AT[i][0], AT[i][1], AT[i][2]);
}

12.
,
,
, .
i j
:
1) i ;
2) j i;
3) j.
i j A:
int i, j, b, A[10];
...
b = A[i];
A[i] = A[j];
A[j] = b;

, ,
,
( ). ,
,
(
).

23

.
: n , i , j .
i 1 n-1,
j 0 i-1.

13.
, ,

. 8-
unsigned
char mn. 16- (
unsigned), 32- ( unsigned long),
- mn.
,
, ..
.

.
y,
x, ( ) n,
i.

:

i yn x .
,
.
,
- 256 :
void Negative(unsigned char *Image, int m, int n)
{
int i;
for(i=0; i<m*n; i++) Image[i] = ~Image[i];
}

Image,
, m
n. ,
, ,
.
,
, ,
. .

24

( ) ( 90
180) ,
()
().

, 180 (
) ,
.
: , ,
.

(. 8), n/2:
x (n-x-1).
, , ,
.

. 8.
,
:
void LeftToRight(unsigned char *Image, int m, int n)
{
int x, y;
unsigned char b;
for(y=0; y<m; y++) for(x=0; x<n/2; x++)
{
//
b = Image[y*n+x];
Image[y*n+x] = Image[y*n+n-x-1];
Image[y*n+n-x-1] = b;
}
}

25


(. 9) , m/2: y
(m-y-1).
, , , .

. 9.
180 (. 10)
(. 11). ,
, : i
mni1, i 0
(mn)/2.

. 10. 180

. 11.

26

90 (. 12), (
mn),
nm .
.

. 12. 90
(
, , ).
, TrueColor
- 256 ,
.

(R, G B) 3, .
( , 3)
, .
.

. k
kk (. 13).
( ).

. 13.
k ,
kk (. 14).
, , ..
k2.
.
.

27

. 14.

.
, ..
; ,
,
.
, ..
; ,

, .
,
, .
: ,
.
,
,
.

14.
stdlib.h.
rand
232, 0 RAND_MAX (215 1).
:
int rand(void);

, 10
0 99:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i;
printf("10 0 99:\n\n");
for (i=0; i<10; i++) printf("%d\n", rand()%100);
}
28

random 0 (n 1) .
:
int random(int n);

randomize
. :
void randomize(void);

,

( ,
).
randomize (
).
randomize time,
time.h.
, :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void)
{
randomize();
printf("%d\n", random(10));
}

,
randomize .
srand seed.
:
void srand(unsigned seed);

15.


.
,
.

. -
: ,
.

. j-
(j-1), , j-
(j-1)-.

29

(n-1) , n .
,
. (n-1) , ,
.
,
:
void Bubble(int *A, int n)
{
int i, j, b;
for(i=n; i>1; i--)
{
for(j=1; j<i; j++)
if (A[j-1]>A[j]) {b=A[j]; A[j]=A[j-1]; A[j-1]=b;}
}
}

16.
qsort , .
stdlib.h :
void qsort(void *base, size_t nelem, size_t width,
int(*fcmp)(const void *, const void *));

qsort
, fcmp.
qsort:
- base ;
- nelem ;
- width ;
- fcmp .
*fcmp elem1 elem2,
.
*elem1 *elem2
( *elem1 < *elem2 , *elem1 = *elem2
, *elem1 > elem2 ).
qsort
:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int sort_function(const void *a,const void *b)
{

30

return(*(int *)a - *(int *)b);


}
void main()
{
int i, A[10];
randomize();
for(i=0; i<10; i++) A[i]=rand();
printf(" :\n");
for(i=0; i<10; i++) printf("%d\n",A[i]);
qsort(A, 10, 2, sort_function);
printf(" :\n");
for(i=0; i<10; i++) printf("%d\n",A[i]);
}

17. time
time time.h :
time_t time(time_t *tloc);

time , tloc,
, ,
1 1970 , ( time_t
long).
time ,
, ,
NULL,
.

18.
,
.
.
,
, ,
time, . ,
: ,
,
.
,
, , for:
#include <stdio.h>
#include <time.h>
void main(void)
{
time_t Before, After;
31

long i, DeltaT;
(void)time(&Before);
for(i=0; i<1000000000l; i++); //
(void)time(&After);
DeltaT = After Before;
printf(": %ld .\n", DeltaT);
}

time.

- .

. ,
.
,
for:
#include <stdio.h>
#include <time.h>
void main(void)
{
time_t t0, t1;
long i, dt;
t0 = time(NULL);
for(i=0; i<1000000000l; i++); //
t1 = time(NULL);
dt = t1 t0;
printf(": %ld .\n", 1000000000l/dt);
}

time.

19.
.
:
.
,
. struct
.
, x y:
struct Point {int x,y;};

.
, :
struct Line {
unsigned char Color; //
struct Point p1, p2; //
};

32


,
:
.
>

,
.
.
, Line
:
void NewLine(struct Line *L, unsigned char LineColor,
int x1, int y1, int x2, int y2)
{
L->Color = LineColor;
L->p1.x = x1;
L->p1.y = y1;
L->p2.x = x2;
L->p2.y = y2;
}

NewLine: L ,
; LineColor ; x1, y1 ; x2, y2
.
p1 p2 L
,
.

20.
x1, , xn, n 0.
n = 0 .
. ,
,
. ,
. .
. ,
.
, ,
.
: .
(. 15) ,
.
,
.
(NULL), ,
.
33

. 15.

.
.

. .
,
, .
, C A.
(. 16):
1) B A C;
2) C A.

. 16.
A ,
C NULL, C

, .
, :
#include <stdio.h>
// ,
struct ListEl {
char *Text;
//
struct ListEl *Next; //
};
// El2 El1
void InsElement(struct ListEl *El1, struct ListEl *El2)

34

{
El2->Next = El1->Next;
El1->Next = El2;
}
//
void main(void)
{
struct ListEl El1, El2;
char s1[]=" 1", s2[]=" 2";
//
El1.Text = s1;
El1.Next = NULL;
//
El2.Text = s2;
El2.Next = NULL;
//
InsElement(&El1, &El2);
}


:
.
(. 17)
,
.
,
.

. 17.
,
. :
struct ListEl {
char *Text;
//
struct ListEl *Prev; //
struct ListEl *Next; //
};

,
, , Prev
Next.

35

.
(. 18).

. 18.
, C
A (. 17). :
1) B A C ( B
C);
2) A C ( A
C);
3) C A ( C
A);
4) C B ( C
B);

. 19.
(. 19),
C,
A (
, NULL).

36

21.
, ,
.
FIFO , .
(. 20).

. 20.
-
.
, , , ,
:
struct RingStruct
int First;
int Last;
int Array[100];
} Ring;

{
//
//
//

Array ,
. First ,
Last 1 (..
).
,
(
RingStruct Ring).

:
void InitRing(void)
{
Ring.First=0;
Ring.Last=0;
}

Ring ,
InitRing .
Array[Last] Last
. (
), ( Last
37

) .
Last First,
.
, :
void InsToRing(int a)
{
Ring.Array[Ring.Last] = a; //
Ring.Last++;
//
// ,
if(Ring.Last>=100) Ring.Last=0;
//
if(Ring.First==Ring.Last)
{
printf(" !\n");
exit(1);
//
}
}

InsToRing
.
exit
. stdlib.h
:
void exit(int status);

status . ,
, ,
. ,

.

,
1.
Array[First] First
. ,
( First ).
First Last , ( ):

.
, :
int GetFromRing(void)
{
int a; //
//
if(Ring.First==Ring.Last) exit(2); //
a = Ring.Array[Ring.First];
//
Ring.First++;
//
// ,

38

if(Ring.First>=100) Ring.First=0;
//
return a;
}


2.

22.
(. 21) ,
, .
LIFO , , ..
.
,
.

. 21.
, , ,
, :
struct StackStruct {
int n;
//
int Array[100]; //
} Stack;

n
( , ,
n-1). Array . ,
, .
,
(
StackStruct Stack).
,
Array[n], n .
, n , Array[n].

39

,
(
).

23.
(. 22) ,
(), -.
, . ,
, . ,
, .
( ):

. 22.
.
, , ,
- .
: 0,
1 .
.
.
, ,
().
:
struct TreeNode {
char *Text;
//
struct TreeNode *Father; //
struct TreeNode *Left;
//
struct TreeNode *Right; //
};

n ,
n , n
.

40

.
, .
,
.
, .
, ,
.
. 23.

. 23.
Deep, :
void Deep(struct TreeNode *Node, int *k, int *d)
{
//
// ,
if(*k>*d) *d = *k;
//
(*k)++;
//
if(Node->Left!=NULL) Deep(Node->Left, k, d);
//
if(Node->Right!=NULL) Deep(Node->Right, k, d);
//
(*k)--;
}

Deep Node,
k
d.

. ,
.

41

.
, .
, ,
.
, . ,
,
. .
k d .

;
,
.

24.
, ..
, .
, , ,
,
.
malloc farmalloc,
alloc.h:
void *malloc(int size);
void far *farmalloc(unsigned long nbytes);

malloc size
.
, NULL.
farmalloc nbytes .
,
( ).

. , malloc
farmalloc free farfree :
void free(void *block);
void farfree(void far *block);

:
#include <stdio.h>
#include <alloc.h>
void main(void)
{
char *str;
str = malloc(100);
gets(str);
puts(str);
free(str);

//
//
//
//

42

sizeof
:
struct ListEl *Elem;
Elem = malloc(sizeof(struct ListEl));

,
, malloc:
void *Create(char *s)
{
struct TreeNode *Node;
//
Node = malloc(sizeof(struct TreeNode));
//
Node->Data = s;
//
Node->Father = NULL;
Node->Left = NULL;
Node->Right = NULL;
return Node;
}

Create ,
.
, ,
,
.


1.
2.
3.
4.

. . : , 1996. 384 .:
.
. : . . : , 1992. 687 .:
.
. . : . . / . ..
. 2- . : , 1992. 272 .: .
.. . /
. .. . 3- . : , 1983. 480 .

43


http://www.miem.edu.ru/rio
rio@miem.edu.ru


. 6084/16.
2. - .
. ..
-..
50 .
. .
.

109028 , . . 3.

.
113054 , . . , 12.

44