limbaj de programare c2

Upload: mykel

Post on 05-Apr-2018

237 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 Limbaj de programare C2

    1/16

    Limbaje de programare

    Cursul II

    Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    2/16

    Atribuiri#include

    main()

    {

    int zile, ore, minute;

    zile=7;

    ore=24*zile;

    minute=60*ore;

    printf("O saptamana are %d ore, %d minute.\n", ore, minute);

    }

    O variabil de tip:

    int [2.147.483.648 , 2.147.483.647]double [-10308 , -10-308] U {0} U [10-308 , 10308]

    Toate variabilele dintr-un program trebuie declarate nainte de a fi utilizate.Declaraiile, la fel ca i instruciunile, au la sfrit ";"

    2 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    3/16

    printf() i scanf()printf("%s%s\n",

    "Aceasta instructiune se va scrie ",

    "pe o linie de text foarte lunga.\n");

    %c - caracter %d - ntreg zecimal %f- numr n virgul flotant

    %e - numr n virgul flotantn notaia tiinific %g - in format e sau f (cel mai scurt dintre ele)

    %s ir %m.nf m-lungimea cmpului, n-precizia

    3 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    4/16

    printf() i scanf()

    scanf() este asemntoare lui printf() fiind folosit pentru

    operaii de intrare nu de ieire.

    Observaie:

    Funcia printf() poate folosi formatul %fpentru tiprireanumerelor floati double, pe cnd scanf() foloseteformatul%fpentru citirea unui float,%lfpentru citirea unui double i%Lfpentru long double.

    4 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    5/16

    Directive pre-compilare

    Directiva #include are forma general:#include

    i nsemn includerea n acest loc a fiierului header specificat din directoarelespeciale:Visual Studio C:\Program Files\Microsoft Visual Studio .NET\Vc7\include

    UNIX /usr/include

    #include nume_fisier("nume_fisier" din directorul curent).

    Atunci cnd utilizm o funcie C, trebuie s specificm prototipul(definiia) ei.

    scanf() i printf() au prototipul n , rand() areprototipul n , sin() are prototipul n etc.

    5 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    6/16

    Directive pre-compilare#include

    ...

    #define PI 3.1415926535897932

    Luate n considerare nainte de compilarea propriu-zis.

    Se recomand scrierea caracterului # pe prima coloan, iara directivelor de precompilare la nceputul programului.

    De exemplu, dac n programul de mai sus exist n linia

    printf("PI = %f\n", PI); atunci ea va deveni nainte de compilare:

    printf("PI = %f\n", 3.1415926535897932);

    6 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    7/16

    Stilul de programare

    Un stil bun: folosete spaii goale i comentarii, astfel nct codul s fie uor

    de cititi de neles; utilizarea indentrii este crucial, astfel se indic precis

    structurile de control. De exemplu, n construcia

    while (expresie)

    instructiune

    indentarea instruciunii indic faptul c execuia acesteia estesub controlul iteraiei while;

    alegerea de nume sugestive pentru variabile; corespondena dintre acolade. #, {, }, main() pe prima coloan.

    7 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    8/16

    Erori frecvente

    Nenchiderea irului cu ghilimele drepte. Compilatorul d un mesaj de eroare,de tipul:Unterminated string or character constant

    Scrierea greit a numelui variabilelor sau nedeclararea lor. n general,compilatorul d un mesaj de eroare potrivit, alteori nu (de exemplu, scriem

    greitprinf() in loc de printf()).

    n formatul%m.nf, pentru a specifica dou zecimale la dreapta i trei cifrela stnga, nu trebuie s scriem %2.3f, ci %6.3f (se numr i punctulzecimal).

    scanf(%d %d, a, b) n loc de scanf(%d %d, &a, &b).Compilatorul nu se va detecta aceast eroare. Bineneles, c vom obinerezultate eronate (run-time error) care sunt ceva mai greu de corectat.

    8 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    9/16

    Atomi lexicali, operatori

    Atomi lexicali: litere mici: a b ... z litere mari: A B ... Z cifre: 0 1 ... 9 alte caractere: * / = ( ) { } [ ] < > ' "

    ! @ # $ % & _ | ^ ~ \ . , ; : ? spaii: blank, newline, tab

    Comentariile suntiruri de caractere cuprinse ntre /* i*/. Comentariile nu reprezint atomi lexicali. Compilatorulva traduce comentariile ntr-un singur caracter spaiu, deaceea comentariile nu fac parte din codul executabil.

    9 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    10/16

    Atomi lexicali, operatori

    Cuvintele rezervate (cheie) au un neles strict nsemnndun atom individual. Ele nu pot fi redefinite sau utilizate nalte contexte:auto do goto signed unsigned

    break double if sizeof void

    case else int static volatile

    char enum long struct while

    const extern register switch

    continue float return typedef

    default for short union

    Unele implementri pot conine i alte cuvinte cheie: asm cdecl far huge interrupt near pascal

    Comparativ cu alte limbaje de programare, C are un numrmic de cuvinte rezervate.

    10 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    11/16

    Atomi lexicali, operatori

    Un identificator este un atom lexical compus din secventade litere, cifre sau underscore ("_") cu restricia c primulcaracter este o liter sau underscore. k , _id, contor , un_identificator

    gresit#unu , 100_gresit_doi , -plus

    n ANSI C, numai primele 31 de caractere sunt luate nconsiderare. De exemplu, identificatorulUn_nume_lung_format_din_multe_litere_01 este privit la fel caUn_nume_lung_format_din_multe_litere_02

    11 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    12/16

    Atomi lexicali, operatori

    Operatori aritmetici:+ - * / % Anumite simboluri au nelesuri dependente de context:

    printf("%d", a) a = b % 7a + b ++a a += b

    Operatorii au reguli de preceden i asociativitate n evaluareaexpresiilor. Parantezele sunt folosite pentru a controla cuordinea executrii operaiilor. 1 + 2 * 3 == 1 + (2 * 3)

    1 + 2 * 3 != (1 + 2) * 3

    1 + 2 - 3 + 4 5 + i - au aceeasi preceden, deci se vafolosi regula de asociativitate la stnga. Astfel1 + 2 - 3 + 4 5 == (((1 + 2) - 3) + 4) -5

    12 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    13/16

    Atomi lexicali, operatori

    Operatori Asociativitate

    () (postfixat)++ (postfixat)-- de la stnga la dreapta

    +(unar) -(unar)

    ++(prefixat) --(prefixat)

    de la dreapta la stnga

    * / % de la stnga la dreapta

    + - de la stnga la dreapta= += -= *= /= etc. de la dreapta la stnga

    13

    Toi operatorii de pe o linie (de exemplu, *, /, %) au aceeai prioritatentre ei, darprioritate mai mare dect cei ce apar n liniile de tabel de mai jos.

    Operatorii + i - pot fi i binari i unari. Cel unar are prioritate mai mare. De exemplu:- a * b - cfolosind regulile de preceden, se vede c aceasta este echivalent cu

    ((- a) * b) - c

    Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    14/16

    Atomi lexicali, operatori

    Operatorii(++,--) au una dintre cele mai mari prioriti i sepot asocia att la stanga, cti la dreapta. Operatorii ++ i -- sepot aplica variabilelor, dar nu i constantelor putem avea ++ii contor++, dar nu 167++ sau ++(a * b 1).

    ++inseamn nti incrementarea lui i, dup care expresia va fiutilizat mai departe cu aceast nou valoare;

    i++ nseamn nti utilizarea valorii vechi a lui i n expresia n

    care se gsete aceasta dup care se va incrementa i.

    int a, b, c = 0;

    a = ++c;

    b = c++;

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

    14

    a=1 b=1 c=3 ++c=3

    Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    15/16

    Atomi lexicali, operatori

    Operator de asignarea = b + c;

    Spre deosebire de celelalte limbaje, C trateaz = ca pe unoperator. Precedena sa este cea mai mic dintre toi

    operatorii i asociativitatea sa este de la dreapta la stnga. O instruciune de asignare simpl are forma:

    variabila = partea_dreapta;

    b = 2;

    c = 3; a = (b = 2) + (c = 3);

    a = b + c;

    15 Limbaje de programare Conf.dr. L. STOLERIU [email protected]

  • 7/31/2019 Limbaj de programare C2

    16/16

    Atomi lexicali, operatori

    Lista operatorilor de asignare:

    = += -= *= /= %= >>=