Académique Documents
Professionnel Documents
Culture Documents
Cursul II
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
printf() i scanf()
printf("%s%s\n", "Aceasta instructiune se va scrie ", "pe o linie de text foarte lunga.\n");
%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
i nsemn includerea n acest loc a fiierului header specificat din directoarele speciale:
#include <nume_fisier>
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
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:
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).
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
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
pascal
10
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
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
1 + 2 * 3 1 + 2 * 3
== !=
1 + (2 * 3) (1 + 2) * 3
12
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 dreapta la stnga
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
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);