91
1 ΑΡΙΣΟΣΔΛΔΙΟ ΠΑΝΔΠΙΣΗΜΙΟ ΘΔΑΛΟΝΙΚΗ ΠΟΛΤΣΔΥΝΙΚΗ ΥΟΛΗ – ΓΔΝΙΚΟ ΣΜΗΜΑ ΣΟΜΔΑ ΤΠ. ΜΔΘΟΓΩΝ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Η/Τ ΔΡΓΑΣΗΡΙΟ ΠΛΗΡΟΦΟΡΙΚΗ ΓΛΩΑ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ C (Ππόηςπο ANSI) ΔΡΓΑΣΗΡΙΑΚΔ ΗΜΔΙΩΔΙ . Κοπηέζηρ ΘΔΑΛΟΝΙΚΗ 2011

Σημειώσεις c

Embed Size (px)

DESCRIPTION

Σημειώσεις c

Citation preview

  • 1

    . /

    C

    ( ANSI)

    .

    2011

  • 2

    1.

    C . , C , BASIC Pascal. . bits, bytes , - .

    , C , ' .

    C , 32 ANSI 159 BASIC. - , - .

    C "" ( C - ). -. - . - . "" C.

    C - , - , - . C .

    1.1 ANSI C++

    C . - ANSI - . - .

    , - , - C . - C++ C -. ANSI C C++. -

  • 3

    , , .

    , , - ANSI 4.5 Borland. , , - .

    1.2

    C .

    , - C, . - bit. bits 1 0 .

    bits , 8 bits, bytes. bytes 0. byte, , byte.

    1.3 /

    /. -. bites.

    bytes bits 0 1 . 351 - 101011111. 2 bytes, 16 bits

    0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

    To bit . + bit 0 bit 1.

    x10 [0.1 , 1) - . 23,45 0,2345x10

    2. 23,45 . 2345 2 . , bytes , . -

  • 4

    . - 2 .

    4 bytes. byte - 3 -.

    S S

    bit . 7 bits 128 ( 2 - ). - 1038. - 38 31 bits - 6 7 . - .

    - . , , . 5 .

    bytes . 2 byte 6 10308 18 .

    2. C

    2-1 32 - ANSI C. - . C .

  • 5

    auto double int struct

    break else long switch

    case enum register typedef

    char extern return union

    const float short unsigned

    continue for signed void

    default goto sizeof volatile

    do if static while

    2-1. ANSI C

    C . , for , FOR For .

    C ; . C - , ; - . . C -. - ;. . C .

    C blocks - .

    block { }. blocks -. block -. block , - blocks. blocks - C.

    C . C . .

    ( ) block. { }. block .

    C . , , -. .

    - main(). -

  • 6

    . main() , C, .

    main()

    {

    }

    .

    .

    .

    .

    .

    fn()

    {

    }

    2-1. C

    C - (.. , ...). . , . - blocks block.

    .

    C - . /* */.

    . -

    /* : test.c

    : ANSI C */

    .

    3. , , C

    C, , - .

    - , , - .

  • 7

    -.

    3.1 C

    C -, , . (strings) 1 32 . - a-z, A-Z, 0,1,...,9 _. .

    Ab_d32 _aBC5

    3Abcd .

    3.2 .

    bytes bytes .

    . C, , .

    C, bytes - , - bytes 8 bit, 3-1. ' .

    Bytes

    char 1 -128 127

    int 2 -32768 32767 float 4 3.4E-38 3.4E+38

    double 8 1.7E-308 1.7E+308 void 0 -

    3-1. C

    C structures, unions ...,. .

    char int , float double . void - . , - . - , , void.

    C - , char ASCII -. .

  • 8

    , ASCII , - .

    TRUE FALSE .

    3.3

    - - bytes -. C - . :

    signed

    unsigned

    long

    short

    signed unsigned char int. , -

    signed char x;

    x 1 byte .

    unsigned int k;

    k bit byte . - k 0 , 2 bytes, 0 65535 216-1.

    int 2 4 bytes -. long short, int, - :

    short , -, 2 bytes. - long 4 bytes . short long int short int long int short - long .

    unsigned long k;

    unsigned short k;

    long long double bytes .

  • 9

    3.4

    - . - :

    _;

    C - _, C . :

    long n,m,z;

    4 bytes, n, m z, - .

    (declaration) . , (definition) .

    3.5

    , , -. - .

    . - . :

    ) .

    ) - block .

    ) blocks .

    block - block. - block - - block. block - .

    , . ( - ) block - . block .

  • 10

    , - ' , .

    int k;

    int fun1(int x)

    {

    int z;

    .

    .

    }

    long m;

    void fun2(float y)

    {

    long n;

    .

    .

    }

    k . x z fun1(). fun1(). . m . fun2() fun1(). y n fun2().

    3.6

    , , - . , ,

    extern

    static

    register

    auto

    extern , , - . C - , - . , , -. - extern. , .

  • 11

    x,y,c

    int x,y; char c; 1. 2 extern

    int x,y; extern char c; , -

    .

    extern int x; fun1() 1 - x , .

    1 2 int x,y;

    char c;

    void main()

    {

    .

    .

    .

    }

    void fun1()

    {

    extern int x;

    x = 100;

    }

    extern int x,y;

    extern cahr c;

    void fun2()

    {

    y = 30;

    }

    void fun3()

    {

    x = y/10;

    }

    static, block, - block. block , , block. - static block - - . - .

    static , , .

    register . register - . register . - CPU - -. - . register - . - register .

    , auto block .

  • 12

    3.7

    C , . , - , - - .

    , -, .

    int x = 5,y = 7;

    x y ' - 5 7 .

    3.8

    C -.

    x = 5;

    5 int. C.

    - .

    z=5.;

    5. . , ,

    .

    c=A;

    c 65 ASCII .

    C , (strings). . "test" . - string - bytes byte - \0 ( \0 byte ASCII 0). string byte - .

    string char .

    3.9 C

    .. , C \ (backslash). 3-2.

  • 13

    \a bell \\ backslash

    \b backspace \? question mark

    \f formfeed \' single quote

    \n newline \" double quote

    \r carriage return \o octal

    \t horizontal tab \x hexadecimal

    \v vertical tab

    3-2. C

    3.10

    C . , . . , . - -.

    3.10.1 =

    = - .

    . :

    _ = ;

    = =. . . , , , . -

    short x;

    unsigned char c;

    x = 3000;

    c = x;

    c unsigned char byte. x, short, bytes x 255, c - byte x .

    C . .

    a = x+3 8 - a. 8 2 y - (10) z.

    int x,y,z,a;

    x = 5;

    y = 2;

    z = y+(a=x+3);

  • 14

    a = x+3 -

    ;. z = y+(a = x+3); ,

    . C

    .

    x = y = z = a = 0;

    0 .

    3.10.2

    C 3-3.

    +

    - *

    / %

    -- ++

    3-3 C

    . % .

    int x = 5,y = 3,k;

    k = x%y;

    k 2. -- ++, ,

    . -- (++). --x (++x) x-- (x++). - x () . , --x (++x) , x () 1 - . - .

    int x = 3,y = 2,z=3,k,m;

    k = ++x+y;

    m = (x++)+y;

    k 6 x 4, m 5 z 4. - 3-4.

    ++ , -- * , / , %

    + , -

    3-4 C

  • 15

    3.10.3

    C, - 3-5 3-6. 3-7 - .

    >

    >= <

    , >= , < , 3 && x < 5 && x%2 && 7 < 4;

    x>3 FALSE, , - , k FALSE.

    C . - . 1 0.

    x = 2;

    y=x+(x>1);

    , x>1 , y 3.

    3.10.4

    C . . 3-8.

  • 16

    & AND OR

    ^ OR ~

    >>

  • 17

    ASCII code Y = 89 = 0 1 0 1 1 0 0 1

    ASCII code '8' = 56 = 0 0 1 1 1 0 0 0

    Y^'8' = 0 1 1 0 0 0 0 1 = 97 = ASCII code a

    ~ ~x. x. , x 01100110, 10011001.

    >> x>>N . - bit . bit - . , , x 01100110 2 x >> 2 00011001 ( ).

  • 18

    3.10.6 & * pointers

    pointer - . - byte . , . - , byte . - .

    pointers - pointers. . :

    *;

    . .

    int *p;

    p int.

    pointer & . , pointer , , , pointer, *. -

    , , m

    int. m = &a; -

    a m. b=*m; b m. m a b a.

    int *m,a,b;

    m = &a;

    b=*m;

    3.10.7 sizeof

    sizeof bytes .

    float a;

    int k,n,m,b[10];

    k = sizeof a;

    n = sizeof(int);

    m = sizeof b;

    k bytes - a. n

  • 19

    bytes - . m bytes b[ ] .

    .

    3.11

    C , , - . ,

    x = x+100;

    x += 100;

    C - .

    = ;

    3.12 C

    C , . - ' . . .

    1. char short int. float double.

    2. , long double, , , - long double.

    , double, double.

    , long, long.

    , unsigned, - unsigned.

    - 10-1.

    () [ ]

    ! ~ ++ -- * & sizeof

    * / %

    + -

    >

    < >=

  • 20

    == !=

    &

    ^

    &&

    ?

    = += -= *= /=

    3-9. C

    - , -, . , x 3, x/2 1, (float)x/2 1.5.

    : (float)(x/2) 1, - - .

    4. C

    - , . .

    . TRUE, FALSE - . , TRUE FALSE, C TRUE , FALSE .

    4.1 if

    if C :

    if () block x TRUE

    else

    block x FALSE

    - . if - (TRUE), block if block else. (FALSE) block if block - else.

    (FALSE), if else . , , if k 2.

  • 21

    0 . 0 if else . - if block . - block . -, , .

    #include

    void main()

    {

    int k;

    scanf("%d",&k);

    if(k%2)

    printf(" %d \n",k);

    else

    printf(" %d \n",k);

    if(!(k%5) && !(k%2)){

    printf("O %d 5 \n",k);

    printf("O %d 10 \n",k);

    }

    printf(" \n");

    }

    , - ,

    if (a = b)

    if (a == b)

    , , - a ( b). 0, TRUE. FALSE. . a b, 1 - TRUE. FALSE.

    4.2 if-else-if

    - if-else-if. .

    if () block

    else if () block

    else if () block

    .

    .

    .

  • 22

    else

    block

    - TRUE. block - block else. , - block else. (0,1),(3,4) (5,7) . " ".

    #include

    void main()

    { float k;

    scanf("%f",&k);

    if (0 < k && k < 1)

    printf(" %f (0,1)\n",k);

    else if (3 < k && k < 4)

    printf(" %f (3,4)\n",k);

    else if (5 < k && k < 7)

    printf(" &f (5,7)\n",k);

    else

    printf(" \n");

    }

    4.3 goto

    goto C, . C . :

    goto ;

    1 20.

    #include

    void main()

    { int i = 0;

    loop:

    i++;

    printf("%d\n",i);

    if (i < 20) goto loop;

    }

    goto blocks . , -, C, goto - .

    4.4 switch

    switch - .

    switch :

  • 23

    switch() {

    case 1:

    case 2:

    .

    .

    .

    default:

    }

    switch block - . case :. - , - , - case . . - default:.

    case case default:. default:

    block switch break; break; block switch.

    , n, - a b. A n 1 - case 1: . a 100 b 200. break; block switch a b. n 2 case 2: b 200. H break; block switch. n 3 case 3: a b 300. H break; - block switch. , , default: - b to 0.

    #include

    void main()

    {

    int n,a=0,b;

    scanf("%d",&n);

    switch(n){

    case 1:

  • 24

    a=100;

    case 2:

    b=200;

    break;

    case 3:

    a=b=300;

    break;

    default:

    b=0;

    }

    printf(" a = %d , b = %d\n",a,b);

    }

    4.5 (Loops)

    block . C , for , while do/while.

    4.5.1 for

    for :

    for (1; ; 2) block

    for :

    1 1

    2

    3 TRUE ( ) -

    block .

    4 2 2.

    FALSE.

    for block 1 2 - . - . 1 , 2 block . , - , , for 1 10.

    1

    #include

    void main()

  • 25

    {

    int i;

    for(i=0; i

  • 26

    while ()

    block

    while , block . .

    block while , . , , while, . - while while(1)

    , k - 0+1+2+...+n n = 0,1,2,..., k.

    #include void main()

    { int s = 0,k,i = 1;

    scanf("%d",&k);

    while (s < k) {

    printf("%d\n",s);

    s += i++;

    }

    }

    4.5.3 do/while

    for while - block . - , -.

    do/while block , block - . :

    do {

    ; } while ();

    . , - . . block - , , .

    x - a 5 -

    new_x=(x+a/x)/2

    #include

    void main()

  • 27

    {

    float x,new_x,a,e=0.00001,d;

    char c=' ';

    scanf("%f",&a);

    if(a0?x-new_x:new_x-x;

    x=new_x;

    }while(d>e);

    printf(" %f %c%f\n",a,c,x);

    }

    do/while - block new_x .

    4.6 break

    break blocks - block switch. - block - . break .

    switch case case - . , - s=1+2+3+...+n n s - 7.

    #include

    void main()

    { int s = 0,n = 1;

    for (;;){

    s += n;

    if (!(s%7)){

    printf("%d\n",s,n);

    break;

    }

    n++;

    }

    }

    4.7 continue

    continue blocks - . con-tinue block.

  • 28

    . , - 7 100.

    #include

    void main()

    { int i;

    for (i = 0; i < 100; i++) {

    if (i%7) continue;

    printf("%d\n",i);

    }

    }

    5.

    (Array) C , , . - . - - . . C . .

    . - . - - . - C - . - C .

    5.1

    , , .

    [];

    , , - . sizeof()*

    . :

    char p[10];

  • 29

    10 bytes (10 = 10 x sizeof(char)) char.

    , , .

    1000 1001 1002 1003 1004 1005 1006 1007 1008 1009

    p[0] p[1] p[2] p[3] p[4] p[5] p[6] p[7] p[8] p[9]

    p 1000. [ ]

    [], . , - - bytes + - x sizeof(). p[3] 1000 + 3 x sizeof(char) 1003. 0. - . .

    a[ ] 100 int b[ ] 100 float. - a[ ], , , b[ ] mean a[i] mean - a[ ].

    #include

    #define MAX 100

    void main()

    {

    int i,a[MAX];

    float mean=0,b[MAX];

    for(i=0;i

  • 30

    5.2 (strings)

    C - (strings). strings C - char, string. string, , strings, \0 (NULL).

    , C string, . string .

    " "

    string. \0 strings

    . strcpy()

    "test" s[ ] %s printf(). strcpy() string.h.

    #include

    #include

    void main()

    {

    char s[5];

    strcpy(s,"test");

    printf("%s\n",s);

    }

    s[ ] '\0'.

    5.3

    C . - - . :

    [n]...[2][1];

    , , - C , n n-1, n-2 ... - - . .

    - .

  • 31

    byte - .

    char a[3][2];

    . () char . ( 1000).

    1000 1001 1002 1003 1004 1005

    a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]

    .

    a - char. , , , - . a[ ][ ] - a=1000.

    a[i] i . - a[0]=1000, a[1]=1002 a[2]=1004.

    - [ ]. , a[2][1] [ ] . a[2]. [ ] a[2] ( a) - 2 . 2 bytes a 1000 a[i]=1004. [ ] - 1*sizeof(char) , 1005. a[i][j] - i j . (- 0).

    a[ ][ ], .

    #include #define N 3

    void main()

    {

    int i,j,a[N][N],t;

    for(i=0;i

  • 32

    a[j][i]=t;

    }

    for(i=0;i

  • 33

    . 5 6 . .

    6. Pointers

    , pointer C . - . , , . pointer, , . - pointers. pointer pointer. :

    *;

    pointer . - * . -

    :

    int *tm;

    tm .

    , &, , , *,

    pointer pointer. pointer byte.

    pointers . bytes, byte - pointer, .

    pointers -. pointers, pointers . .

    pointers, , - . pointer - - pointer. , , , pointer - float - short , - pointer, . pointers , , (warning) - (errors). , , .

  • 34

    6.1 pointers

    pointers, , , - < > - pointer.

    pointer . - pointer , pointer N*sizeof() bytes pointer .

    #include

    void main()

    { short x[]={10,20,30};

    short *p;

    p = x;

    printf("%d\n",*p);

    p+=2;

    printf("%d\n",*p);

    p--;

    printf("%d\n",*p);

    }

    x

    1003 1004 1005 1006 1007 1008

    x[0] = 10 x[1] = 20 x[2] = 30

    p = x;

    pointer p 1003

    printf("%d\n",*p);

    10.

    p+=2;

    pointer p 2*sizeof(short) p = 1007 30.

    p--;

    pointer p 1*sizeof(short) p 1005 20.

    pointers - , .

    6.2 Pointers

    [];

  • 35

    sizeof()* bytes. -

    , , byte . byte . pointer . pointers

    *(+k)

    k*sizeof() pointer . - [ ] [k] . , p pointers ,

    p = ;

    p [ ] . p[k] = [k]. , p - pointer k , *(p+k) p[k] . - a[ ] .

    #include

    void main()

    { int i,a[] = {1,2,3};

    for (i = 0; i < 3; i++)

    printf("%d = %d\n",*(a+i),a[i]);

    }

    , , pointers . - .

    pointers - , , .

    6.3 pointers

    pointers - . pointers .

    *[];

    - . - bytes - . pointers .

    - bytes .

  • 36

    . . ' . pointers -. pointers - . . a[ ] b[ ] p[ ] pointers int. p[ ] . - a[ ] b[ ].

    #include

    void main()

    { int i,a[] = {1,2,3},b[]={4,5},*p[2];

    p[0]=a;

    p[1]=b;

    for (i = 0; i < 3; i++)

    printf("%d ",p[0][i]);

    printf("\n");

    for (i = 0; i < 2; i++)

    printf("%d ",p[1][i]);

    printf("\n");

    }

    6.4 Pointers pointers

    , pointer, , pointer . pointer pointer. pointer - pointer pointer. -

    **;

    int **v;

    v pointer pointer int.

    int *p;

    int **v;

    int x = 5;

    p = &x;

    v = &p;

    1000 1001 2100 2101 3200 3201

    x 5 p 1000 v 2100

  • 37

    : .

    pointer . pointers pointer pointers. pointers pointers. - pointers pointers - pointers. , , - , , .

    v pointers pointers int. p[ ] -, , pointers v p[ ] .

    #include

    void main()

    { int i,a[] = {1,2,3},b[]={4,5},*p[2],**v;

    p[0]=a;

    p[1]=b;

    v=p;

    for (i = 0; i < 3; i++)

    printf("%d ",v[0][i]);

    printf("\n");

    for (i = 0; i < 2; i++)

    printf("%d ",v[1][i]);

    printf("\n");

    }

    7.

    C . -.

    -, , - , . - - .

    , , - , - . , . ,

  • 38

    . . block .

    ( ) {

    }

    C . - C . - - . . void. int. - . - - void.

    message() factorial(). message() . void . factorial() n int , long, n!=1.2.3n.

    #include

    long factorial(int n);

    void message();

    void main()

    {

    int m;

    long f;

    message();

    printf(" m = ? ");

    scanf("%d",&m);

    f=factorial(m);

    if(!f)

    printf(" n = %d\n",m);

    else

    printf("%d! = %ld\n",m,f);

    }

    long factorial(int n)

    {

    long f=1,i;

    if(n>12)return 0;

    for(i=2;i

  • 39

    void message()

    {

    printf(" \n");

    printf(" C\n\n");

    }

    - . , - . . , factorial() float int.

    f=factorial(3.5);

    f 3! 6.

    7.1

    - . -, , . , - , . ANCI -.

    - - . , , - .

    - . .

    - . , , - .

    C . . C . -

  • 40

    ' #include . - stdio.h - - C. #include -.

    #include

    : #include .

    7.2 return

    . , - return. void. return . return, -, - . return, -, - , return .

    print_ok() , ok, sum() 1+2+...+k.

    void print_ok(void)

    {

    printf("ok\n");

    }

    int sum(int k)

    {

    int s = 0,i;

    for (i = 1; i

  • 41

    , . , -, . . . - C .

    -, , , . -. , , , , - . - fun() - int :

    fun(int *p)

    fun(), - x, int,

    fun(&x);

    x , , p. , ,

    *p=7;

    7 - p x x 7.

    &, , *, , .

    max() mod(). - max() , , . mod() point-ers . mod() , , pointer pointer .

    #include

    int max(int n,int m);

    void mod(int n,int m,int *r,int *q);

    void main()

    { int n,m,r,q;

    scanf("%d %d",&n,&m);

    mod(m,n,&r,&q);

    printf(" = %d\n = %d\n",r,q);

    }

  • 42

    int max(int n,int m)

    {

    return n>m?n:m;

    }

    void mod(int n,int m,int *r,int *q)

    {

    if(n==max(n,m)){

    *r=n/m;

    *q=n%m;

    }

    else{

    *r=m/n;

    *q=m%n;

    }

    7.4

    C - , - . - - . , - . , , . .

    myshort .

    #include

    #define MAX 10

    void myshort(int *k,int n);

    void main()

    {

    int i,a[MAX];

    for(i=0;i

  • 43

    }

    }

    }

    }

    #define - .

    7.5

    , , , . , , . , , fun() -

    char a[3][2];

    void fun (char a[][2])

    fun()

    fun(a);

    k[3][4] mean(), .

    #include

    #define R 3

    #define C 4

    void mean(int a[][4],int n,int m);

    void main()

    { int k[R][C];

    int i,j;

    printf(" (%d %d -

    )\n",R,C);

    for (i = 0; i < R; i++)

    for (j = 0; j < C; j++)

    scanf("%d",&k[i][j]);

    mean(k,R,C);

    }

    void mean(int a[][4],int n,int m)

    { int i,j;

    float s;

    for (i = 0; i < n; i++){

    s = 0;

    for (j = 0; j < m; j++)

    s += a[i][j];

    s /= m;

    printf(" %d = %f\n",i,s);

    }

    }

    , ,

  • 44

    . - . C - .

    7.6 (Recursion)

    . , . - .

    C . , -. . - .

    , . , , - . , .

    - static . . . static - .

    mcd m >m .

    = max{x : M mod x = 0 m mod x = 0}

    = mcd( M, m) m = 0 = = mcd( m ,M mod m)

    m - m . m m m. - m m m. mcd - m - m m - M m.

  • 45

    #include

    int mcd(int M,int m);

    void main()

    {

    int M,m;

    scanf(%d %d,&M,&m);

    printf(%d\n,mcd(M,m));

    }

    int mcd(int M,int m)

    { int MKD;

    if(m == 0)

    MKD=M;

    else

    MKD=mcd(m,M%m);

    return MKD;

    }

    7.7 exit()

    exit(), , . exit() . - (.. ...). - ASCII - . ASCII [32,255]. ( ASCII 32 )

    #include

    #include

    void main()

    {

    unsigned char n;

    for(;;){

    scanf("%d",&n);

    if(n

  • 46

    * . -

    , , pointer .

    pointers pointer. point-ers ' .

    - pointer .

    int fun(int x);

    void main()

    { int (*p)(int);

    p = fun;

    p(2);

    .

    .

    }

    p - .

    p = fun;

    ( pointer) fun() p.

    p(2);

    , fun() 2.

    fun(2);

    pointers . - . pointers , - switch.

    . pointers - . - root() - f(x) = 0

    x x(x x )f(x )

    f( x ) f( x )i 1 i

    i i 1 i

    i i 1

    #include

    #include

    float root(float(*p)(float),float x1,float x0,float e,int n);

    float f(float x);

    void main()

    {

    float x1,x0,e,r;

    int n;

  • 47

    scanf("%f %f %f %d",&x1,&x0,&e,&n);

    r = root(f,x1,x0,e,n);

    printf("root = %f\n",r);

    }

    float f(float x)

    {

    float r;

    r = 2*(x*x)-8;

    return (r);

    }

    float root(float (*p)(float), float x1,float x0, float e,int n)

    {

    int k = 0;

    float x;

    while (fabs(x1-x0) > e && k < n && p(x1) != p(x0)) {

    x = x1-((x1-x0)*p(x1)/(p(x1)-p(x0)));

    k++;

    x0 = x1;

    x1 = x;

    }

    if (k == n) {

    printf(" \n");

    exit(1);

    }

    if (p(x1) == p(x0)) {

    printf("f(xi) = f(xi-1)\n");

    exit(1);

    }

    return (x);

    }

    root() pointer -, p, , - - .

    2x2-8=0 -

    f() root(). f() root().

    8.

    - . . C . - .

    C program segment, data segment, stack

  • 48

    heap. heap - .

    C . , ANSI, malloc() realloc() - .

    8.1 malloc()

    () malloc()

    void *malloc(size_t size);

    malloc() stdlib.h.

    size bytes void pointer. size_t - bytes . NULL. malloc() - .

    8.2 realloc

    realloc() malloc() . realloc() stdlib.h

    void *realloc(void *r,_);

    realloc() malloc(). pointer r byte - malloc(). , _, , bytes. , bytes, , -. - realloc() ' - . pointer p, , byte . - realloc() NULL.

    8.3 free()

    . free() stdlib.h.

    () free() :

  • 49

    void free(void *p);

    pointer p -. pointer free(), , -.

    malloc() - n . , - , - . realloc() . , - - . - . - free().

    #include

    #include

    #include

    void main()

    { int *ip;

    int n,m,k,j,i,fl;

    printf(" =?");

    scanf("%d",&n);

    if((ip=(int *)malloc(n*sizeof(int)))==NULL){

    printf(" 1\n");

    exit(1);

    }

    for(i=0;i

  • 50

    for(i=0;i

  • 51

    int **a,**b,**c, i,j,n,m,k;

    printf("

    =?");

    scanf("%d",&n);

    printf(" =?");

    scanf("%d",&m);

    printf(" =

    ?");

    scanf("%d",&k);

    scanf("%d %d %d",&n,&m,&k);

    a=(int **)malloc(n*sizeof(int *));

    b=(int **)malloc(m*sizeof(int *));

    c=(int **)malloc(n*sizeof(int *));

    for(i=0;i

  • 52

    . , - . , - , - . .

    9.

    C . ' - . , , . , , . , , -,

    struct salary {

    char name[30];

    int hours;

    float pay;

    float tax;

    };

    . - .

    , , .

    , salary -,

    struct salary George;

    George struct salary - . -

    name 30 bytes x sizeof(char)

    hours 2 bytes sizeof(int)

    pay 4 bytes sizeof(float)

    tax 4 bytes sizeof(float)

    - . George, , 40 bytes . 30 , char, , 2 bytes , int, , 4, float 4, - float, .

  • 53

    .

    struct salary {

    char name[30];

    int hours;

    float pay;

    float tax;

    } George,Kathe,John;

    - salary (120 bytes).

    . (dot). | :

    George.name = "Oikonomu Georgios";

    George.hours = 42;

    George.pay = 2400;

    George.tax = 500;

    George struct salary. - Kathe John.

    . -

    John =George ;

    George John. - , George - John. - .

    9.1

    . -. . salary -

    struct salary staff[100];

    100 salary. 100*40 = 4000 bytes. -

    .

    staff[12].pay = 2530;

    2530 pay staff. 0.

  • 54

    salary, - staff 100 . n . - .

    #include

    #include

    #include

    #define MAX 100

    struct salary {

    char name[30];

    int hours;

    float pay;

    float tax;

    };

    void main()

    { int i,n;

    float sum1 = 0,sum2 = 0, sum3 = 0;

    struct salary staff[MAX];

    printf(" = ? ");

    scanf("%d",&n);

    if(nMAX)exit(1);

    for (i = 0; i < n; i++){

    printf(" %d ",i+1);

    scanf("%s",&staff[i].name);

    printf(" %d

    ",i+1);

    scanf("%d",&staff[i].hours);

    printf(" %d ",i+1);

    scanf("%f",&staff[i].pay);

    printf(" %d ",i+1);

    scanf("%f",&staff[i].tax);

    }

    for (i = 0; i < n; i++){

    sum1 += staff[i].hours;

    sum2 += staff[i].pay;

    sum3 += staff[i].tax;

    }

    printf(" = %f\n",sum1);

    printf(" = %f\n",sum2);

    printf(" = %f\n",sum3);

    }

    9.2 Pointers

    C pointers -. pointers .

    pointer , , * .

    struct salary *p;

  • 55

    p pointer salary.

    , pointer byte - & . -, George salary,

    p=&George;

    George p.

    pointer , - , ->. , -, hours George, p, 40

    p->hours = 40;

    H

    George.hours = 40;

    byte - . pointer . pointer .

    struct salary *staff;

    staff =(struct salary *)malloc(100*sizeof(struct salary));

    100 salary. -> pointers, [ ]. -

    (staff+2)->hours=40;

    staff[2].hours=40;

    , 40 hours staff.

    9.3

    , , - . . fun1()

    void fun1(int n);

    struct salary George;

    fun1(George.hours);

    hours George - fun1(). fun2()

    void fun2(int *n);

  • 56

    struct salary George;

    fun2(&George.hours);

    fun2(). fun2() byte -

    hours George, -

    & . int.

    - . , fun3() salary, .

    void fun3(struct salary x);

    . . . , - fun4() salary

    struct salary funa4();

    set_min() salary - . . -.

    #include

    #include

    #include

    struct salary{

    char name[31];

    int hours;

    float pay;

    float tax;

    };

    struct salary set_min(struct salary *p,struct salary

    *new_emp,int n);

    void main()

    {

    struct salary *staff,new_emp,min_emp;

    int i,n;

    float pay,tax;

    printf(" ");

    scanf("%d",&n);

  • 57

    staff=(struct salary *)malloc(n*sizeof(struct salary *));

    if(staff==NULL){

    printf(" \n");

    exit(1);

    }

    for(i=0;ipay=min.pay;

    return min;

    }

    9.4

    , , . .

    struct str1 {

    short x;

    float y;

    };

    struct str2 {

    struct str1 st;

  • 58

    short p;

    };

    str1 str2 - st str1. str2 8 bytes. 6 bytes st 2 p.

    , , . (dot). abc str2 y, st z

    z = abc.st.y;

    abc pointer p -, , abc, y z .

    z = p->st.y;

    address . - employee , , , . employee address. : get_address() . get_data() . out_order() out_address() - . main() - employee , .

    #include

    #include

    #include

    struct address {

    char city[16];

    char street[21];

    int number;

    long zip;

    };

    struct employee{

    char name[31];

    struct address addr;

    float payment;

    float reprise;

    float pay;

    };

    void get_data(struct employee *p);

    void get_address(struct address *ad);

    void out_order(struct employee z);

    void out_address(struct employee z);

  • 59

    void main()

    {

    int i,N;

    struct employee *staff;

    printf(" = ");

    scanf("%d",&N);

    staff=(struct employee *)malloc(N*sizeof(struct employee));

    if(staff==NULL){

    printf(" \n");

    exit(1);

    }

    printf("\n \n");

    for(i=0;ipayment);

    printf(" = ? ");

    scanf("%f",&p->reprise);

    get_address(&p->addr);

    }

    void get_address(struct address *ad)

    {

    printf("( 15 ) = ? ");

    fflush(stdin);

    gets(ad->city);

    printf(" ( 20 ) = ? ");

    fflush(stdin);

    gets(ad->street);

    printf(" = ? ");

    scanf("%d",&ad->number);

    printf(" = ? ");

    scanf("%ld",&ad->zip);

    }

    void out_order(struct employee z)

    {

    printf(": %s\n",z.name);

  • 60

    printf(": %8.2f\n",z.pay);

    }

    void out_address(struct employee z)

    {

    printf(": %s\n",z.name);

    printf(": %s\n",z.addr.city);

    printf(": %s\n",z.addr.street);

    printf(": %d\n",z.addr.number);

    printf("TK: %ld\n",z.addr.zip);

    }

    9.5

    .

    union { 1;

    2; .

    .

    .

    n;

    };

    . - . bytes .

    union abc{

    char a[10];

    float x;

    short k;

    };

    union ABC z;

    abc z. z sizeof(char) x 10 bytes, - a[] . bytes - abc.

    byte 0 byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 byte 7 byte 8 byte 9

    x

    k

    a

  • 61

    , - , . dot . ->. -

    union abc *p;

    z.x=7.5;

    p=&z;

    p->k=4;

    o 7.5 , , - bytes z. , pointer p z, 4 bytes z.

    x, p->k=4;, .

    I_var 5 - long. , U uv - I_var n[] 5 long. n[] u, U uv u V I_var.

    #include

    struct I_var{

    long b1;

    long b2;

    long b3;

    long b4;

    long b5;

    };

    union U{

    long n[5];

    struct I_var uv;

    }u;

    void main()

    {

    struct I_var V;

    int i;

    for(i=0;i

  • 62

    bits byte.

    / .

    bits bytes.

    C ' , , bits (bit-field). bits

    struct _ { 1 : 1;

    2 : 2; .

    .

    .

    n : n; };

    _ . i , bits, i. i 1 16, ( ). int, unsigned signed. , , 1, un-signed.

    bits bytes. bits - ' .

    struct port{

    unsigned bit0 : 1;

    unsigned bits1_3 : 3;

    unsigned : 2;

    unsigned bit6 : 1;

    }device;

    device, port, bits. - byte unsigned. bit0 1 bit, bits1_3 3 bits bit6 1 bit. bits 4 5 byte ' . bit 7 , byte, .

    bits . .

    struct st{

    char ch[10];

    unsigned k:3;

    unsigned m:1;

    }ts;

  • 63

    ts, st, bits bits. bytes (11 bytes).

    .

    ts.k = 2;

    2 k . - , , bits . bits bits .

    ts.k = 9;

    k 1 9 - 4 bits (9 1001)

    , , pointer, - , . (dot), ->.

    bits. - . , . , , .

    bits - string . - , string, [0,7] bit - . - bits 8 bits unsigned char - .

    #include

    #include

    #define MAX 100

    struct byte_change{

    unsigned b0:1;

    unsigned b1:1;

    unsigned b2:1;

    unsigned b3:1;

    unsigned b4:1;

    unsigned b5:1;

    unsigned b6:1;

    unsigned b7:1;

    };

    union byte{

    struct byte_change bits;

    unsigned char c;

    };

  • 64

    void code(char *c,unsigned long key)

    {

    union byte b;

    unsigned long m;

    int i=0;

    srand(key);

    while(c[i]){

    b.c=c[i];

    m=rand();

    srand(m);

    switch(m%8){

    case 0:

    b.bits.b0+=1;

    break;

    case 1:

    b.bits.b1+=1;

    break;

    case 2:

    b.bits.b2+=1;

    break;

    case 3:

    b.bits.b3+=1;

    break;

    case 4:

    b.bits.b4+=1;

    break;

    case 5:

    b.bits.b5+=1;

    break;

    case 6:

    b.bits.b6+=1;

    break;

    case 7:

    b.bits.b7+=1;

    }

    c[i]=b.c;

    i++;

    }

    }

    void main()

    {

    char c[MAX];

    unsigned long key;

    printf("\n");

    printf(" string ( %d

    )\n",MAX);

    fflush(stdin);

    gets(c);

    printf(" = ? ");

    scanf("%lu",&key);

    code(c,key);

    printf("\n: %s\n",c);

    printf("\n\n");

    printf(" = ? ");

  • 65

    scanf("%lu",&key);

    code(c,key);

    printf("\n: %s\n",c);

    }

    : - rand() 232. srand() unsigned - rand().

    - ASCII 32. - .

    9.7

    - .

    enum { };

    - .

    , , .

    enum week {Sunday, Monday, Tuesday, Wednesday, Thursday, Fri-

    day, Saturday};

    week, . , , day week

    day = Friday;

    day - Friday -. , 0 . , , week

    Sunday = 0

    Monday = 1

    Tuesday = 2

    Wednesday = 3

    Thursday = 4

    Friday = 5

    Saturday = 6

  • 66

    . - .

    enum week {Sunday, Monday, Tuesday = 50, Wednesday, Thursday,

    Friday, Saturday} day;

    Tuesday 50. Tuesday 50. .

    Sunday = 0

    Monday = 1

    Tuesday = 50

    Wednesday = 51

    Thursday = 52

    Friday = 53

    Saturday = 54

    string .

    day = Monday;

    printf("%s\n",day);

    Monday day 1 - printf() , string day.

    10. (I/O)

    C - (stream) (file). I/O C . , , . -. . - . - (bytes) . , - .

    bytes -. bytes .

    ANSI C - , . . - , modem . C. , .

    - C. -

  • 67

    fclose(). .

    - . .

    stdin stdout

    stderr

    C - . FILE stdio.h. pointer FILE .

    10.1

    . / , C - ' . - .

    10.1.1 getch(), getchar() putchar()

    getch() getchar(). stdio.h

    int getch(void);

    int getchar(void);

    . getch() , getchar() enter. - byte .

    putchar() . stdio.h

    int putchar(int c);

    - int char. , EOF.

    getch() getchar() putchar() .

    #include

    void main()

    { char c1,c2;

  • 68

    c1 = getch();

    c2 = getchar();

    putchar(c1);

    putchar(c2);

    }

    10.1.2 gets() puts()

    gets() puts() strings -. stdio.h. gets() .

    char *gets(char *s );

    H gets() - pointer s. - . gets() ( Enter), string, . - string. string gets(). string , gets(), . -. gets(), string - - string .

    puts() pointer char string - . puts()

    char *puts(char *s);

    char 30 gets() ' string . puts() string.

    #include

    void main()

    { char s[30];

    gets(s);

    puts(s);

    }

    10.1.3 printf()

    printf() . "" . printf() C -.

    printf() stdio.h

    int printf(const char *format_string, );

  • 69

    string (format_string) . format_string - . - . % - . -

    -

    %c %d

    %i %e

    %f %g %e %f

    %o %s String

    %u %x

    %% % %p pointer

    printf()

    printf() - short long. l %, %ld long. %hd short.

    l e,f g, - double. L - long double.

    format_string - .

    char *p="HALLO";

    int x=5;

    printf("%s The value of x is %d\n",p,x);

    HALLO The value of x is 5. \n format_string, , .

    , - . , , % , . - string . string , -.

    char *p="ABCD";

  • 70

    int k=12;

    printf("%10d\n%10s\n",k,p);

    printf("%2s\n",p);

    printf() 10 k string ABCD. printf() - 2 string - .

    , , - 0 . %010d

    printf("%010d\n",k);

    k, , - 0.

    - , , , . %10.4f

    printf("%10.4f\n",x);

    , , x , , .

    , string, %, - n.m, n m , , string , n m . , , string string. -

    char *p="ABCDEFGH";

    printf("%3.5s\n",p);

    string 5.

    ABCDE

    . , % - . %-10d .

    printf() . EOF.

    printf() .

    #include

    void main()

    { int k = 12345;

    float x = 543.437;

    char s[] = "abcdefg";

    printf("k = %08d\n",k);

    printf("k = %3d\n",k);

    printf("x = %6.2f\n",x);

  • 71

    printf("x = %4.2e\n",x);

    printf("s = %-10s\n",s);

    printf("s = %4.5s\n",s);

    }

    k = 0 0 0 1 2 3 4 5

    k = 1 2 3 4 5

    x = 5 4 3 . 4 4

    x = 5 . 4 3 e + 0 2

    s = a b c d e f g

    s = a b c d e

    .

    10.1.4 scanf()

    scanf() - C . scanf() stdio.h

    int scanf(const char *format_string, );

    string (format_string) - , , .

    format_string . - , . , printf(), % , , - scanf() , , format_string. .

    %c %d

    %i %e

    %f %h short

    %o %s String

    %x %p pointer

    scanf()

    " " tab newline. scanf() stdin,

  • 72

    , , , format_string. , format_string, scanf() - .

    - . , format_string, scanf() -. scanf() , - , , . -

    int x,y;

    scanf("%d+%d",&x,&y);

    2+3 %d , x, 2. format_string - + . scanf() + - y 3. 2-3 x 2 , +, scanf() y. 2 + 3 2 +. , scanf() +, - .

    C - format_string. , , -

    scanf("%d + %d",&x,&y);

    +, 2 + 3 + . +, , + for-

    mat_string scanf() , , -

    . for-mat_string.

    , & . scanf() k.

    int k;

    scanf("%d",&k);

  • 73

    , scanf(), string - . , ,

    char str[51];

    scanf("%s",str);

    50 string str. scanf(), %s, - \0.

    scanf() , tabs newlines. .

    scanf("%d %d",&k,&m);

    10 20 10 20 10,20.

    , %, *

    scanf() -. - ' .

    scanf("%d %*c %d",&k,&m);

    10$5 10 k, $ 5 m.

    scanf() . - %. - , scanf() , scanf(). 12345678

    scanf("%2d %2d %2d",&x,&y,&z);

    12 x, 34 y 56 z - 7 8 - .

    , . a b

    scanf("%c%c%c",&x,&y,&z);

    a x, y b z. ,

    , a b, , b y. scanf() z.

    format_string - .

    scanf("%s ",str);

  • 74

    string enter, scanf() . , - -, enter.

    . -

    char x,y;

    scanf("%c",&x);

    printf("%c\n",x);

    scanf("%c",&y);

    printf("%c\n",y);

    x y, x enter y, y . en-ter x. , , . - fflosh(). stdio.h

    int fflush(FILE *strim);

    .

    char x,y;

    fflush(stdin);

    scanf("%c",&x);

    printf("%c\n",x);

    fflush(stdin);

    scanf("%c",&y);

    printf("%c\n",y);

    fflosh() stdin x y.

    scanf() scanset. scanset . - , scanf() . scanset format_string % - . scanset pointer . - %[ABC] - A,B C .

    scanset -. scanset %[A-Z] . scanset. , -

  • 75

    , ^. scanset %[^0-9] 0 9.

    1

    #include

    void main()

    { char s1[80],s2[80];

    scanf("%[0123456789] %s",s1,s2);

    printf("%s %s\n",s1,s2);

    }

    3210rt56u string s1 3210 s2 rt56u.

    w1342rgu s1, , scanset, s2 w1342rgu.

    2

    #include

    void main() { char s1[80],s2[80]; scanf("%[^0-3 7-9] %s",s1,s2);

    printf("%s %s\n",s1,s2);

    }

    E scanf() s1 0,1,2,3 7,8 9 . s1 s2. , 56432ab56c, s1 564 s2

    32ab56c.

    10.2

    , -. . .

    , - , - buffer. buffer - . , , buffer .

    , C . . bytes . \n

  • 76

    tex editor.

    - bytes . \n byte ASCII 10 .

    10.2.1

    pointer FILE stdio.h. - pointers fopen() . fopen() - pointer FILE. fopen()

    FILE *fopen(const char *_, const char *);

    string . string path .

    strig . - .

    "r"

    "w" "a"

    "rb" "wb"

    "ab" "r+"

    "w+" "a+"

    "r+b" "w+b"

    "a+b" "rt"

    "wt" "at"

    "r+t" "w+t"

    "a+t"

    "" fopen()

    fopen() pointer FILE C. fopen() , NULL. -

    FILE *fp;

    fp = fopen("test","w");

  • 77

    test - . fp.

    . .

    10.2.2

    bytes - . ( ). , , byte . - .

    C . stdio.h

    10.2.3 feof()

    int feof(FILE *);

    fopen() - .

    feof() . feof() -

    . - . feof() . -, , , 0, .

    10.2.4 rewind()

    rewind() . rewind()

    void rewind(FILE *);

    fopen() .

    10.2.5 fseek()

    fseek() .

    int fseek(FILE *, long num_bytes, int );

    fopen() . num_bytes bytes ,

  • 78

    . - stdio.h .

    SEEK_SET SEEK_CUR SEEK_END

    "" fseek()

    fseek() -. bytes - .

    10.2.6. ftell()

    ftell() . :

    long ftell(FILE *);

    fopen() .

    H ftell() , bytes, .

    10.2.7 fclose()

    fclose() fopen() . , buffer -. fclose()

    int fclose(FILE *);

    fopen() .

    fclose() EOF, 0.

    10.2.8

    C remove() . .

    int remove(const char *_);

    remove() _ 0 . - .

    remove("d:t");

    t d.

  • 79

    10.2.9 putc()

    putc() (bytes) fopen().

    int putc(int , FILE *);

    , - pointer fopen() -

    , int, byte . putc() , EOF.

    10.2.10 getc()

    getc() (bytes) .

    int getc(FILE *);

    H pointer fopen()

    getc() - byte .

    , , getc() EOF . - EOF . feof().

    code(),decode() getstr(). code() - . . - , , 256 ASCII bytes - bytes .

    decode() code(). - . - bytes - . bytes - getc() putc() feof() bytes .

    getstr() .

    #include

    #include

    #include

    #include

  • 80

    void code(char *text,char *key,char *crypto);

    void decode(char *crypto,char *key,char *text);

    char *getstr();

    void main()

    {

    char *text,*key,*crypto,c;

    while(1){

    printf(" C \n");

    printf(" D \n");

    printf(" \n");

    c=getch();

    if(c=='C'||c=='D'||c=='c'||c=='d')break;

    exit(1);

    }

    if(c=='C'||c=='c'){

    printf("

    = ? ");

    text=getstr();

    printf("

    = ? ");

    key=getstr();

    printf("

    = ?" );

    crypto=getstr();

    code(text,key,crypto);

    }

    else{

    printf(" =

    ? ");

    crypto=getstr();

    printf("

    = ? ");

    key=getstr();

    printf("

    = ? ");

    text=getstr();

    decode(crypto,key, text);

    }

    free(text);

    free(key);

    free(crypto);

    }

    void code(char *text,char *key,char *crypto)

    {

    unsigned char t,c,cr;

    FILE *tep,*kep,*crp;

    tep=fopen(text,"rb");

    if(tep==NULL){

    printf(" %s\n",text);

    exit(1);

    }

    kep=fopen(key,"rb");

    if(kep==NULL){

    printf(" %s\n",key);

  • 81

    exit(1);

    }

    crp=fopen(crypto,"wb");

    if(crp==NULL){

    printf(" %s\n",crypto);

    exit(1);

    }

    while(1){

    t=getc(tep);

    if(feof(tep))break;

    c=getc(kep);

    if(feof(kep)){

    rewind(kep);

    c=getc(kep);

    }

    cr=(t+c)%256;

    putc(cr,crp);

    }

    fclose(tep);

    fclose(kep);

    fclose(crp);

    printf(" \n");

    }

    void decode(char *crypto,char *key,char *text)

    {

    unsigned char t,c,cr;

    FILE *tep,*kep,*crp;

    tep=fopen(text,"wb");

    if(tep==NULL){

    printf(" %s\n",text);

    exit(1);

    }

    kep=fopen(key,"rb");

    if(kep==NULL){

    printf(" %s\n",key);

    exit(1);

    }

    crp=fopen(crypto,"rb");

    if(crp==NULL){

    printf(" %s\n",crypto);

    exit(1);

    }

    while(1){

    cr=getc(crp);

    if(feof(crp))break;

    c=getc(kep);

    if(feof(kep)){

    rewind(kep);

    c=getc(kep);

    }

    t=(cr-c+256)%256;

    putc(t,tep);

    }

    fclose(tep);

    fclose(kep);

  • 82

    fclose(crp);

    printf(" \n");

    }

    char *getstr()

    { int i=0;

    char *p;

    fflush(stdin);

    while(1){

    if(!i){

    p=(char *)malloc(i+1);

    }

    else{

    p=(char *)realloc(p,i+1);

    }

    scanf("%c",&p[i]);

    if(p[i]==10)break;

    i++;

    }

    p[i]='\0';

    return p;

    }

    10.2.11 fgets() fputs()

    - strings . .

    int *fputs(char *string, FILE *);

    char *fgets(char *string, int , FILE *):

    string pointer - string. pointer fopen() .

    fputs() puts() string .

    fgets() string -1 . string fgets() - string '\0'. fgets() NULL, pointer char string .

    fputs("abc",fp);

    string "abc" fp,

    fgets(s,50,fp);

    fp 49 bytes - pointer s. \0.

    10.2.12 fread() fwrite()

    ANSI C - . fread() fwrite().

  • 83

    fread()

    size_t fread(void *buffer, size_t num_bytes, size_t , FILE *);

    buffer pointer -. num_bytes bytes - num_bytes . pointer fopen() .

    fread() . . - fread() - \n (ASCII 10).

    fwrite()

    size_t fwrite(void *buffer, size_t num_bytes, size_t , FILE *);

    buffer pointer . num_bytes bytes - num_bytes . pointer fopen() . fwrite() num_bytes .

    fread() fwrite() - . , . - - bytes .

    #include #include

    void main()

    { FILE *fp;

    int a[6][6],b[6][6];

    int i,j;

    for(i=0;i

  • 84

    }

    fread(b, sizeof b,1,fp);

    for(i=0;i

  • 85

    int fprintf(FILE *, const char *form_string,...);

    int fscanf(FILE *, const char *form_string,...);

    printf() scanf() , . fprintf() fscanf() - printf() scanf(). .

    10.2.14 stdin, stdout stderr

    stdin, stdout stderr - / . - .

    putc(c,stdout);

    c.

    11. O C

    C - . - #.

    - . . - . - .

    11.1 #define

    . , - , .

    #define MAX 10

    int a[MAX],i;

    for(i=0;i

  • 86

    for(i=0;i

  • 87

    #include stdio.h .

    . , , .

  • 88

    .

    1. 1

    1.1 ANSI C++ 1

    1.2 2

    1.3 / 2

    2. C 3

    3. C 5

    3.1 C 6

    3.2 . 6

    3.3 7

    3.4 8

    3.5 8

    3.6 9

    3.7 11

    3.8 11

    3.9 C 11

    3.10 12

    3.10.1 = 12

    3.10.2 13

    3.10.3 14

    3.10.4 14

    3.10.5 ?: 16

    3.10.6 & * pointers 17

    3.10.7 sizeof 17

    3.11 18

    3.12 C 18

    4. C 19

    4.1 if 19

  • 89

    4.2 if-else-if 20

    4.3 goto 21

    4.4 switch 21

    4.5 (Loops) 23

    4.5.1 for 23

    4.5.2 while 24

    4.5.3 do/while 25

    4.6 break 26

    4.7 continue 26

    5. 27

    5.1 27

    5.2 (strings) 29

    5.3 29

    5.4 31

    6. Pointers 32

    6.1 pointers 33

    6.2 Pointers 33

    6.3 pointers 34

    6.4 Pointers pointers 35

    7. 36

    7.1 38

    7.2 return 39

    7.3 39

    7.4 41

    7.5 42

    7.6 (Recursion) 43

    7.7 exit() 44

    7.8 Pointers 44

    8. 46

  • 90

    8.1 malloc() 47

    8.2 realloc 47

    8.3 free() 47

    9. 51

    9.1 52

    9.2 Pointers 53

    9.3 54

    9.4 56

    9.5 59

    9.6 bits 60

    9.7 64

    10. (I/O) 65

    10.1 66

    10.1.1 getch(), getchar() putchar() 66

    10.1.2 gets() puts() 67

    10.1.3 printf() 67

    10.1.4 scanf() 70

    10.2 74

    10.2.1 75

    10.2.2 76

    10.2.3 feof() 76

    10.2.4 rewind() 76

    10.2.5 fseek() 76

    10.2.6 ftell() 77

    10.2.7 fclose() 77

    10.2.8 77

    10.2.9 putc() 78

    10.2.10 getc() 78

    10.2.11 fgets() fputs() 81

    10.2.12 fread() fwrite() 81

    10.2.13 fprintf() fscanf() 83

    10.2.14 stdin, stdout stderr 84

  • 91

    11. O C 84

    11.1 define 84

    11.2 include 85