CATEGORII DOCUMENTE |
Elemente de baza ale limbajului C/C++
1. Despre limbajul C/C++
Limbajul C a aparut la inceputul anilor 70 (Dennis Ritchie si Brian Kernighan).
Limbajul C++ (Bjarne Stroustrup) poate fi privit ca o extensie a limbajului C care permite programarea pe obiecte (desi sunt multi programatori care nu-l accepta considerand ca limbajul C nu a fost conceput pentru aceasta).
Caracteristicile limbajului C/C++
Limbajul este extrem de flexibil (adica permite ca pornind de la un anumit algoritm, scris in pseudocod, sa poata fi scrise o multime de programe care nu seamana intre ele dar care fac acelasi lucru).
Limbajul permite ca anumite secvente sa poata fi scrise "concentrat". Dezavantajul este ca dupa o perioada de timp, chiar si cel care a scris secventa are dificultati in descifrarea ei.
Este preferat de multi programatori deoarece programele pot fi scrise intr-un mod foarte asemanator cu limbajul pseudocod.
Se poate foarte usor gresi, deoarece este permis sa se scrie "aproape orice".
2. Structura programelor C/C++
Respectand conditiile programarii structurate, un algoritm poate fi descompus in alti algoritmi mai mici (subalgoritmi).
Putem spune ca:
Fiecarui algoritm (subalgoritm) in C/C++ ii corespunde o functie care codifica algoritmul (subalgoritmul) in instructiuni C/C++.
O functie poate intoarce un rezultat sau nu. Daca aceasta nu intoarce nici un rezultat, spunem ca tipul rezultatului este void. Pot exista functii cu rezultat de tip real, intreg, etc.
O functie poate contine declaratii de variabile, care pot fi utilizate doar de ea, nu si de celelalte functii.
Un program C/C++ este alcatuit din una sau mai multe functii, din care una este radacina (adica nu poate lipsi) si executia programului incepe automat cu ea Aceasta functie se numeste main.
Programul poate contine si declaratii de variabile globale, adica variabile cu care pot lucra toate functiile care alcatuiesc programul respectiv
Cel mai simplu program C:
void main ()
Programul din exemplu este corect dar nu face nici o operatie.
Observatii
1. Programul este alcatuit numai din functia radacina, main.
2. Functia radacina este de tipul void, adica nu intoarce nici un rezultat.
3. Parantezele rotunde () se ataseaza oricarei functii. Intre ele, se pot scrie anumiti parametri. In acest caz, acestia lipsesc.
4. Acoladele constituie corpul functiei. Intre acestea se scriu instructiunile care alcatuiesc functia. In acest caz, nu este scrisa nici o instructiune.
Observatii
Limbajul face distinctie intre literele mari si mici.
Exemplu:
Void main()
Programul de mai sus da eroare de sintaxa, deoarece tipul Void nu este cunoscut
Nu are importanta plasarea cuvintelor pe linie si nici spatiile dintre ele.
Exemplu:
void main( )
Nu este indicata aceasta modalitate de scriere a programelor pentru ca vor fi foarte greu de citit si inteles.
Este permis ca tipul functiei sa lipseasca. In acest caz se presupune ca functia intoarce un rezultat intreg. La compilare se primeste un avertisment care poate fi ignorat
Exemplu:
main ()
3. Vocabularul limbajului
Vocabularul oricarui limbaj este format din:
setul de caractere
identificatori
separatori
comentarii
Setul de caractere al limbajului cuprinde:literele mari si mici ale alfabetului englez (a..z, A..Z); cifrele sistemului de numeratie zecimal (0..9); caracterele speciale ( + - * / % = < > ^ ~ ( ) [ ] . , : ; & | ? _ blanc).
Identificatorii sunt succesiuni de litere, cifre sau caracterul _ (liniuta de subliniere), primul caracter fiind obligatoriu o litera sau caracterul _.
Exemple: max, aux, a, _max; Contraexemple: 1max, mt$
Cuvintele rezervate (cuvinte cheie) sunt identificatori cu semnificatie speciala, care nu pot fi folositi in alt context decat cel precizat la definirea limbajului. De exemplu, cuvintele rezervate nu pot fi folosite ca denumiri de variabile, functii, etc.
Cuvintele rezervate in C++ sunt urmatoarele:
Separatori si comentarii.
Separatorii in C/C++ sunt blancul, sfarsitul de linie (CR) si comentariul. Instructiunile si declaratiile se separa prin ';'.
Comentariile sunt texte incadrate intre: /* si */ sau precedate de // (pentru comentariile care tin pana la sfarsit de linie).
Exemple:
1. /* acesta este un comentariu*/
2. a=2; // aceasta este o atribuire
4. Tipuri de date, tipuri standard
O variabila poate retine date de un anumit tip. Atunci cand se declara o variabila se precizeaza tipul ei.
Prin tip de date se intelege:
o multime de valori
o regula de codificare a lor (modul in care se reprezinta in memorie)
o multime de operatii definite pe multimea valorilor
Spunem ca variabilele au un tip standard daca acesta este cunoscut de catre limbaj fara a fi definit in cadrul programului (exista posibilitatea ca programatorul sa-si defineasca propriile tipuri)
Limbajul C contine urmatoarele tipuri standard:
tipuri intregi
tipuri reale
Observatii
1. In C nu exista tipul logic, dar se respecta urmatoarele reguli:
orice valoare diferita de 0, a oricarui tip, este considerata ca fiind TRUE;
orice valoare 0, a oricarui tip, este considerata ca fiind FALSE;
2. Tipul caracter este asimilat tipurilor intregi, deoarece oricare caracter este identificat printr-un cod asupra caruia pot fi aplicate operatiile specifice tipurilor intregi.
Tipuri intregi
Tipurile intregi sunt:
Tipul unsigned char (caracter fara semn, ocupa 8 biti si ia valori intre 0 si 255)
Tipul char (caracter, ocupa 8 biti si ia valori intre -128 si 127)
Tipul unsigned int (intreg fara semn, ocupa 16 biti si ia valori intre 0 si 65535)
Tipul short int (intreg scurt, ocupa 16 biti si ia valori intre -32768 si 32767)
Tipul int (intreg, ocupa de regula 16 biti (numarul acestora difera de la o implementare la alta) si ia valori intre -32768 si 32767)
Tipul unsigned long (intreg lung fara semn, ocupa 32 de biti si ia valori intre 0 si 4.294.967.295)
Tipul long (intreg lung cu semn, ocupa 32 de biti si ia valori intre -2.147.483.648 si 2.147.483.647)
Variabilele de tip intreg folosesc pentru memorarea datelor codul complementar (daca se retin date cu semn) sau baza 2 (daca se retin date fara semn). Caracterele se memoreaza prin codul ASCII.
Observatie
1. La declarare, variabilele pot fi initializate.
2. La tiparirea unei variabile de tip caracter se tipareste caracterul si nu codul sau, desi la atribuire se poate atasa fie codul caracterului, fie caracterul.
Tipuri reale
Variabilele de tip real retin numere cu zecimale (Exemplu: 6.82, 9.3, -8.6).
Tipurile reale sunt:
Tipul float (ocupa 32 biti si ia valori intre 3.4x10-38 si 3.4x1038)
Tipul double (ocupa 64 biti si ia valori intre 1.7x10-308 si 1.7x10308)
Tipul long double (ocupa 80 biti si ia valori intre 3.4x10-4932 si 1.1x104932)
Observatie: Variabilele reale se tiparesc cu 6 zecimale.
5. Constante
Constantele sunt date care nu se modifica pe parcursul executiei unui program. Daca au asociat un identificator atunci se numesc constante simbolice. Daca nu au asociat nici un identificator, atunci ele se reprezinta prin valoarea lor.
Exista mai multe tipuri de constante:
Constantele intregi se clasifica astfel:
zecimale (in baza 10). Ex: 123, 345, 121
octale (in baza 8). Declararea lor se face cu un 0 la inceputul numarului. Ex: 054 (pentru 54(8))
hexazecimale (in baza 16). Declararea lor se face prin scrierea secventei 0X sau 0x la inceputul numarului. Ex: 0x5e7 sau 0X5E7 pentru 5E7(16).
Observatie: constantele de tip long au adaugata la sfarsit litera L sau l, iar cele de tip unsigned, literele U sau u. Ex: 3L, 53u
Constantele caracter sunt reprezentate de unul sau mai multe caractere incadrate de apostrofuri.
Ex: 'd', '8', 'n'
Memorarea lor se face utilizand tipul char (se memoreaza codul ASCII al caracterului respectiv). Spatiile albe sunt alcatuite din: spatiu (' '), tabulator orizontal ('t') si caracter de rand nou ('n'). Acestea au un rol special pentru operatiile de citire/scriere.
Constantele reale au forma generala:
[+/-] [cifre].[cifre] [E/e[-]cifre]
Implicit, acestea sunt memorate folosind tipul double. Se poate forta utilizarea tipului float punand la sfrasitul numarului unul din caracterele 'f' sau 'F', iar pentru long double caracterul 'l' sau 'L'.
Ex: -33.221, -2.33E-11, -123.5f, 56.789L.
Constantele siruri de caractere sunt reprezentate de siruri de caractere delimitate de caracterul ".
Ex: "Am inceput limbajul C"
Forma generala a unei declaratii de constanta este:
const [tip] nume = valoare;
unde:
tip - reprezinta tipul constantei (daca lipseste, implicit se considera int)
nume - reprezinta numele constantei
valoare - reprezinta valoarea constantei
Exemplu: const int numar=10;
const numar = 10;
const float pi=3.14
6. Declararea variabilelor
Declararea variabilelor se realizeaza prin specificarea tipului, a identificatorilor si eventual a valorilor cu care se intializeaza.
Exemple:
char a='y', b=76, c
int d, e=178
char a=99, b='c'
int x, z, max=32000, z1
float a, b, c
7. Citiri si scrieri
Observatie 1:
In C/C++ citirile / scrierile (si multe alte operatii )se fac cu ajutorul unor functii speciale. Ca sa utilizeze functiile respective, compilatorul are nevoie de informatii referitoare la ele. Aceste informatii (prototipuri) se gasesc in anumite fisiere care trebuie incluse la inceputul programului C/C++. Fisierul inclus nu va fi vizualizat (adica programatorul nu vede nimic pe monitor). Dupa ce a fost efectuata aceasta operatie se trece la compilarea propriu-zisa. Aceasta operatie, efectuata inaintea compilarii, se numeste precompilare sau preprocesare.
Un fisier cu text sursa poate fi inclus cu ajutorul constructiei:
#include "nume_fisier"
sau
#include <nume_fisier>
Observatie1
Formatul cu paranteze unghiulare <.> se utilizeaza la includerea fisierelor standard, cum sunt cele care contin prototipuri pentru functiile de biblioteca.
Exemple:
#include "f1.cpp"
#include <stdio.h>
#include "c:borlandcbinf1.cpp"
Observatie 2
Constructia #define se poate folosi pentru a substitui prin nume o succesiune de caractere (utilitatea cea mai mare este in cazul constantelor). Formatul acesteia este:
#define nume succesiune_de_caractere
Folosind aceasta constructie, preprocesarea substituie peste tot in textul sursa nume cu succesiune_de_caractere, exceptand cazul cand nume apare intr-un sir de caractere sau intr-un comentariu.
Exemple:
#define a 100
#define dim_max 1000
1. Functia putch afiseaza un caracter pe ecran. Poate fi apelata astfel:
putch (expresie);
Functia afiseaza caracterul cu codul ASCII asociat valorii expresiei din functie si returneaza valoarea parametrului de la apel.
Prototipul acestei functii se afla in fisierul conio.h.
Exemplu: #include <conio.h>
void main()
2. Functia printf se foloseste pentru a afisa date pe ecran cu un anumit format. Poate fi apelata astfel:
printf (format, lista_parametri);
unde:
format este un sir de caractere care contine succesiuni de caractere (care se afiseaza ca atare pe ecran) precum si formatele datelor care se scriu (specificator de format).
lista_parametri este un sir de expresii separate prin virgula; valorile lor se vor afisa conform specificatorilor de format prezenti in format.
Observatie1
Functia returneaza numarul de octeti (caractere) care se afiseaza sau -1 in caz de eroare. Prototipul functiei este in fisierul stdio.h
Observatie2:
Un specificator de format incepe cu caracterul %, dupa care mai pot exista:
un caracter minus optional (pentru alinierea datelor la stanga);
un sir de cifre zecimale optional (reprezentand numarul minim de caractere pe care se afiseaza valoare respectiva);
un punct optional, urmat de un sir de cifre zecimale (reprezentand precizia zecimala a valorii respective);
una sau doua litere (care definesc tipul de conversie aplicat datei care se scrie); tipul conversiei se foloseste pentru a afisa pe ecran o data in forma dorita de programator.
Cei mai utillizati specificatori de format sunt:
c - pentru afisarea unui caracter;
s - pentru afisarea unui sir de caractere;
d - pentru afisarea datelor de tip int;
o - pentru afisarea datelor in baza 8;
X sau x - pentru afisarea datelor in baza 16;
f - pentru afisarea datelor de tip real in format zecimal;
E sau e - pentru afisarea datelor de tip real in format exponential;
Alti specificatori de format mai sunt:
u - pentru afisarea valorilor fara semn (unsigned);
g sau G - pentru afisarea valorilor reale in format f sau e sau E in asa fel incat afisarea sa ocupe un numar minim de caractere;
l - (poate sa preceada unul dintre specificatorii d, o, x , u) - pentru a afisa date de tip long;
L - (poate sa preceada una din literele f, e, E, g, G) - pentru a afisa date de tipul long double;
Exemple:
#include <stdio.h>
void main ()
Functiile getch si getche permit citirea de la tastatura a unui caracter (citirea se face fara ecou pe ecran). Prototipurile celor doua functii sunt in fisierul conio.h, deci utilizarea lor se poate face numai daca se include acest fisier.
Apelul celor doua functii se realizeaza astfel:
getch( getche();
Exemplu: #include <conio.h>
#include <stdio.h>
void main()
Functia scanf este utilizata pentru a introduce date de la tastatura. Ea poate fi apelata astfel:
scanf (format, lista_variabile);
unde
Ø format este un sir de caractere care defineste formatul datelor care se vor citi;
Ø lista_variabile sunt adresele zonelor de memorie in care se pastreaza datele citite dupa ce au fost convertite in formatele specificate;
Observatie:
Adresa zonei de memorie a unei variabile simple se determina cu ajutorul operatorului &. Astfel daca x este o variabila simpla de un tip oarecare, atunci &x este adresa zonei de memorie alocata variabilei x.
Prototipul functiei este in fisierul stdio.h
Specificatoarele de format folosesc literele:
Ø c (pentru caractere);
Ø s (pentru siruri de caractere);
Ø d (pentru numerele de tip intreg);
Ø D (pentru numerele de tip long);
Ø o (pentru intregi in baza 8);
Ø x sau X (pentru intregi in baza 16);
Ø u (pentru intregi fara semn, unsigned int);
Ø f (pentru numere reale);
Ø lf (pentru numere reale de lip double);
Exemple:
1. Se citeste a si x. Pentru a se introduce valoarea 3, iar pentru x 1.234.
#include <stdio.h>
void main()
Se citeste un caracter si se afiseaza caracterul citit si codul sau.
#include <stdio.h>
void main()
Definitie: Prin expresie se intelege o succesiune de operatori si operanzi care respecta anumite reguli specifice limbajului.
Un operand
poate fi: o
Regula conversiilor implicite (se aplica la evaluarea expresiilor). Aceasta regula actioneaza atunci cand un operator binar se aplica la doi operanzi de tipuri diferite: operandul de tip "inferior" se converteste spre tipul "superior" (ex. int se poate converti la double)
Operatorii care pot fi utilizati in C/C++, impreuna cu prioritatea si tipul lor sunt prezentati in tabelul urmator:
prioritate operator tip operator |
1. () [ > :: . apel, indexare, indirectare, |
acces C++, selector |
! ~ + - ++ -- * (typecast) operatori unari |
sizeof new delete |
3. .* ->* referinte C++ |
4. * / % operatori multiplicativi |
5. + - operatori aditivi |
6. << >> operatori de shiftare |
7. < <= > >= operatori relationali |
8. == != operatori de egalitate |
9. & SI binar |
10. ^ XOR binar (SAU exclusiv) |
11. | OR binar |
12. && SI logic |
13. || SAU logic |
14. ?: operatori conditionali |
15. = *= /= += %= -= &= operatori de atribuire |
^= |= <<= >>= |
16. , operator virgula |
Operatori aritmetici
Operatorii aritmetici sunt:
Ø operatorii unari + si -
Ø operatorii binari multiplicativi * / si %
Ø operatorii binari aditivi + si -
Exemple:
Ø Fie int a=10. Expresia 4*a/3 este de tip int si are valoarea 13.
Ø Fie float a=10. Expresia 4*(a/3) este de tip float si are valoarea 13.3333.
Ø Fie float a=10. Expresia 4*a/3 este de tip float si are valoarea 13.3333.
Ø Fie int a= -10. Expresia a%3 este de tip int si are valoarea -1.
Ø Fie int a= -10. Expresia a*-3 este de tip int si are valoarea 30.
Ø Fie int a=10; char b=2; float c=5. Expresia a+b+c este de tip float si are valoarea 17.000000.
Observatie:
In cazul in care apar operanzi de mai multe tipuri se aplica regula conversiilor implicite.
Ø Orice operand de tip char este convertit catre int;
Ø Orice operand de tip unsigned char este convertit catre int;
Ø Orice operand de tip short este convertit catre int;
Ø Daca un operand este de tip long double, atunci si celalalt operand se converteste catre acest tip;
Ø Daca un operand este de tip float, atunci si celalalt operand se converteste catre acest tip;
Ø Daca un operand este de tip unsigned long, atunci si celalalt operand se converteste catre acest tip;
Ø Daca un operand este de tip long, atunci si celalalt operand se converteste catre acest tip;
Ø In cazul in care sunt doi operanzi de tipul char (unsigned char) rezultatul va fi de tipul int (conform primei reguli);
Operatori relationali
Operatorii relationali sunt:
<, <=, >, >=
Observatie:
Expresiile ce contin acesti operatori au valoarea 1 daca valorile celor doi operanzi satisfac relatia reprezentata de oprator sau 0 in caz contrar.
Exemple:
Ø 3 > 5 - expresia are valoarea 0.
Ø 'a'> 'b' - expresia are valoarea 0.
Ø 3 < 5 - expresia are valoarea 1.
Ø 3 +7 >= 11 - 1 - expresia are valoarea 1. (operatorii relationali au prioritate mai mica decat operatorii aditivi)
Operatori de egalitate
Operatorii de egalitate sunt:
= = (pentru egal) si != (pentru diferit)
Observatie:
Expresiile ce contin acesti operatori au valoarea 0 sau 1 daca in functie de modul in care este respectata sau nu egalitatea (respectiv inegalitatea).
Exemple:
Ø - expresia are valoarea 1.
Ø - expresia are valoarea 0.
Ø - expresia are valoarea 1.
Operatori logici
Operatorii logici sunt:
! (negatia logica) && (si logic) || (sau logic)
Tabelele de adevar ale celor trei operatori sunt:
x |
!x |
¹ |
x |
y |
x&&y |
|
||
|
|||||
¹ |
|
||||
¹ |
|
||||
¹ |
¹ |
|
|||
x |
y |
x||y |
|||
¹ | |||||
¹ | |||||
¹ |
¹ | ||||
Exemple:
Ø Fie float a=2. Expresia !a are valoarea 0;
Ø Fie float a=0. Expresia !a are valoarea 1;
Ø Fie int a=1, int b=3. Expresia a&&b are valoarea 1;
Ø Fie int a=1, int b=0. Expresia a&&b are valoarea 0;
Ø Fie int a=0, int b=3. Expresia a||b are valoarea 1;
Operanzii sunt tratati astfel: intai cel din stanga, apoi (daca mai este cazul) cel din dreapta.
Operatori logici pe biti
Operatorii logici pe biti sunt:
Ø ~ - complement fata de 1
Ø << - deplasare la stanga
Ø >> - deplasare la dreapta
Ø & - si logic pe biti
Ø ^ - sau exclusiv logic pe biti
Ø | - sau logic pe biti
Acesti operatori se aplica la operanzi de tip intreg. Ei se executa bit cu bit si operanzii se extind la 16 biti daca este necesar.
1). Operatorul << este binar. Expresia a << b are efectul urmator: se deplaseaza catre stanga bitii lui a cu un numar de pozitii egal cu valoarea lui b. Bitii din fata lui a se pierd iar la sfarsit se completeaza cu 0.
2). Operatorul >> este binar. Expresia a >> b are efectul urmator: se deplaseaza catre dreapta bitii lui a cu un numar de pozitii egal cu valoarea lui b.
Ø Daca a este de un tip intreg fara semn, pozitiile ramase libere (in stanga) vor retine valoarea 0.
Ø Daca a este un intreg cu semn, fiecare pozitie din stanga ramasa libera se completeaza cu valoarea retinuta de bitul de semn.
3). In cazul operatorilor binari & , rezultatul se obtine aplicand pentru fiecare pereche de biti aflati pe aceeasi pozitie regulile din tabelul urmator:
a |
b |
a&b |
a|b |
a^b |
4). Operatorul (negare pe biti) inverseaza continutul bitilor ( 0 devine 1 si invers).
#include <conio.h>
#include <stdio.h>
void main()
Operatori de incrementare si decrementare
Acesti operatori sunt unari si au rolul de a incrementa sau decrementa continutul unei variabile. Operatorii sunt:
(pentru incrementare)
(pentru decrementare
Operatorii pot fi prefixati (aplicati in fata operandului; ex: ++a sau --a, unde a este de tip int) sau postfixati (aplicati dupa operand; ex: a++ sau a-- unde a este de tip int).
Ø Daca operatorul este prefixat, variabila este incrementata (decrementata) inainte ca valoarea retinuta de ea sa intre in calcul.
Ø Daca operatorul este postfixat, variabila este incrementata (decrementata) dupa ce valoarea retinuta de ea intra in calcul.
Observatie
In cazul utilizarii formei postfixate, apar situatii in care nu se poate decide care va fi valoarea produsa de expresie la evaluare. Din acest motiv, se va evita scrierea unor astfel de expresii.
Exemple:
Ø Fie int a=1. Expresia 1+a++ are valoarea 2, dar, dupa evaluare, a va retine valoarea 2;
Ø Fie int a=1. Expresia 1-++a are valoarea -1, dar, dupa evaluare, a va retine valoarea 2;
Ø Fie int a=1. Expresia 1+++a este eronata sintactic deoarece compilatorul a considerat operatorul ++ pentru 1 si nu pentru a. Aplicarea acestor operatori se face numai pentru variabile.
Ø Fie int a=1, b=3. Expresia a++*b++ are valoarea 3, dar, dupa evaluare, cele doua variabile retin 2 si 4;
Ø Fie int a=1, b=3. Expresia ++a*++b are valoarea 8, dar, dupa evaluare, cele doua variabile retin 2 si 4;
Ø Fie int a=1. Expresia a+++a++ nu poate fi decisa;
Operatorul de atribuire
Operatorul de atribuire este
El se utilizeaza in expresii de forma:
v=expresie ,unde v este o variabila
Principiul de executie este urmatorul:
Ø se evalueaza expresia;
Ø i se atribuie variabilei v valoarea obtinuta (daca este necesar se efectueaza conversia implicita).
Se pot efectua si atribuiri multiple de forma:
v=v1=v2=..vn=expresie
Pentru atribuiri se mai pot utiliza si operatorii: <<= >>= &=
O atribuire de forma v op expresie are acelasi rezultat ca
v= v op expresie
Exemple:
Ø Fie int a=1, b=3; float c. In urma atribuirii c=a/b, c va contine valoarea reala 1.0;
Ø Fie int a, b; float c;. In urma evaluarii expresiei c=a=b=1, a va avea valoarea 1, b va avea valoarea 1, iar c va avea valoarea 1.0;
Ø Fie int a=3. In urma evaluarii expresiei a*=2, a va avea valoarea 6;
Ø Fie int a=0, s. In urma evaluarii expresiei s=(a=3)+(++a) nu se poate decide daca s va avea valoarea 4 sau 7, deoarece nimeni nu garanteaza care operand (dintre cei doi legati de operatorul +) va fi evaluat primul;
Observatie:
In cazul in care unei variabile de unul dintre tipurile intregi i se atribuie continutul unei variabile reale, acesta este trunchiat. Ex: Fie int a, float b=-1.9. In urma atribuirii a=b, a va avea valoarea -1.
Atentie: Trunchiere nu inseamna parte intreaga.
Operatorul virgula
Operatorul virgula leaga doua expresii intr-una singura conform formatului:
exp1, exp2, . , expn;
Expresiile se evalueaza in ordinea exp1, exp2, ., expn. Aceasta expresie (construita din mai multe) va avea valoarea si tipul ultimei expresii.
Exemplu:
Fie int a=1, b=5; float c; Expresia c=a=b+1, a=c+2, b=b+1; va fi de tipul int si va avea valoarea 6.
Operatorul conditional
Operatorul conditional permite construirea de expresii a caror valoare depinde de valoarea unei conditii. O expresie conditionala are urmatoarea forma:
exp1 ? exp2 : exp3
Principiul de executie este urmatorul:
Ø se determina valoarea expresiei exp1;
Ø daca exp1 are valoare diferita de 0 (are valoarea adevarat), atunci valoarea si tipul expresiei conditionale coincid cu valoarea si tipul expresiei exp2.
Ø altfel (adica exp1 are valoarea 0) valoarea si tipul expresiei conditionale coincid cu valoarea si tipul expresiei exp3.
Exemplu: maximul dintre a si b se poate exprima prin : (a>b)?a:b
Operatorul dimensiune
Acest operator este folosit pentru determinarea dimensiunii in octeti a unei date sau a unui tip. El poate fi utilizat sub formele:
sizeof (expresie)
sizeof (tip)
unde data poate fi o variabila sau adresa, iar tip poate fi identificator de tip predefinit, definit de utilizator sau o constructie care defineste un tip.
Exemplu:
Ø Fie int a; sizeof (a)=2 (daca in versiunea de C utilizata, tipul int ocupa 2 octeti);
Ø Fie float a. Atunci sizeof (a) =4;
Ø sizeof (float) =4
Ø Fie int a; double b. Atunci sizeof (a+b)=8;
Ø Fie float x. Atunci sizeof (++x)=4, dar x ramane nemodificat.
Operatorul de conversie implicita
Acest operator se foloseste atunci cand se doreste ca unul sau mai multi operanzi sa intre in calculul unei expresii asa cum doreste programatorul (nu implicit). Pentru aceasta, inaintea operandului se trece intre paranteze tipul sau.
Exemple:
Ø Fie float x=-1.9. Atunci expresia (int)x are valoarea -1;
Ø Fie float x=-1.9. Atunci expresia (int)(++x+3) are valoarea 2;
Ø Fie int a=3, b=6. Atunci expresia (float) a/b are valoare 0.5;
Ø Fie int x=12333; double y. Se poate folosi expresia y=sqrt((double)x);
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1280
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved