Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Operatori si expresii - Instructiunea de atribuire

c



+ Font mai mare | - Font mai mic



Operatori si expresii

Instructiunea de atribuire

Este instructiunea prin care unei variabile i se atribuie o expresie. Simbolul folosit este semnul "=".



In tabelul de mai jos sunt prezentate principalele variante ale instructiunii de atribuire

Tabelul Principalele variante ale instructiunii de atribuire

operatia

sintaxa

exemple

observatii

Atribuire simpla

<variabila> = <expresie>;

x=tan(pi()/3);

Atribuirea combinata cu un operator

<variabila> <op> = <expresie>;

x+=y;

i-=2;

a*=ln(a);

alfa /=n;

Este echivalenta cu:

<variabila> = <variabila> op <expresie>;

Operatori aritmetici, relationali si logici, si pe biti

Operatori aritmetici unari (3): -, ++ , --

"++" - Incrementare - Mareste valoarea variabilei cu 1.

"--" - Decrementare - Micsoreaza valoarea variabilei cu 1

Pot fi in forma prefixata (Ex. ++a) - prioritate mare, sau postfixata (Ex. b++) - prioritate mica.

Operatori aritmetici binari (5): +, -, *, /, % (modulo)

Observatie.: In C, prin impartirea a doi intregi se obtine tot un intreg

Operatori aritmetici binari compusi (cu atribuire) (5): +=, -=, *=, /=, %=

Semnif: expr1 op = expr2 expr1 = expr1 op expr2.

Ex. a+=2 a=a+2

Operatori relationali binari (6):    >, >=, <, <=, ==, != (diferit)

Operatori logici pe cuvant (3): && (SI), || (SAU), ! (NOT)

Ordinea descrescatoare a prioritatii: !, >, >=, <, <=, &&, ||

Tabelul Compunerea operatorilor logici pe cuvant

a

b

a&&b

a||b

aXORb

!a

Pentru aXORb nu exista operator dar se poate folosi (a||b)&&!(a&&b)

Operatori logici pe bit (6): ~ (NOT), & (SI), | (SAU), ^ (XOR), <<, >> (deplasare biti stanga/dreapta)

Operatorul conditional " ? :"

Este un operator ternar (necesita 3 operanzi), utilizat in constructii de forma:

expresie1 ? expresie2:expresie3

Se evalueaza expresia1. Daca aceasta are o valoare diferita de zero, atunci tipul si valoarea intregii expresii vor fi aceleasi cu tipul si valoarea expresiei2. Altfel (daca expresie1 are valoarea zero), tipul si valoarea intregii expresii vor fi aceleasi cu tipul si valoarea expresiei3. Deci operatorul conditional este folosit pentru a atribui intregii expresii tipul si valoarea expresiei2 sau a expresiei3, in functie de o anumita conditie. Acest lucru este echivalent cu:

Daca expresie1 diferita de zero

Atunci evalueaza expresie2

Altfel evalueaza expresie3

Prioritatea operatorilor

Tabelul 5.1 prezinta ierarhia tuturor operatorilor (grupati pe categorii) folositi in limbajul C cu prioritatile lor si regulile de asociativitate. Operatorii dintr-o categorie au aceeasi prioritate. Retineti ca toti operatorii, cu exceptia operatorilor unari, a acelor combinati cu atribuire si a operatorului ?, se asociaza de la stanga la dreapta. Operatorii unari (*, &, -) si operatorul ? se asociaza de la dreapta la stanga.

Tabelul Prioritatea operatorilor

Nr.

Clasa de operatori

Operatori

Asociativitate

Primari

[] . -> ::

de la stanga la dreapta

Unari

! (NOT pe cuvant) ~ (NOT pe bit) ++ -- sizeof (tip)

de la stanga la dreapta

-(unar) *(deferentiere) &(referentiere)

de la dreapta la stanga

Multiplicativi

de la stanga la dreapta

Aditivi

de la stanga la dreapta

Deplasare pe bit

<< >>

de la stanga la dreapta

Relationali

< <= > >=

de la stanga la dreapta

De egalitate

de la stanga la dreapta

& (SI logic pe bit)

de la stanga la dreapta

^ (XOR pe bit)

de la stanga la dreapta

| (SAU logic pe bit)

de la stanga la dreapta

&& (SI logic pe cuvant)

de la stanga la dreapta

