Download - Limbaj de programare C2
-
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:
= += -= *= /= %= >>=