Sunteți pe pagina 1din 5

Programarea Calculatoarelor - Limbaje

Lucrarea 05. Operatori și expresii în limbajul C

O1. Cunoașterea operatorilor din limbajul C


Obiective O2. Utilizarea operatorilor în expresii complexe
O3. Cunoașterea tabelului de precedență al operatorilor

INTRODUCERE
De niții
Operanzi = constante, constante simbolice, variabile simple, tablouri, structuri, tipuri de date,
funcții , elemente de tablou, elemente de structuri, expresii.
Operatorii sunt simboluri ce speci că operaţiile de efectuat asupra operanzilor. În urma aplicării
unui operator se obţine un rezultat.
Expresie = unul sau mai mulți operanzi legați prin operatori

Evaluarea unei expresii se face în funcție de:


- precedență (prioritate) - ordinea de efectuare a operațiilor într-o expresie cu operatori din
clase diferite
- asociativitate - ordinea de efectuare a operațiilor într-o expresie cu operatori de aceeași prior-
itate
- conversii de tip implicite - operand de tip inferior convertit la tip superior
Tipuri de operatori: aritmetici; relaționali; logici; de atribuire; de conversie explicită; de deter-
minare a dimensiunii; paranteză; condițional; virgulă.
Ordinea de evaluare a expresiilor în limbajul C

Prioritate Operator Descriere Asocia-


tivitate

() expresie în paranteză S-D

[] indexare tablou

1 . selectare membru structură

-> selectare membru structură prin pointer

++, -- incrementare post xată și decrementare post x-


ată

+, - operatori unari + și - D-S

++, — incrementare pre xată și decrementare pre xată

!, ~ operatorii de negare și complementare


2

! Adriana Stan, Ligia Chiorean, Mircea Vaida # Programarea Calculatoarelor - Limbaje


fi
fi
fi
fi
fi
fi
2
* dereferențiere

& adresare

sizeof dimensiune operand

(tip) conversie explicită

3 *, /, % înmulțire, împărțire, modulo S-D

4 +, - adunare, scădere S-D

5 <<, >> deplasare la stânga și la dreapta S-D

6 <=, <, >=, > operatori relaționali S-D

7 !=,== egalitate S-D

8 & și pe biți S-D

9 ^ sau exclusiv pe biți S-D

10 | sau pe biți S-D

11 && și logic S-D

12 || sau logic S-D

13 ?: operatorul condițional D-S

=, +=, -=, *=, /=,


14 %=, &=, ^=, |=, <<=, atribuire D-S
>>=

15 , operatorul virgulă S-D

EXEMPLE
1. Operatori relaționali

#include <stdio.h>
int main(void){
int x, y;
x = 0;
y = 0;
printf("x<y: %d", (x<y));
printf("x>y: %d", (x>y));
printf("x<=y: %d", (x<=y));
printf("x>=y: %d", (x>=y));
printf("x==y: %d",(x==y));
return 0;
}

! Adriana Stan, Ligia Chiorean, Mircea Vaida $ Programarea Calculatoarelor - Limbaje


2. Veri că dacă un caracter introdus de la tastatură este literă sau nu cu ajutorul operatorului
ternar.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int isAlpha (char ch);
int main (){
char ch;
const char* rez;
printf("Introduceti un caracter: ");
scanf("%c", &ch);
rez = isAlpha(ch) != 0 ? "litera" : "nu e litera";
printf("%s\n", rez);
}
int isAlpha (char ch){
return ((ch >= 'a')&&(ch <= 'z'))||((ch >= 'A')&&(ch <= 'Z'));
}
3. Operatori logici

#include <stdio.h>
int main(void){
int x, y;
printf ("Introduceti doua numere intregi: ");
scanf("%d %d", &x, &y);
printf("!x: %d",!x);
printf("!y: %d", !y);
printf("x&&y: %d" , x&&y);
printf("x||y: %d", (x||y));
return 0;
}

4. Operatori pe biți

#include <stdio.h>
int main(void){
char x = '\011';
char y = '\027';
printf("x = %d\n", x);
printf("y = %d\n", y);
printf("~x = %d\n" , ~x);
printf("x & y = %d\n", (x & y));
printf("x | y = %d\n", (x | y));
printf("x ^ y = %d\n" , (x ^ y));
printf("x << 2 = %d\n" , (x << 2));
printf("x >> 2 = %d\n", (x >> 2));
}