|| (SAU logic pe cuvant)

de la stanga la dreapta

Conditional

de la dreapta la stanga

De atribuire

+= -= *= %=

&= ^= |= <<= >>=

de la dreapta la stanga

Virgula

de la stanga la dreapta

Conversia intre bazele de numeratie

Operatie

Cat

Rest

Conversia zecimal-binar

Aceasta se realizeaza prin impartiri succesive la doi pana cand catul devine zero; sirul resturilor in ordine inversa formeaza numarul in baza doi.

Ex.: 2410 = 110002. Acest lucru s-a obtinut conform operatiilor din tabelul alaturat.

Conversia binar-zecimal

Numarul in baza 10 este suma produselor dintre cifrele numarului in baza doi si doi ridicat la o putere egala cu pozitia cifrei in numar; numerotarea incepe din dreapta cu pozitia zero.

Ex.: 110102 = 1∙24 + 1∙23 + 0∙22 + 1∙21 + 0∙20 = 2610

Conversia hexazecimal-binar

Se scrie fiecare simbol al numarului hexazecimal sub forma binara.

Ex.: DFH = 110111112 deoarece DH = 1310 = 11012, iar FH = 1510 = 11112

Conversia binar-hexazecimal

Numarul binar se imparte in grupuri de cate patru cifre, incepand de la dreapta la stanga, iar apoi fiecare grup de cifre este scris in baza saisprezece.

Ex.: 1101010 = 01101010 = 6AH deoarece 0110 = 610 = 6H, iar 1010 = 1010 = AH

Exemple

Operatori aritmetici

//Program cu operatii aritmetice

#include<iostream.h>

void main(void)

Aria triunghiului- formula lui Heron

//Aria triunghiului- formula lui Heron

#include <iostream.h>

#include <math.h>

main()

Rezolvarea unui sistem de doua ecuatii cu doua necunoscute

1.citeste a11,a12,a21,a22,b1,b2

2.det = a11*a22-a21*a12

3.detx = b1*a22-b2*a12

4.dety = a11*b2-a21*b1

5.x = detx/det; y = dety/det

SCRIE x,y

Incrementari/decrementari/atribuiri

Care sunt valorile variabilelor a,b si dupa executia fiecareia dintre urmatoarele instructiuni (Valori initiale: a= 0; b= 0; c= 0):

a=(++b)+(++c)

a=b+++c++

a=(++b)+c++

a=b--+--c

a=(++c)+c

a+=2

b-=3

c*=4

a/=2

Rezultatele programului se vor interpreta urmarind valorile variabilelor a, b si c in fereastra Watch

Operatori relationali si logici - exemplul 1

//Operatori relationali si logici

#include<conio.h>

#include<stdio.h>

void main ()

Operatori relationali si logici - exemplul 2

#include <iostream.h>

void main()

An bisect

Negrescu 3.12 Sa se scrie un program care citeste un intreg din intervalul [1600, 4900], ce reprezinta un an calendaristic, afiseaza 1 daca anul este bisect si 0 in caz contrar sau daca anul nu apartine intervalului indicat mai sus.

Un an, din calendarul gregorian, este bisect daca este multiplu de patru si nu este multiplu de 100 sau daca este multiplu de 400. Aceasta regula este valabila pentru anii care nu sunt anteriori anului 1600.

Daca notam cu an anul calendaristic, atunci el este bisect daca de exemplu:

an%4==0 (an este multiplu de 4)

an%100!=0 (an nu este multiplu de 100). Deci anul este bisect daca expresia

(1) an%4==0 && an%100!=0 este adevarata.

De asemenea, anul este bisect si in cazul in care expresia

(2) an%400==0 (an este multiplu de 400) este adevarata.

Deci anul este bisect daca este adevarata expresia (1) sau (2), adica daca este adevarata expresia:

an%4==0 && an%100! =0 || an%400==0

Programul

//An bisect

#include <stdio.h>

void main ( )

Operatori pe biti

Programul afiseaza rezultatul urmatoarelor expresii:

Val initiala x= 7, in binar 00000111

Deplasare biti

x=x<<1 da x= 14, in binar 00001110

x=x<<3 da x= 112, in binar 01110000

x=x<<2 da x= 192, in binar 11000000

x=x>>1 da x= 96, in binar 01100000

x=x>>2 da x= 24, in binar 00011000

x=~x da x= 231, in binar 11100111

