Vous êtes sur la page 1sur 16

Limbaje de programare

Cursul II

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atribuiri
#include <stdio.h> 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 LSTOLER@UAIC.RO

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


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


3

%e - numr n virgul flotant n notaia tiinific %g - in format e sau f (cel mai scurt dintre ele)
Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Observaie: Funcia printf() poate folosi formatul %f pentru tiprirea numerelor float i double, pe cnd scanf() folosete formatul %f pentru citirea unui float, %lf pentru citirea unui double i %Lf pentru long double.
4 Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

scanf() este asemntoare lui printf() fiind folosit pentru operaii de intrare nu de ieire.

printf() i scanf()

Directive pre-compilare

Directiva #include are forma general:


Visual Studio UNIX
/usr/include

i nsemn includerea n acest loc a fiierului header specificat din directoarele speciale:

#include <nume_fisier>

C:\Program Files\Microsoft Visual Studio .NET\Vc7\include

("nume_fisier" din directorul curent).

Atunci cnd utilizm o funcie C, trebuie s specificm prototipul (definiia) ei. scanf() i printf() au prototipul n <stdio.h>, rand() are prototipul n <stdlib.h>, sin() are prototipul n <math.h> etc. #include nume_fisier
5 Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Directive pre-compilare
#include <stdio.h> ... #define PI 3.1415926535897932

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

Luate n considerare nainte de compilarea propriu-zis. Se recomand scrierea caracterului # pe prima coloan, iar a directivelor de precompilare la nceputul programului. De exemplu, dac n programul de mai sus exist n linia
atunci ea va deveni nainte de compilare:

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

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Stilul de programare

Un stil bun:

folosete spaii goale i comentarii, astfel nct codul s fie uor de citit i 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 este sub controlul iteraiei while; alegerea de nume sugestive pentru variabile; corespondena dintre acolade. #, {, }, main() pe prima coloan.
Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

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 greit prinf() in loc de printf()).

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

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

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atomi lexicali, operatori

Atomi lexicali:

Comentariile sunt iruri de caractere cuprinse ntre /* i */. Comentariile nu reprezint atomi lexicali. Compilatorul va traduce comentariile ntr-un singur caracter spaiu, de aceea comentariile nu fac parte din codul executabil.
9 Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

litere mici: litere mari: cifre: alte caractere: spaii:

a b ... z A B ... Z 0 1 ... 9 */=(){}[]<>'" !@#$%&_|^~\.,;:? blank, newline, tab

Atomi lexicali, operatori

Cuvintele rezervate (cheie) au un neles strict nsemnnd un atom individual. Ele nu pot fi redefinite sau utilizate n alte contexte:
auto break case char const continue default

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

Unele implementri pot conine i alte cuvinte cheie:


for short union asm cdecl far huge interrupt near

do double else enum extern float

goto if int long register return

signed sizeof static struct switch typedef

unsigned void volatile while

pascal

10

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atomi lexicali, operatori

Un identificator este un atom lexical compus din secventa de litere, cifre sau underscore ("_") cu restricia c primul caracter este o liter sau underscore.

n ANSI C, numai primele 31 de caractere sunt luate n considerare. De exemplu, identificatorul Un_nume_lung_format_din_multe_litere_01 este privit la fel ca
Un_nume_lung_format_din_multe_litere_02
11

k , _id, contor , un_identificator gresit#unu , 100_gresit_doi , -plus

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atomi lexicali, operatori

Operatori aritmetici: + * / %

Operatorii au reguli de preceden i asociativitate n evaluarea expresiilor. Parantezele sunt folosite pentru a controla cu ordinea executrii operaiilor.
printf("%d", a) a + b a = b % 7 ++a a += b

Anumite simboluri au nelesuri dependente de context:

1 + 2 * 3 1 + 2 * 3

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


Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

== !=

1 + (2 * 3) (1 + 2) * 3

12

Atomi lexicali, operatori


Operatori () (postfixat)++ (postfixat)-+(unar) -(unar) ++(prefixat) --(prefixat) * + / %

Toi operatorii de pe o linie (de exemplu, *, /, %) au aceeai prioritate ntre ei, dar prioritate 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 - c folosind regulile de preceden, se vede c aceasta este echivalent cu ((- a) * b) - c
13 Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

= += -= *= /= etc.

de la dreapta la stnga

de la stnga la dreapta de la stnga la dreapta

de la dreapta la stnga

de la stnga la dreapta Asociativitate

Atomi lexicali, operatori

Operatorii (++,--) au una dintre cele mai mari prioriti i se pot asocia att la stanga, ct i la dreapta. Operatorii ++ i -- se pot aplica variabilelor, dar nu i constantelor putem avea ++i i contor++, dar nu 167++ sau ++(a * b 1). ++i nseamn nti incrementarea lui i, dup care expresia va fi utilizat 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);

a=1

b=1

c=3

++c=3

14

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atomi lexicali, operatori

Operator de asignare a = b + c; Spre deosebire de celelalte limbaje, C trateaz = ca pe un operator. 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 + c;
15

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

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Atomi lexicali, operatori

Lista operatorilor de asignare: De exemplu:

= += -= *= /= %= >>= <<= &= ^= |=

int i = 1, j = 2, k = 3, m = 4; i += j + k i += (j + k) i = (i + (j + k)) j *= k = m + 5 j *= (k = (m + 5)) j = (j * (k = (m + 5)))

Expresiile de asignare pot fi incluse n alte instruciuni:


printf("%d", power *= 2);
16

Limbaje de programare Conf.dr. L. STOLERIU LSTOLER@UAIC.RO

Vous aimerez peut-être aussi