! Adriana Stan, Ligia Chiorean, Mircea Vaida % Programarea Calculatoarelor - Limbaje


fi
5. Atribuire compusă

#include <stdio.h>

int main(void){
int x;
printf("Introduceti numarul x: ");
scanf("%d", &x);
x ^= 0x0f;
printf("\n%x", x);
x %= 2;
printf("\n%d", x);
x &= 0x01;
printf("\n%x\n", x);
x *= 4;
printf("\n%d", x);
}
6. Incrementare/decrementare

#include <stdio.h>
int main(void){
int x;
printf("Introduceti numarul x: ");
scanf("%d", &x);
printf("\n%d", x++);
printf("\n%d", x);
printf("\n%d", --x);
printf("\n%d\n", x);
}
6. Operatorul sizeof()

#include <stdio.h>

int main (void)


{
printf("Dim tipului char: %lu octeti\n", sizeof(char));
printf("Dim tipului char*: %lu octeti\n", sizeof(char*));
printf("Dim tipului short: %lu octeti\n", sizeof(short));
printf("Dim tipului int: %lu octeti\n", sizeof(int));
printf("Dim tipului long: %lu octeti\n", sizeof(long));
printf("Dim tipului float: %lu octeti\n", sizeof(float));
printf("Dim tipului double: %lu octeti\n", sizeof(double));
printf("Dim pentru 1.55: %lu octeti\n", sizeof(1.55));
printf("Dim pentru 1.55L: %lu octeti\n", sizeof(1.55L));
printf("Dim pentru sirul SALUT: %lu octeti \n", sizeof("SALUT"));
}

TEME
1. Să se scrie un program care a şează valoarea polinomului de gradul 3 pentru o anumită val-
oare a variabilei reale x. Coe cienții polinomului și x se citesc de la tastatură.

! Adriana Stan, Ligia Chiorean, Mircea Vaida & Programarea Calculatoarelor - Limbaje
fi
fi
2. Să se scrie un program care citeşte lungimile laturilor unui triunghi (folosind variabile întregi) şi
a şează aria triunghiului ca valoare reală.
3. Să se scrie un program care a şează valorile biţilor unei variabile de tip unsigned char
aplicând succesiv operatorul de deplasare dreapta şi operatorul %.
4. Să se scrie un program care citește de la tastatură o valoare întregă fără semn care va
a şată în zecimal, binar, octal şi hexazecimal. Folosiţi o funcţie pentru conversia numerelor din
baza 10 în baza 2. Implementaţi o altă funcţie numită getsets() care primeşte trei valori ca para-
metri:
- x: valoarea citită de la tastatură
- p: poziţia unui bit din cei 16/32 sau 64 de biţi (numărând de la dreapta)
- n: numărul de biţi care vor extraşi din reprezentarea binară a numărului.
Funcţia returnează cei n biţi ai valorii x, pornind de la poziţia p (unde p<8*sizeof(x) şi p>n) și
mergând spre dreapta. A şaţi rezultatul în binar, octal şi hexazecimal.
5. Să se scrie un program care citeşte de la tastatură un număr întreg şi a şează numărul de ze-
rouri din reprezentarea sa binară.
6. Se citește de la intrarea standard o valoare întreagă. Să se a șeze în format zecimal valoarea
ecărui octet al întregului citit.
7. Se citesc de la tastatură 2 numere reale. Să se realizeze operațiile de adunare, scădere, în-
mulțire și împărțire cu valorile date. Să se a șeze rezultatele obținute, apoi să se rotunjească
valorile obținute la valori întregi, folosind operatorul cast și fără a folosi funcții speci ce. Să se
a șeze apoi valoarea minimă dintre numerele citite folosind operatorul condițional (ternar).
8. Citiți de la tastatură mai multe caractere reprezentând litere mici. Să se transforme caracterele
citite în litere mari în 2 moduri: a) printr-o operație aritmetică; b) folosind o operație logică și o
mască adecvată.
9. Citiți de la tastatura 2 numere întregi. Determinați aria cercului cu raza egală cu prima valoare
citită și calculați aria dreptunghiului cu laturile egale cu valorile date. A șați aria calculată speci-
când forma geometrică pentru care s-a făcut calculul.

! Adriana Stan, Ligia Chiorean, Mircea Vaida ' Programarea Calculatoarelor - Limbaje
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi

S-ar putea să vă placă și