SI

7, in binar 00000111; 14, in binar 00001110

x=(7&14) da x= 6, in binar 00000110

SAU

128, in binar 10000000; 3, in binar 00000011

x=(128|3) da x= 131, in binar 10000011

XOR

127, in binar 01111111 120, in binar 01111000

x=(127^120)    da x= 7, in binar 00000111

Programul

//Operatii pe biti

#include<conio.h>

#include<iostream.h>

//Functie de afisare

dectobin(int x)

do

while(x);

for(i=0;i<8;i++)

cout<<r[i];

void main()

Operatorul ternar - maximul a doua numere

Negrescu 3.19 Sa se scrie un program care citeste doua numere si afiseaza maximul dintre ele.

Operatorul ternar - maximul a 2 numere

#include <stdio.h>

void main ()

Operatorul ternar - modulul unui numar

Negrescu 3.20 Sa se scrie un program care citeste un numar si afiseaza valoarea lui absoluta.

modulul unui numar

#include <stdio.h>

void main()

Operatorul cast - radacina patrata a unui numar

Negrescu 3.17 Sa se scrie un program care citeste un intreg si afiseaza radacina patrata din numarul respectiv.

#include <stdio.h>

#include <math.h>

void main( )

Observatie: in acest program, pentru extragerea radacinii patrate s-a utilizat functia sqrt. Ea are prototipul: double sqrt(double). Acest prototip este definit in fisierul math.h.

Operatorul cast - calculul unei expresii

Negrescu 3.18 Sa se scrie un program care citeste pe n de tip intreg si afiseaza valoarea expresiei n/(n+1) cu 15 zecimale.

#include <stdio.h>

void main( )

Observatie: Expresia n/(n+1) realizeaza impartirea intreaga a lui n la n + 1. Pentru a obtine catul impartirii cu 15 zecimale este necesar sa se efectueze impartirea neintreaga. In acest scop s-a convertit operandul n spre lipul double. In felul acesta, conform regulii conversiilor implicite, se converteste spre double si cel de al doilea operand si apoi se face impartirea celor doi operanzi flotanti.

Operatorul virgula

Negrescu 3.23 Sa se scrie un program care citeste doi intregi si afiseaza maximul dintre valorile lor absolute.

#include <stdio.h>

void main( )

Observatie: Expresia: (c = a<0 ?-a), (d = b<0 ?-b:b), (c>d) se compune din trei expresii care se evalueaza de la stanga la dreapta.

Prima atribuie lui c valoarea absoluta a lui a, a doua atribuie lui d valoarea absoluta a lui b, iar a treia testeaza relatia c>d. Valoarea intregii expresii coincide cu 1 daca c>d si cu zero in caz contrar.

Probleme teoretice

Ce reprezinta datele si care sunt atributele lor ?

Care sunt diferentele intre constante si variabile ?

Cine determina tipul unei constante ?

Ce sunt identificatorii ?

Ce sunt directivele preprocesor ?

Ce reprezinta variabilele ?

Ce sunt constantele ?

Enumerati tipurile simple de variabile.

Cate tipuri de directive preprocesor cunoasteti ? Exemple.

Care este modalitatea de a interzice modificarea valorii unei variabile ?

Ce loc ocupa declararea variabilelor in cadrul unui program sursa scris in limbajul C++ ?

Ce contin fisierele antet (header) ?

Ce tipuri de variabile se utilizeaza pentru datele numerice ?

Care sunt calificatorii folositi alaturi de tipurile de baza pentru obtinerea tipurilor derivate de date ?

Ce semnifica parantezele unghiulare < > care incadreaza numele unui fisier header ?

Care este diferenta intre constantele 35.2e-1 si 3.52 ? Dar intre 't' si 't' ?

Ce tip are constanta 6.44 ?

Care este diferenta intre operatorii = si == ?

Ce reprezinta caracterele 'escape' ?

Constante intregi.

Constante caracter.

Ce tipuri de conversii cunoasteti ?

Care sunt conversiile realizate in mod automat, de catre compilator ?

Constante sir de caractere.

Constante reale.

Operatorul virgula.

Operatorul sizeof.

Operatori aritmetici binari compusi.

Operatorul de referentiere.

Operatori relationali binari.

Probleme practice

Sa se scrie declaratiile pentru definirea constantelor simbolice: pi, g (acceleratia gravitationala), unghi_drept, dimensiune_MAX.

Care va fi rezultatul afisat pe ecran in urma executiei urmatoarelor secvente de instructiuni:

double a=9/2; cout<<a*5<<'n';

double a=9.7, b=5.6; cout<<(a+6<b)<<'n';

double a=9/4; cout<<a*6<<'n';

double x=3;int y=++x+5;cout<<y<<'n';

int a=7; cout<<(!a)<<'n';

int a=10.5; cout<<a++<<'n'; cout<<a<<'n';

int a=7; cout<<++a<<'n'; cout<<a<<'n';

int a=10; cout<<a++<<'n'; cout<<a<<'n';

double a=7/2; cout<<a<<'n';

int x=3; int y=x++-2; cout<<y<<'n';

int x=3; int y=++x+5; cout<<y<<'n';

double a=5.6, b=7.45; cout<<(a>b)<<'n';

Sa se verifice corectitudinea urmatoarelor secvente. Pentru cele incorecte, explicati sursa erorilor.

double a=9.7, b=5.2; int c=(a+6<b)++; cout<<c<<'n';   

double a=7/5; double c=a*5++; cout<<c<<'n';

double a=9.7, b=5.6; int c=(a%6<b)++; cout<<c<<'n';

double a=5.6, b=7.45; cout<<++(a+5>b)<<'n';

double a=9.8; double b=9.7; cout<<a%b<<'n';

cout<<&(a+8)<<'n';

int I=8; cout<<(I+10)++<<'n';

double a=8.7; A=(a+8)/56; cout<<A<<'n';

int x=3/5; int y=x++; char x='J'; cout<<'y='<<y<<'n';

char a='X'; const int b=89; b+=8; cout<<'b='<<b<<' a='<<a<<'n';

Sa se scrie un program care afiseaza urmatoarele mesaje:

Sirul 'este dupa-amiaza' este memorat pe . octeti.

marime intreaga este memorata pe octeti.

marime reala, in simpla precizie este memorata pe octeti!

marime reala, in dubla precizie este memorata pe byti!

Constanta caracter 'Q' memorata pe octeti!

Sirul 'ann' este memorat pe octei!

Sirul 'n' este memorat pe biti!

Caracterul '' este memorat pe . biti.

Sa se evalueze expresiile, stiind ca: int i=1; int j=2; int k=-7; double x=0; double y=2.3;

-i - 5 * j >= k + 1

3 < j < 5

i + j + k == -2 * j

x && i || j - 3

Ce operatie logica si ce masca trebuie sa folositi pentru a converti codurile ASCII ale literelor mici in litere mari ? Dar pentru conversia inversa ?

O deplasare la dreapta cu 3 biti este echivalenta cu o rotatie la stanga cu cati biti ?

Sa se seteze pe 1 toti bitii dintr-un octet, cu exceptia bitului cel mai semnificativ.

Sa se scrie un program care citeste o valoare intreaga. Sa se afiseze un mesaj care sa indice daca numarul citit este par sau impar.

Sa se citeasca doua valori intregi. Sa se calculeze si sa se afiseze restul impartirii celor doua numere.

Sa se realizeze programe care executa urmatoarele actiuni:

Se citeste un unghi in grade; se cere sa se transforme in radiani (360 = 2p rad)

Calculeaza perimetrul si aria unui cerc de raza r citita de la tastatura

Calculeaza perimetrul si aria unui triunghi de laturi date.

Calculeaza expresia: -3∙x2 + x∙y - y/x

Sa se scrie un program care sa converteasca o temperatura in grade Celsius in echivalentul ei in grade Farenheit. Formula de conversie este F = 32 + 9/5 C Programul trebuie sa tipareasca ambele valori ale temperaturii (in grade Celsius si grade Farenheit) cu mesaje corespunzatoare

Care dintre variabilele care intervin in secventa de operatii urmatoare isi vor pastra valoarea avuta initial?

a ← b+c; a si c; c ← a-c; b si c

b ← c;    b si a; c ← a-b; a, b si c

Care dintre operatiile urmatoare atribuie variabilei intregi x una din cifrele sale, stiind ca x > 10000:

x ← x mod 100;     x ← x mod 10;

x ← x div 10 mod 10;    x ← x div 100 mod 10;

x ← x mod 10 div 1;     x ← x mod 50;



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1695
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved